avcodec/mediacodecdec: warn when input buffers are not configured with proper size

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>
This commit is contained in:
Aman Gupta 2019-09-05 11:04:09 -07:00
parent e26fb6a714
commit 8a3623e2fb

View File

@ -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;
}