Don't crash if the first packet in a stream has AV_NOPTS_VALUE;
authorCarl Hetherington <cth@carlh.net>
Wed, 14 Oct 2020 19:24:57 +0000 (21:24 +0200)
committerCarl Hetherington <cth@carlh.net>
Wed, 14 Oct 2020 19:24:57 +0000 (21:24 +0200)
instead, assume it should be at timestamp 0.

src/lib/ffmpeg_decoder.cc

index 79fce30274b973ae4aa33a9504db21b798dd9e6e..3c0f48804106f57677baeca55267df1f561d3a0f 100644 (file)
@@ -469,12 +469,14 @@ DCPOMATIC_DISABLE_WARNINGS
                        shared_ptr<AudioBuffers> data = deinterleave_audio (*stream);
 
                        ContentTime ct;
                        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).
                                */
                                /* 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) *
                        } else {
                                ct = ContentTime::from_seconds (
                                        av_frame_get_best_effort_timestamp (_frame) *