summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian@centricular.com>2020-06-26 13:11:56 +0300
committerSebastian Dröge <sebastian@centricular.com>2020-06-26 16:11:18 +0300
commitf7371f86919a904b24b3888abf029fa754bca78c (patch)
treef05bc18181cd55d8bed779e561f519d98c381368
parente1928898c8d49fe287d73db21c4ba5bed41bcf8e (diff)
downloadgst-libav-f7371f86919a904b24b3888abf029fa754bca78c.tar.gz
avcodecmap: Add support for SpeedHQ video codec
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-libav/-/merge_requests/79>
-rw-r--r--docs/gst_plugins_cache.json2
-rw-r--r--ext/libav/gstavcodecmap.c30
2 files changed, 31 insertions, 1 deletions
diff --git a/docs/gst_plugins_cache.json b/docs/gst_plugins_cache.json
index 4d2d631..08b33cb 100644
--- a/docs/gst_plugins_cache.json
+++ b/docs/gst_plugins_cache.json
@@ -19166,7 +19166,7 @@
"long-name": "libav NewTek SpeedHQ decoder",
"pad-templates": {
"sink": {
- "caps": "unknown/unknown:\n",
+ "caps": "video/x-speedhq:\n",
"direction": "sink",
"presence": "always"
},
diff --git a/ext/libav/gstavcodecmap.c b/ext/libav/gstavcodecmap.c
index c9a7812..bde228e 100644
--- a/ext/libav/gstavcodecmap.c
+++ b/ext/libav/gstavcodecmap.c
@@ -1413,6 +1413,21 @@ gst_ffmpeg_codecid_to_caps (enum AVCodecID codec_id,
"video/x-cineform", NULL);
break;
+ case AV_CODEC_ID_SPEEDHQ:
+ if (context && context->codec_tag) {
+ gchar *variant = g_strdup_printf ("%" GST_FOURCC_FORMAT,
+ GST_FOURCC_ARGS (context->codec_tag));
+ caps =
+ gst_ff_vid_caps_new (context, NULL, codec_id, encode,
+ "video/x-speedhq", "variant", G_TYPE_STRING, variant, NULL);
+ g_free (variant);
+ } else {
+ caps =
+ gst_ff_vid_caps_new (context, NULL, codec_id, encode,
+ "video/x-speedhq", NULL);
+ }
+ break;
+
case AV_CODEC_ID_AAC:
{
caps =
@@ -3415,6 +3430,18 @@ gst_ffmpeg_caps_with_codecid (enum AVCodecID codec_id,
}
break;
}
+ case AV_CODEC_ID_SPEEDHQ:
+ {
+ const gchar *variant;
+
+ if (context && (variant = gst_structure_get_string (str, "variant"))
+ && strlen (variant) == 4) {
+
+ context->codec_tag =
+ GST_MAKE_FOURCC (variant[0], variant[1], variant[2], variant[3]);
+ }
+ break;
+ }
default:
break;
}
@@ -4070,6 +4097,9 @@ gst_ffmpeg_caps_to_codecid (const GstCaps * caps, AVCodecContext * context)
} else if (!strcmp (mimetype, "video/x-cineform")) {
id = AV_CODEC_ID_CFHD;
video = TRUE;
+ } else if (!strcmp (mimetype, "video/x-speedhq")) {
+ id = AV_CODEC_ID_SPEEDHQ;
+ video = TRUE;
} else if (!strcmp (mimetype, "video/x-indeo")) {
gint indeoversion = 0;