Don't crash if the first packet in a stream has AV_NOPTS_VALUE;
[dcpomatic.git] / src / lib / ffmpeg_decoder.cc
index 04c97ed3ba4d6b98cb87b706ec7ae47dea44ca6d..3c0f48804106f57677baeca55267df1f561d3a0f 100644 (file)
@@ -416,6 +416,10 @@ DCPOMATIC_ENABLE_WARNINGS
        }
 
        _have_current_subtitle = false;
+
+       BOOST_FOREACH (optional<ContentTime>& i, _next_time) {
+               i = optional<ContentTime>();
+       }
 }
 
 void
@@ -465,12 +469,14 @@ DCPOMATIC_DISABLE_WARNINGS
                        shared_ptr<AudioBuffers> data = deinterleave_audio (*stream);
 
                        ContentTime ct;
-                       if (_frame->pts == AV_NOPTS_VALUE && _next_time[stream_index]) {
+                       if (_frame->pts == AV_NOPTS_VALUE) {
                                /* In some streams we see not every frame coming through with a timestamp; for those
                                   that have AV_NOPTS_VALUE we need to work out the timestamp ourselves.  This is
                                   particularly noticeable with TrueHD streams (see #1111).
                                */
-                               ct = *_next_time[stream_index];
+                               if (_next_time[stream_index]) {
+                                       ct = *_next_time[stream_index];
+                               }
                        } else {
                                ct = ContentTime::from_seconds (
                                        av_frame_get_best_effort_timestamp (_frame) *