Message ID | 20231114172051.13872-6-michael@niedermayer.cc |
---|---|
State | Accepted |
Commit | e56d91f8a8b5198b0464a44acc157176770409cd |
Headers | show |
Series | [FFmpeg-devel,1/6] avcodec/h264: Seperate SEI and IDR recovery handling | expand |
Context | Check | Description |
---|---|---|
yinshiyou/make_loongarch64 | success | Make finished |
yinshiyou/make_fate_loongarch64 | success | Make fate finished |
andriy/make_x86 | success | Make finished |
andriy/make_fate_x86 | success | Make fate finished |
On 11/14/2023 2:20 PM, Michael Niedermayer wrote: > Signed-off-by: Michael Niedermayer <michael@niedermayer.cc> > --- > libavcodec/h264dec.c | 7 +++++++ > libavcodec/h264dec.h | 1 + > 2 files changed, 8 insertions(+) > > diff --git a/libavcodec/h264dec.c b/libavcodec/h264dec.c > index b48821db244..aa0022a3aba 100644 > --- a/libavcodec/h264dec.c > +++ b/libavcodec/h264dec.c > @@ -939,6 +939,12 @@ static int finalize_frame(H264Context *h, AVFrame *dst, H264Picture *out, int *g > (h->avctx->flags2 & AV_CODEC_FLAG2_SHOW_ALL) || > out->recovered)) { > > + if (h->skip_gray > 0 && > + h->non_gray && out->gray && > + !(h->avctx->flags2 & AV_CODEC_FLAG2_SHOW_ALL) > + ) > + return 0; > + > if (!h->avctx->hwaccel && > (out->field_poc[0] == INT_MAX || > out->field_poc[1] == INT_MAX) > @@ -1091,6 +1097,7 @@ static const AVOption h264_options[] = { > { "nal_length_size", "nal_length_size", OFFSET(nal_length_size), AV_OPT_TYPE_INT, {.i64 = 0}, 0, 4, VDX }, > { "enable_er", "Enable error resilience on damaged frames (unsafe)", OFFSET(enable_er), AV_OPT_TYPE_BOOL, { .i64 = -1 }, -1, 1, VD }, > { "x264_build", "Assume this x264 version if no x264 version found in any SEI", OFFSET(x264_build), AV_OPT_TYPE_INT, {.i64 = -1}, -1, INT_MAX, VD }, > + { "skip_gray", "Do not return gray gap frames", OFFSET(skip_gray), AV_OPT_TYPE_INT, {.i64 = -1}, -1, 1, VD }, Same here. > { "noref_gray", "Avoid using gray gap frames as references", OFFSET(noref_gray), AV_OPT_TYPE_INT, {.i64 = 1}, -1, 1, VD }, > { NULL }, > }; > diff --git a/libavcodec/h264dec.h b/libavcodec/h264dec.h > index 591769ab258..447c2499d97 100644 > --- a/libavcodec/h264dec.h > +++ b/libavcodec/h264dec.h > @@ -572,6 +572,7 @@ typedef struct H264Context { > > int non_gray; ///< Did we encounter a intra frame after a gray gap frame > int noref_gray; > + int skip_gray; > } H264Context; > > extern const uint16_t ff_h264_mb_sizes[4];
diff --git a/libavcodec/h264dec.c b/libavcodec/h264dec.c index b48821db244..aa0022a3aba 100644 --- a/libavcodec/h264dec.c +++ b/libavcodec/h264dec.c @@ -939,6 +939,12 @@ static int finalize_frame(H264Context *h, AVFrame *dst, H264Picture *out, int *g (h->avctx->flags2 & AV_CODEC_FLAG2_SHOW_ALL) || out->recovered)) { + if (h->skip_gray > 0 && + h->non_gray && out->gray && + !(h->avctx->flags2 & AV_CODEC_FLAG2_SHOW_ALL) + ) + return 0; + if (!h->avctx->hwaccel && (out->field_poc[0] == INT_MAX || out->field_poc[1] == INT_MAX) @@ -1091,6 +1097,7 @@ static const AVOption h264_options[] = { { "nal_length_size", "nal_length_size", OFFSET(nal_length_size), AV_OPT_TYPE_INT, {.i64 = 0}, 0, 4, VDX }, { "enable_er", "Enable error resilience on damaged frames (unsafe)", OFFSET(enable_er), AV_OPT_TYPE_BOOL, { .i64 = -1 }, -1, 1, VD }, { "x264_build", "Assume this x264 version if no x264 version found in any SEI", OFFSET(x264_build), AV_OPT_TYPE_INT, {.i64 = -1}, -1, INT_MAX, VD }, + { "skip_gray", "Do not return gray gap frames", OFFSET(skip_gray), AV_OPT_TYPE_INT, {.i64 = -1}, -1, 1, VD }, { "noref_gray", "Avoid using gray gap frames as references", OFFSET(noref_gray), AV_OPT_TYPE_INT, {.i64 = 1}, -1, 1, VD }, { NULL }, }; diff --git a/libavcodec/h264dec.h b/libavcodec/h264dec.h index 591769ab258..447c2499d97 100644 --- a/libavcodec/h264dec.h +++ b/libavcodec/h264dec.h @@ -572,6 +572,7 @@ typedef struct H264Context { int non_gray; ///< Did we encounter a intra frame after a gray gap frame int noref_gray; + int skip_gray; } H264Context; extern const uint16_t ff_h264_mb_sizes[4];
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc> --- libavcodec/h264dec.c | 7 +++++++ libavcodec/h264dec.h | 1 + 2 files changed, 8 insertions(+)