]> git.sesse.net Git - ffmpeg/blobdiff - ffmpeg.c
avcodec/dxtory: Fix input size check in dxtory_decode_v1_420()
[ffmpeg] / ffmpeg.c
index 7f3c426e099f6f80085df17049e124e633601324..33417772996fb93414a015637bdf916626b9cee1 100644 (file)
--- a/ffmpeg.c
+++ b/ffmpeg.c
@@ -672,7 +672,9 @@ static void write_frame(AVFormatContext *s, AVPacket *pkt, OutputStream *ost)
                 ost->error[i] = -1;
         }
 
-        if (ost->frame_rate.num) {
+        if (ost->frame_rate.num && ost->is_cfr) {
+            if (pkt->duration > 0)
+                av_log(NULL, AV_LOG_WARNING, "Overriding packet duration by frame rate, this should not happen\n");
             pkt->duration = av_rescale_q(1, av_inv_q(ost->frame_rate),
                                          ost->st->time_base);
         }
@@ -1005,6 +1007,7 @@ static void do_video_out(AVFormatContext *s,
                 format_video_sync = VSYNC_VSCFR;
             }
         }
+        ost->is_cfr = (format_video_sync == VSYNC_CFR || format_video_sync == VSYNC_VSCFR);
 
         if (delta0 < 0 &&
             delta > 0 &&
@@ -3379,8 +3382,12 @@ static OutputStream *choose_output(void)
 
     for (i = 0; i < nb_output_streams; i++) {
         OutputStream *ost = output_streams[i];
-        int64_t opts = av_rescale_q(ost->st->cur_dts, ost->st->time_base,
+        int64_t opts = ost->st->cur_dts == AV_NOPTS_VALUE ? INT64_MIN :
+                       av_rescale_q(ost->st->cur_dts, ost->st->time_base,
                                     AV_TIME_BASE_Q);
+        if (ost->st->cur_dts == AV_NOPTS_VALUE)
+            av_log(NULL, AV_LOG_DEBUG, "cur_dts is invalid (this is harmless if it occurs once at the start per stream)\n");
+
         if (!ost->finished && opts < opts_min) {
             opts_min = opts;
             ost_min  = ost->unavailable ? NULL : ost;