Message ID | 1560523426-5034-1-git-send-email-amir@livelyvideo.tv |
---|---|
State | New |
Headers | show |
On Fri, Jun 14, 2019 at 07:43:46AM -0700, Amir Pauker wrote: > set AVFrame decode_error_flags to FF_DECODE_ERROR_CONCEALMENT_ACTIVE in case > h->slice_ctx->er.error_occurred is set after the call to ff_h264_execute_decode_slices. > This allows the user to detect concealed decoding errors in the call to avcodec_receive_frame > > Signed-off-by: Amir Pauker <amir@livelyvideo.tv> > --- > libavcodec/h264dec.c | 5 +++++ > 1 file changed, 5 insertions(+) > > diff --git a/libavcodec/h264dec.c b/libavcodec/h264dec.c > index 837c3b7..98b7d79 100644 > --- a/libavcodec/h264dec.c > +++ b/libavcodec/h264dec.c > @@ -761,6 +761,11 @@ static int decode_nal_units(H264Context *h, const uint8_t *buf, int buf_size) > if (ret < 0 && (h->avctx->err_recognition & AV_EF_EXPLODE)) > goto end; > > + // set decode_error_flags to allow users to detect concealed decoding errors > + if ((ret < 0 || h->slice_ctx->er.error_occurred) && h->cur_pic_ptr) { > + h->cur_pic_ptr->f->decode_error_flags |= FF_DECODE_ERROR_CONCEALMENT_ACTIVE; > + } > + it would be more robust to set the flag around where the "concealing %d DC, %d AC, %d MV errors in %c frame\" message is printed That is when concealing actually happens thanks [...]
Thanks Michael, The reason I set the flag before the log line in ff_er_frame_end is because the code might never get there even though the return value is set to zero. Should we use two different values ? Thanks Amir On Sun, Jun 16, 2019 at 10:53 AM Michael Niedermayer <michael@niedermayer.cc> wrote: > On Fri, Jun 14, 2019 at 07:43:46AM -0700, Amir Pauker wrote: > > set AVFrame decode_error_flags to FF_DECODE_ERROR_CONCEALMENT_ACTIVE in > case > > h->slice_ctx->er.error_occurred is set after the call to > ff_h264_execute_decode_slices. > > This allows the user to detect concealed decoding errors in the call to > avcodec_receive_frame > > > > Signed-off-by: Amir Pauker <amir@livelyvideo.tv> > > --- > > libavcodec/h264dec.c | 5 +++++ > > 1 file changed, 5 insertions(+) > > > > diff --git a/libavcodec/h264dec.c b/libavcodec/h264dec.c > > index 837c3b7..98b7d79 100644 > > --- a/libavcodec/h264dec.c > > +++ b/libavcodec/h264dec.c > > @@ -761,6 +761,11 @@ static int decode_nal_units(H264Context *h, const > uint8_t *buf, int buf_size) > > if (ret < 0 && (h->avctx->err_recognition & AV_EF_EXPLODE)) > > goto end; > > > > + // set decode_error_flags to allow users to detect concealed > decoding errors > > + if ((ret < 0 || h->slice_ctx->er.error_occurred) && h->cur_pic_ptr) > { > > + h->cur_pic_ptr->f->decode_error_flags |= > FF_DECODE_ERROR_CONCEALMENT_ACTIVE; > > + } > > + > > it would be more robust to set the flag around where the > "concealing %d DC, %d AC, %d MV errors in %c frame\" message is printed > > That is when concealing actually happens > > thanks > > [...] > -- > Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB > > Avoid a single point of failure, be that a person or equipment. > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > To unsubscribe, visit link above, or email > ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
On Tue, Jun 18, 2019 at 03:14:47PM +0300, Amir Z wrote: > Thanks Michael, > > The reason I set the flag before the log line in ff_er_frame_end is because > the code might never get there even though the return value is set to zero. > > Should we use two different values ? if there are 2 semantically different cases, maybe yes thx [...]
Thanks Michael, I submitted two new patches. I add a new value FF_DECODE_ERROR_DECODE_SLICES. FF_DECODE_ERROR_DECODE_SLICES indicates that error(s) occurred during slices decoding but the return code is set to zero (set where previously FF_DECODE_ERROR_CONCEALMENT_ACTIVE was set). FF_DECODE_ERROR_CONCEALMENT_ACTIVE indicates that an attempt to correct those errors was made (set where you suggested) Amir On Wed, Jun 19, 2019 at 12:38 PM Michael Niedermayer <michael@niedermayer.cc> wrote: > On Tue, Jun 18, 2019 at 03:14:47PM +0300, Amir Z wrote: > > Thanks Michael, > > > > The reason I set the flag before the log line in ff_er_frame_end is > because > > the code might never get there even though the return value is set to > zero. > > > > Should we use two different values ? > > if there are 2 semantically different cases, maybe yes > > thx > > [...] > -- > Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB > > Opposition brings concord. Out of discord comes the fairest harmony. > -- Heraclitus > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > To unsubscribe, visit link above, or email > ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
diff --git a/libavcodec/h264dec.c b/libavcodec/h264dec.c index 837c3b7..98b7d79 100644 --- a/libavcodec/h264dec.c +++ b/libavcodec/h264dec.c @@ -761,6 +761,11 @@ static int decode_nal_units(H264Context *h, const uint8_t *buf, int buf_size) if (ret < 0 && (h->avctx->err_recognition & AV_EF_EXPLODE)) goto end; + // set decode_error_flags to allow users to detect concealed decoding errors + if ((ret < 0 || h->slice_ctx->er.error_occurred) && h->cur_pic_ptr) { + h->cur_pic_ptr->f->decode_error_flags |= FF_DECODE_ERROR_CONCEALMENT_ACTIVE; + } + ret = 0; end:
set AVFrame decode_error_flags to FF_DECODE_ERROR_CONCEALMENT_ACTIVE in case h->slice_ctx->er.error_occurred is set after the call to ff_h264_execute_decode_slices. This allows the user to detect concealed decoding errors in the call to avcodec_receive_frame Signed-off-by: Amir Pauker <amir@livelyvideo.tv> --- libavcodec/h264dec.c | 5 +++++ 1 file changed, 5 insertions(+)