[FFmpeg-cvslog] avcodec: for audio encoding, set packet dts to packet pts.

Justin Ruggles git at videolan.org
Sat Feb 11 01:35:35 CET 2012


ffmpeg | branch: master | Justin Ruggles <justin.ruggles at gmail.com> | Mon Feb  6 19:08:32 2012 -0500| [a75bc764ec89d800fa8d70662f16f89cdec17b49] | committer: Justin Ruggles

avcodec: for audio encoding, set packet dts to packet pts.

There are no audio encoders which do frame reordering.

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=a75bc764ec89d800fa8d70662f16f89cdec17b49
---

 avconv.c           |    2 ++
 libavcodec/utils.c |   16 +++++++++-------
 2 files changed, 11 insertions(+), 7 deletions(-)

diff --git a/avconv.c b/avconv.c
index 57a4c92..418e1fd 100644
--- a/avconv.c
+++ b/avconv.c
@@ -991,6 +991,8 @@ static int encode_audio_frame(AVFormatContext *s, OutputStream *ost,
     if (got_packet) {
         if (pkt.pts != AV_NOPTS_VALUE)
             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)
             pkt.duration = av_rescale_q(pkt.duration, enc->time_base, ost->st->time_base);
 
diff --git a/libavcodec/utils.c b/libavcodec/utils.c
index c890cf9..9dded6a 100644
--- a/libavcodec/utils.c
+++ b/libavcodec/utils.c
@@ -873,12 +873,14 @@ int attribute_align_arg avcodec_encode_audio2(AVCodecContext *avctx,
     if (avctx->codec->encode2) {
         *got_packet_ptr = 0;
         ret = avctx->codec->encode2(avctx, avpkt, frame, got_packet_ptr);
-        if (!ret && *got_packet_ptr &&
-            !(avctx->codec->capabilities & CODEC_CAP_DELAY)) {
-            avpkt->pts = frame->pts;
-            avpkt->duration = av_rescale_q(frame->nb_samples,
-                                           (AVRational){ 1, avctx->sample_rate },
-                                           avctx->time_base);
+        if (!ret && *got_packet_ptr) {
+            if (!(avctx->codec->capabilities & CODEC_CAP_DELAY)) {
+                avpkt->pts = frame->pts;
+                avpkt->duration = av_rescale_q(frame->nb_samples,
+                                               (AVRational){ 1, avctx->sample_rate },
+                                               avctx->time_base);
+            }
+            avpkt->dts = avpkt->pts;
         }
     } else {
         /* 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);
             } else {
                 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
                    once all encoders supporting CODEC_CAP_SMALL_LAST_FRAME use
                    encode2() */



More information about the ffmpeg-cvslog mailing list