Aug 3, 2019, 9:40 PM by c...@passwd.hu: > Otherwise the user might get a silence padded frame in the beginning or in the > middle of the encoding. > > Some other bug uncovered this: > > ./ffmpeg -loglevel verbose -y -f data -i /dev/zero \ > -filter_complex "nullsrc=s=60x60:d=10[v0];sine=d=10[a]" \ > -map '[v0]' -c:v:0 rawvideo \ > -map '[a]' -c:a:0 mp2 \ > -f mpegts out.ts > > Signed-off-by: Marton Balint <c...@passwd.hu> > --- > libavcodec/encode.c | 10 ++++++++-- > 1 file changed, 8 insertions(+), 2 deletions(-) > > diff --git a/libavcodec/encode.c b/libavcodec/encode.c > index d12c42526b..d81b32b983 100644 > --- a/libavcodec/encode.c > +++ b/libavcodec/encode.c > @@ -174,8 +174,14 @@ int attribute_align_arg > avcodec_encode_audio2(AVCodecContext *avctx, > goto end; > } > } else if (!(avctx->codec->capabilities & AV_CODEC_CAP_VARIABLE_FRAME_SIZE)) > { > - if (frame->nb_samples < avctx->frame_size && > - !avctx->internal->last_audio_frame) { > + /* if we already got an undersized frame, that must have been > the last */ > + if (avctx->internal->last_audio_frame) { > + av_log(avctx, AV_LOG_ERROR, "frame_size (%d) was not > respected for a non-last frame (avcodec_encode_audio2)\n", avctx->frame_size); > + ret = AVERROR(EINVAL); > + goto end; > + } > + > + if (frame->nb_samples < avctx->frame_size) { > ret = pad_last_frame(avctx, &padded_frame, frame); > if (ret < 0) > goto end; >
You haven't fixed the bug, you've just made it an error. You have to fix the encoder instead. The check might be useful if its made a warning instead though. _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".