[FFmpeg-devel,2/6] avcodec/mediacodecdec: warn when input buffers are not configured with proper size

Submitted by Aman Gupta on Sept. 5, 2019, 6:27 p.m.

Details

Message ID 20190905182735.65987-2-ffmpeg@tmm1.net
State Accepted
Commit 8a3623e2fbde8cb2da3235bf9e230f3512a31c34
Headers show

Commit Message

Aman Gupta Sept. 5, 2019, 6:27 p.m.
From: Aman Gupta <aman@tmm1.net>

In rare circumstances, if the codec is not configured with the
proper parameters the input buffers can be allocated with a size
that's too small to hold an individual packet. Since MediaCodec
expects exactly one incoming buffer with a given PTS, it is not
valid to split data for a given PTS across two input buffers.

See https://developer.android.com/reference/android/media/MediaCodec#data-processing:

  > Do not submit multiple input buffers with the same timestamp

Signed-off-by: Aman Gupta <aman@tmm1.net>
---
 libavcodec/mediacodecdec.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

Patch hide | download patch | download mbox

diff --git a/libavcodec/mediacodecdec.c b/libavcodec/mediacodecdec.c
index e353e34bd5..f5771bffb1 100644
--- a/libavcodec/mediacodecdec.c
+++ b/libavcodec/mediacodecdec.c
@@ -440,8 +440,13 @@  static int mediacodec_receive_frame(AVCodecContext *avctx, AVFrame *frame)
             if (ret >= 0) {
                 s->buffered_pkt.size -= ret;
                 s->buffered_pkt.data += ret;
-                if (s->buffered_pkt.size <= 0)
+                if (s->buffered_pkt.size <= 0) {
                     av_packet_unref(&s->buffered_pkt);
+                } else {
+                    av_log(avctx, AV_LOG_WARNING,
+                           "could not send entire packet in single input buffer (%d < %d)\n",
+                           ret, s->buffered_pkt.size+ret);
+                }
             } else if (ret < 0 && ret != AVERROR(EAGAIN)) {
                 return ret;
             }