From 9724227c09a4a535adf4722b5d0e1c8e95c99105 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim-Philipp=20M=C3=BCller?= Date: Wed, 23 Oct 2024 14:22:37 +0100 Subject: [PATCH] avcodecmap: add mapping for Hap video codec Decoder works, encoder needs more work. Part-of: --- .../gst-libav/ext/libav/gstavcodecmap.c | 20 +++++++++++++++++++ subprojects/gst-libav/ext/libav/gstavvidenc.c | 8 +++++++- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/subprojects/gst-libav/ext/libav/gstavcodecmap.c b/subprojects/gst-libav/ext/libav/gstavcodecmap.c index 87abdc6068..9f639fe706 100644 --- a/subprojects/gst-libav/ext/libav/gstavcodecmap.c +++ b/subprojects/gst-libav/ext/libav/gstavcodecmap.c @@ -1219,6 +1219,7 @@ gst_ffmpeg_codecid_is_known (enum AVCodecID codec_id) case AV_CODEC_ID_APTX_HD: case AV_CODEC_ID_AV1: case AV_CODEC_ID_M101: + case AV_CODEC_ID_HAP: return TRUE; default: return FALSE; @@ -2892,6 +2893,11 @@ gst_ffmpeg_codecid_to_caps (enum AVCodecID codec_id, gst_ff_vid_caps_new (context, NULL, codec_id, encode, "video/x-m101", NULL); break; + case AV_CODEC_ID_HAP: + caps = + gst_ff_vid_caps_new (context, NULL, codec_id, encode, "video/x-hap", + NULL); + break; default: GST_DEBUG ("Unknown codec ID %d, please add mapping here", codec_id); break; @@ -3971,6 +3977,20 @@ gst_ffmpeg_caps_with_codecid (enum AVCodecID codec_id, } break; + case AV_CODEC_ID_HAP:{ + const gchar *variant; + + if ((variant = gst_structure_get_string (str, "variant"))) { + if (strlen (variant) == 4) { + GST_INFO ("HAP video variant '%s'", variant); + context->codec_tag = + GST_MAKE_FOURCC (variant[0], variant[1], variant[2], variant[3]); + } else { + GST_ERROR ("Unexpected HAP video variant '%s'", variant); + } + } + break; + } case AV_CODEC_ID_MSRLE: case AV_CODEC_ID_QTRLE: case AV_CODEC_ID_TSCC: diff --git a/subprojects/gst-libav/ext/libav/gstavvidenc.c b/subprojects/gst-libav/ext/libav/gstavvidenc.c index 239929d415..2b2a04dcc9 100644 --- a/subprojects/gst-libav/ext/libav/gstavvidenc.c +++ b/subprojects/gst-libav/ext/libav/gstavvidenc.c @@ -1092,6 +1092,12 @@ gst_ffmpegvidenc_register (GstPlugin * plugin) continue; } + int rank = GST_RANK_SECONDARY; + + if (!strcmp (in_plugin->name, "hap")) { + rank = GST_RANK_NONE; + } + /* construct the type */ type_name = g_strdup_printf ("avenc_%s", in_plugin->name); @@ -1115,7 +1121,7 @@ gst_ffmpegvidenc_register (GstPlugin * plugin) } } - if (!gst_element_register (plugin, type_name, GST_RANK_SECONDARY, type)) { + if (!gst_element_register (plugin, type_name, rank, type)) { g_free (type_name); return FALSE; }