[FFmpeg-cvslog] avcodec/h26[134]dec: Always report the buffer to be completely consumed
Andreas Rheinhardt
git at videolan.org
Tue Mar 4 14:35:33 EET 2025
ffmpeg | branch: master | Andreas Rheinhardt <andreas.rheinhardt at outlook.com> | Mon Feb 24 19:30:27 2025 +0100| [e6657d499a6ec5731da5692515b605493a819249] | committer: Andreas Rheinhardt
avcodec/h26[134]dec: Always report the buffer to be completely consumed
It is pointless to try to report the true number because
decode_simple_internal() always treats the buffer as
completely consumed for video codecs anyway.
(Apart from that: The h263dec code would report to only
have consumed the header data in case decoding is aborted
due to skip_frame which makes no sense.)
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at outlook.com>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=e6657d499a6ec5731da5692515b605493a819249
---
libavcodec/h261dec.c | 16 +---------------
libavcodec/h263dec.c | 31 ++++---------------------------
libavcodec/h264dec.c | 15 +--------------
3 files changed, 6 insertions(+), 56 deletions(-)
diff --git a/libavcodec/h261dec.c b/libavcodec/h261dec.c
index 116f1d43b2..8a2c4d35b4 100644
--- a/libavcodec/h261dec.c
+++ b/libavcodec/h261dec.c
@@ -536,20 +536,6 @@ static int h261_decode_gob(H261DecContext *h)
return -1;
}
-/**
- * returns the number of bytes consumed for building the current frame
- */
-static int get_consumed_bytes(MpegEncContext *s, int buf_size)
-{
- int pos = get_bits_count(&s->gb) >> 3;
- if (pos == 0)
- pos = 1; // avoid infinite loops (i doubt that is needed but ...)
- if (pos + 10 > buf_size)
- pos = buf_size; // oops ;)
-
- return pos;
-}
-
static int h261_decode_frame(AVCodecContext *avctx, AVFrame *pict,
int *got_frame, AVPacket *avpkt)
{
@@ -615,7 +601,7 @@ static int h261_decode_frame(AVCodecContext *avctx, AVFrame *pict,
*got_frame = 1;
- return get_consumed_bytes(s, buf_size);
+ return buf_size;
}
const FFCodec ff_h261_decoder = {
diff --git a/libavcodec/h263dec.c b/libavcodec/h263dec.c
index 452641e408..fa1146f025 100644
--- a/libavcodec/h263dec.c
+++ b/libavcodec/h263dec.c
@@ -170,29 +170,6 @@ av_cold int ff_h263_decode_init(AVCodecContext *avctx)
return 0;
}
-/**
- * Return the number of bytes consumed for building the current frame.
- */
-static int get_consumed_bytes(MpegEncContext *s, int buf_size)
-{
- int pos = (get_bits_count(&s->gb) + 7) >> 3;
-
- if (s->divx_packed || s->avctx->hwaccel) {
- /* We would have to scan through the whole buf to handle the weird
- * reordering ... */
- return buf_size;
- } else {
- // avoid infinite loops (maybe not needed...)
- if (pos == 0)
- pos = 1;
- // oops ;)
- if (pos + 10 > buf_size)
- pos = buf_size;
-
- return pos;
- }
-}
-
static int decode_slice(MpegEncContext *s)
{
const int part_mask = s->partitioned_frame
@@ -523,7 +500,7 @@ retry:
}
}
if (ret == FRAME_SKIPPED)
- return get_consumed_bytes(s, buf_size);
+ return buf_size;
/* skip if the header was thrashed */
if (ret < 0) {
@@ -587,13 +564,13 @@ retry:
/* skip B-frames if we don't have reference frames */
if (!s->last_pic.ptr &&
(s->pict_type == AV_PICTURE_TYPE_B || s->droppable))
- return get_consumed_bytes(s, buf_size);
+ return buf_size;
if ((avctx->skip_frame >= AVDISCARD_NONREF &&
s->pict_type == AV_PICTURE_TYPE_B) ||
(avctx->skip_frame >= AVDISCARD_NONKEY &&
s->pict_type != AV_PICTURE_TYPE_I) ||
avctx->skip_frame >= AVDISCARD_ALL)
- return get_consumed_bytes(s, buf_size);
+ return buf_size;
if ((ret = ff_mpv_frame_start(s, avctx)) < 0)
return ret;
@@ -702,7 +679,7 @@ frame_end:
if (slice_ret < 0 && (avctx->err_recognition & AV_EF_EXPLODE))
return slice_ret;
else
- return get_consumed_bytes(s, buf_size);
+ return buf_size;
}
static const AVCodecHWConfigInternal *const h263_hw_config_list[] = {
diff --git a/libavcodec/h264dec.c b/libavcodec/h264dec.c
index 45ebe2656d..fd401027d6 100644
--- a/libavcodec/h264dec.c
+++ b/libavcodec/h264dec.c
@@ -827,19 +827,6 @@ end:
return (ret < 0) ? ret : buf_size;
}
-/**
- * Return the number of bytes consumed for building the current frame.
- */
-static int get_consumed_bytes(int pos, int buf_size)
-{
- if (pos == 0)
- pos = 1; // avoid infinite loops (I doubt that is needed but...)
- if (pos + 10 > buf_size)
- pos = buf_size; // oops ;)
-
- return pos;
-}
-
static int h264_export_enc_params(AVFrame *f, const H264Picture *p)
{
AVVideoEncParams *par;
@@ -1100,7 +1087,7 @@ static int h264_decode_frame(AVCodecContext *avctx, AVFrame *pict,
ff_h264_unref_picture(&h->last_pic_for_ec);
- return get_consumed_bytes(buf_index, buf_size);
+ return buf_size;
}
#define OFFSET(x) offsetof(H264Context, x)
More information about the ffmpeg-cvslog
mailing list