mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-13 21:28:01 +02:00
lavc/libopenh264enc: Add coder option to replace cabac
Set DEPRECATED flag to option cabac, replace with coder. The priority logic is: 1. s->coder; then 2. avctx->coder_type; then 3. s->cabac. Change the default option to -1 and allow the default cabac to be determined by profile. Add FF_API_OPENH264_CABAC macro for cabac to remove this option after LIBAVCODEC_VERSION_MAJOR = 59. Reviewed-by: Martin Storsjö <martin@martin.st> Signed-off-by: Linjie Fu <linjie.fu@intel.com>
This commit is contained in:
parent
e3e2702d40
commit
e4d37abcc1
@ -48,7 +48,10 @@ typedef struct SVCContext {
|
||||
int max_nal_size;
|
||||
int skip_frames;
|
||||
int skipped;
|
||||
int cabac;
|
||||
#if FF_API_OPENH264_CABAC
|
||||
int cabac; // deprecated
|
||||
#endif
|
||||
int coder;
|
||||
|
||||
// rate control mode
|
||||
int rc_mode;
|
||||
@ -83,7 +86,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 FF_API_OPENH264_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" },
|
||||
@ -145,13 +156,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
|
||||
|
||||
param.fMaxFrameRate = 1/av_q2d(avctx->time_base);
|
||||
param.iPicWidth = avctx->width;
|
||||
param.iPicHeight = avctx->height;
|
||||
@ -197,12 +201,22 @@ FF_ENABLE_DEPRECATION_WARNINGS
|
||||
break;
|
||||
}
|
||||
|
||||
if (s->profile == FF_PROFILE_UNKNOWN)
|
||||
s->profile = !s->cabac ? FF_PROFILE_H264_CONSTRAINED_BASELINE :
|
||||
#if FF_API_CODER_TYPE && FF_API_OPENH264_CABAC
|
||||
FF_DISABLE_DEPRECATION_WARNINGS
|
||||
if (s->coder < 0 && avctx->coder_type == FF_CODER_TYPE_AC)
|
||||
s->coder = 1;
|
||||
|
||||
if (s->coder < 0)
|
||||
s->coder = s->cabac;
|
||||
FF_ENABLE_DEPRECATION_WARNINGS
|
||||
#endif
|
||||
|
||||
if (s->profile == FF_PROFILE_UNKNOWN && s->coder >= 0)
|
||||
s->profile = s->coder == 0 ? FF_PROFILE_H264_CONSTRAINED_BASELINE :
|
||||
#if OPENH264_VER_AT_LEAST(1, 8)
|
||||
FF_PROFILE_H264_HIGH;
|
||||
FF_PROFILE_H264_HIGH;
|
||||
#else
|
||||
FF_PROFILE_H264_MAIN;
|
||||
FF_PROFILE_H264_MAIN;
|
||||
#endif
|
||||
|
||||
switch (s->profile) {
|
||||
|
@ -138,6 +138,9 @@
|
||||
#ifndef FF_API_OPENH264_SLICE_MODE
|
||||
#define FF_API_OPENH264_SLICE_MODE (LIBAVCODEC_VERSION_MAJOR < 59)
|
||||
#endif
|
||||
#ifndef FF_API_OPENH264_CABAC
|
||||
#define FF_API_OPENH264_CABAC (LIBAVCODEC_VERSION_MAJOR < 59)
|
||||
#endif
|
||||
|
||||
|
||||
#endif /* AVCODEC_VERSION_H */
|
||||
|
Loading…
Reference in New Issue
Block a user