avcodec: for audio encoding, set packet dts to packet pts.
There are no audio encoders which do frame reordering.
This commit is contained in:
parent
d483bb58c3
commit
a75bc764ec
2
avconv.c
2
avconv.c
@ -991,6 +991,8 @@ static int encode_audio_frame(AVFormatContext *s, OutputStream *ost,
|
|||||||
if (got_packet) {
|
if (got_packet) {
|
||||||
if (pkt.pts != AV_NOPTS_VALUE)
|
if (pkt.pts != AV_NOPTS_VALUE)
|
||||||
pkt.pts = av_rescale_q(pkt.pts, enc->time_base, ost->st->time_base);
|
pkt.pts = av_rescale_q(pkt.pts, enc->time_base, ost->st->time_base);
|
||||||
|
if (pkt.dts != AV_NOPTS_VALUE)
|
||||||
|
pkt.dts = av_rescale_q(pkt.dts, enc->time_base, ost->st->time_base);
|
||||||
if (pkt.duration > 0)
|
if (pkt.duration > 0)
|
||||||
pkt.duration = av_rescale_q(pkt.duration, enc->time_base, ost->st->time_base);
|
pkt.duration = av_rescale_q(pkt.duration, enc->time_base, ost->st->time_base);
|
||||||
|
|
||||||
|
@ -873,12 +873,14 @@ int attribute_align_arg avcodec_encode_audio2(AVCodecContext *avctx,
|
|||||||
if (avctx->codec->encode2) {
|
if (avctx->codec->encode2) {
|
||||||
*got_packet_ptr = 0;
|
*got_packet_ptr = 0;
|
||||||
ret = avctx->codec->encode2(avctx, avpkt, frame, got_packet_ptr);
|
ret = avctx->codec->encode2(avctx, avpkt, frame, got_packet_ptr);
|
||||||
if (!ret && *got_packet_ptr &&
|
if (!ret && *got_packet_ptr) {
|
||||||
!(avctx->codec->capabilities & CODEC_CAP_DELAY)) {
|
if (!(avctx->codec->capabilities & CODEC_CAP_DELAY)) {
|
||||||
avpkt->pts = frame->pts;
|
avpkt->pts = frame->pts;
|
||||||
avpkt->duration = av_rescale_q(frame->nb_samples,
|
avpkt->duration = av_rescale_q(frame->nb_samples,
|
||||||
(AVRational){ 1, avctx->sample_rate },
|
(AVRational){ 1, avctx->sample_rate },
|
||||||
avctx->time_base);
|
avctx->time_base);
|
||||||
|
}
|
||||||
|
avpkt->dts = avpkt->pts;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
/* for compatibility with encoders not supporting encode2(), we need to
|
/* for compatibility with encoders not supporting encode2(), we need to
|
||||||
@ -925,7 +927,7 @@ int attribute_align_arg avcodec_encode_audio2(AVCodecContext *avctx,
|
|||||||
av_freep(&avpkt->data);
|
av_freep(&avpkt->data);
|
||||||
} else {
|
} else {
|
||||||
if (avctx->coded_frame)
|
if (avctx->coded_frame)
|
||||||
avpkt->pts = avctx->coded_frame->pts;
|
avpkt->pts = avpkt->dts = avctx->coded_frame->pts;
|
||||||
/* Set duration for final small packet. This can be removed
|
/* Set duration for final small packet. This can be removed
|
||||||
once all encoders supporting CODEC_CAP_SMALL_LAST_FRAME use
|
once all encoders supporting CODEC_CAP_SMALL_LAST_FRAME use
|
||||||
encode2() */
|
encode2() */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user