aboutsummaryrefslogtreecommitdiffstats
path: root/libavcodec/mediacodecenc.c
diff options
context:
space:
mode:
authorSamuel Raposo Vieira Mira <samuel.mira@qt.io>2023-03-27 15:21:27 +0000
committerZhao Zhili <zhilizhao@tencent.com>2023-04-02 15:10:15 +0800
commitb4eca5cce2a1a2872f6525ba50082536ee080445 (patch)
tree842bac05753ac2b9f694d85b882fb41162a9cd6f /libavcodec/mediacodecenc.c
parent139f3352ed4bbe762c6f87b2443c9378c2beaae3 (diff)
downloadffmpeg-b4eca5cce2a1a2872f6525ba50082536ee080445.tar.gz
avcodec/mediacodec: add mpeg4 encoder
This patch will add MPEG4 encoder using Android Mediacodec Signed-off-by: Samuel Mira <samuel.mira@qt.io<mailto:samuel.mira@qt.io>> Signed-off-by: Zhao Zhili <zhilizhao@tencent.com>
Diffstat (limited to 'libavcodec/mediacodecenc.c')
-rw-r--r--libavcodec/mediacodecenc.c49
1 files changed, 49 insertions, 0 deletions
diff --git a/libavcodec/mediacodecenc.c b/libavcodec/mediacodecenc.c
index c7e2beb1ae..0767cd0165 100644
--- a/libavcodec/mediacodecenc.c
+++ b/libavcodec/mediacodecenc.c
@@ -167,6 +167,9 @@ static av_cold int mediacodec_init(AVCodecContext *avctx)
case AV_CODEC_ID_VP9:
codec_mime = "video/x-vnd.on2.vp9";
break;
+ case AV_CODEC_ID_MPEG4:
+ codec_mime = "video/mp4v-es";
+ break;
default:
av_assert0(0);
}
@@ -825,3 +828,49 @@ static const AVOption vp9_options[] = {
DECLARE_MEDIACODEC_ENCODER(vp9, "VP9", AV_CODEC_ID_VP9)
#endif // CONFIG_VP9_MEDIACODEC_ENCODER
+
+#if CONFIG_MPEG4_MEDIACODEC_ENCODER
+
+enum MediaCodecMpeg4Level {
+ MPEG4Level0 = 0x01,
+ MPEG4Level0b = 0x02,
+ MPEG4Level1 = 0x04,
+ MPEG4Level2 = 0x08,
+ MPEG4Level3 = 0x10,
+ MPEG4Level3b = 0x18,
+ MPEG4Level4 = 0x20,
+ MPEG4Level4a = 0x40,
+ MPEG4Level5 = 0x80,
+ MPEG4Level6 = 0x100,
+};
+
+static const AVOption mpeg4_options[] = {
+ COMMON_OPTION
+ { "level", "Specify tier and level",
+ OFFSET(level), AV_OPT_TYPE_INT, {.i64 = 0}, 0, INT_MAX, VE, "level" },
+ { "0", "Level 0",
+ 0, AV_OPT_TYPE_CONST, { .i64 = MPEG4Level0 }, 0, 0, VE, "level" },
+ { "0b", "Level 0b",
+ 0, AV_OPT_TYPE_CONST, { .i64 = MPEG4Level0b }, 0, 0, VE, "level" },
+ { "1", "Level 1",
+ 0, AV_OPT_TYPE_CONST, { .i64 = MPEG4Level1 }, 0, 0, VE, "level" },
+ { "2", "Level 2",
+ 0, AV_OPT_TYPE_CONST, { .i64 = MPEG4Level2 }, 0, 0, VE, "level" },
+ { "3", "Level 3",
+ 0, AV_OPT_TYPE_CONST, { .i64 = MPEG4Level3 }, 0, 0, VE, "level" },
+ { "3b", "Level 3b",
+ 0, AV_OPT_TYPE_CONST, { .i64 = MPEG4Level3b }, 0, 0, VE, "level" },
+ { "4", "Level 4",
+ 0, AV_OPT_TYPE_CONST, { .i64 = MPEG4Level4 }, 0, 0, VE, "level" },
+ { "4a", "Level 4a",
+ 0, AV_OPT_TYPE_CONST, { .i64 = MPEG4Level4a }, 0, 0, VE, "level" },
+ { "5", "Level 5",
+ 0, AV_OPT_TYPE_CONST, { .i64 = MPEG4Level5 }, 0, 0, VE, "level" },
+ { "6", "Level 6",
+ 0, AV_OPT_TYPE_CONST, { .i64 = MPEG4Level6 }, 0, 0, VE, "level" },
+ { NULL, }
+};
+
+DECLARE_MEDIACODEC_ENCODER(mpeg4, "MPEG-4", AV_CODEC_ID_MPEG4)
+
+#endif // CONFIG_MPEG4_MEDIACODEC_ENCODER