mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-03-28 12:32:17 +02:00
lavc/mediacodec: rescale pts before decoding for both hw and sw buffers
Replicates the logic used in the wrap_hw_buffer path to wrap_sw_buffer as well. Fixes decoding issues observed on AMLogic devices with OMX.amlogic.mpeg2.decoder.awesome, where the decoder would spit out a constant stream of "mPtsRecoveryCount" errors and decoded frames were returned in the incorrect order. Signed-off-by: Matthieu Bouron <matthieu.bouron@gmail.com>
This commit is contained in:
parent
6d4a686d45
commit
aad79e4323
@ -282,10 +282,16 @@ static int mediacodec_wrap_sw_buffer(AVCodecContext *avctx,
|
||||
* on the last avpacket received which is not in sync with the frame:
|
||||
* * N avpackets can be pushed before 1 frame is actually returned
|
||||
* * 0-sized avpackets are pushed to flush remaining frames at EOS */
|
||||
frame->pts = info->presentationTimeUs;
|
||||
if (avctx->pkt_timebase.num && avctx->pkt_timebase.den) {
|
||||
frame->pts = av_rescale_q(info->presentationTimeUs,
|
||||
av_make_q(1, 1000000),
|
||||
avctx->pkt_timebase);
|
||||
} else {
|
||||
frame->pts = info->presentationTimeUs;
|
||||
}
|
||||
#if FF_API_PKT_PTS
|
||||
FF_DISABLE_DEPRECATION_WARNINGS
|
||||
frame->pkt_pts = info->presentationTimeUs;
|
||||
frame->pkt_pts = frame->pts;
|
||||
FF_ENABLE_DEPRECATION_WARNINGS
|
||||
#endif
|
||||
frame->pkt_dts = AV_NOPTS_VALUE;
|
||||
@ -613,7 +619,7 @@ int ff_mediacodec_dec_decode(AVCodecContext *avctx, MediaCodecDecContext *s,
|
||||
memcpy(data, pkt->data + offset, size);
|
||||
offset += size;
|
||||
|
||||
if (s->surface && avctx->pkt_timebase.num && avctx->pkt_timebase.den) {
|
||||
if (avctx->pkt_timebase.num && avctx->pkt_timebase.den) {
|
||||
pts = av_rescale_q(pts, avctx->pkt_timebase, av_make_q(1, 1000000));
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user