[FFmpeg-devel] [PATCH v3 9/9] lavc/libopenh264enc: Add coder option to replace cabac
Linjie Fu
linjie.fu at intel.com
Sat Apr 11 13:03:39 EEST 2020
Set DEPRECATED flag to option cabac, replace with coder.
Change the default option to -1 and allow the default cabac to be
determined by profile.
Add OPENH264_API_CABAC macro for cabac to remove this option after
LIBAVCODEC_VERSION_MAJOR = 59.
Signed-off-by: Linjie Fu <linjie.fu at intel.com>
---
libavcodec/libopenh264enc.c | 38 +++++++++++++++++++++++++++-----------
1 file changed, 27 insertions(+), 11 deletions(-)
diff --git a/libavcodec/libopenh264enc.c b/libavcodec/libopenh264enc.c
index df2d6ee..722d610 100644
--- a/libavcodec/libopenh264enc.c
+++ b/libavcodec/libopenh264enc.c
@@ -36,6 +36,9 @@
#ifndef OPENH264_API_SLICE_MODE
#define OPENH264_API_SLICE_MODE (LIBAVCODEC_VERSION_MAJOR < 59)
#endif
+#ifndef OPENH264_API_CABAC
+#define OPENH264_API_CABAC (LIBAVCODEC_VERSION_MAJOR < 59)
+#endif
#if !OPENH264_VER_AT_LEAST(1, 6)
#define SM_SIZELIMITED_SLICE SM_DYN_SLICE
@@ -52,7 +55,10 @@ typedef struct SVCContext {
int max_nal_size;
int skip_frames;
int skipped;
- int cabac;
+#if OPENH264_API_CABAC
+ int cabac; // deprecated
+#endif
+ int coder;
// rate control mode
int rc_mode;
@@ -86,7 +92,15 @@ static const AVOption options[] = {
#undef PROFILE
{ "max_nal_size", "set maximum NAL size in bytes", OFFSET(max_nal_size), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, VE },
{ "allow_skip_frames", "allow skipping frames to hit the target bitrate", OFFSET(skip_frames), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE },
- { "cabac", "Enable cabac", OFFSET(cabac), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, VE },
+#if OPENH264_API_CABAC
+ { "cabac", "Enable cabac(deprecated, use coder)", OFFSET(cabac), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, VE|DEPRECATED },
+#endif
+ { "coder", "Coder type", OFFSET(coder), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 1, VE, "coder" },
+ { "default", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = -1 }, INT_MIN, INT_MAX, VE, "coder" },
+ { "cavlc", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = 0 }, INT_MIN, INT_MAX, VE, "coder" },
+ { "cabac", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = 1 }, INT_MIN, INT_MAX, VE, "coder" },
+ { "vlc", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = 0 }, INT_MIN, INT_MAX, VE, "coder" },
+ { "ac", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = 1 }, INT_MIN, INT_MAX, VE, "coder" },
{ "rc_mode", "Select rate control mode", OFFSET(rc_mode), AV_OPT_TYPE_INT, { .i64 = RC_QUALITY_MODE }, RC_OFF_MODE, RC_TIMESTAMP_MODE, VE, "rc_mode" },
{ "off", "bit rate control off", 0, AV_OPT_TYPE_CONST, { .i64 = RC_OFF_MODE }, 0, 0, VE, "rc_mode" },
@@ -135,8 +149,17 @@ static av_cold int svc_encode_init_profile(AVCodecContext *avctx, SEncParamExt *
break;
}
- if (s->profile == FF_PROFILE_UNKNOWN)
- s->profile = s->cabac ? FF_PROFILE_H264_HIGH :
+#if FF_API_CODER_TYPE && OPENH264_API_CABAC
+FF_DISABLE_DEPRECATION_WARNINGS
+ if (s->coder < 0 && avctx->coder_type == FF_CODER_TYPE_AC)
+ s->coder = 1;
+ else
+ s->coder = s->cabac;
+FF_ENABLE_DEPRECATION_WARNINGS
+#endif
+
+ if (s->profile == FF_PROFILE_UNKNOWN && s->coder >= 0)
+ s->profile = s->coder ? FF_PROFILE_H264_HIGH :
FF_PROFILE_H264_CONSTRAINED_BASELINE;
switch (s->profile) {
@@ -355,13 +378,6 @@ static av_cold int svc_encode_init(AVCodecContext *avctx)
(*s->encoder)->GetDefaultParams(s->encoder, ¶m);
-#if FF_API_CODER_TYPE
-FF_DISABLE_DEPRECATION_WARNINGS
- if (!s->cabac)
- s->cabac = avctx->coder_type == FF_CODER_TYPE_AC;
-FF_ENABLE_DEPRECATION_WARNINGS
-#endif
-
if (err = svc_encode_init_params(avctx, ¶m) < 0)
return err;
--
2.7.4
More information about the ffmpeg-devel
mailing list