+ auto frame = audio_frame (stream);
+ auto data = deinterleave_audio (frame);
+
+ ContentTime ct;
+ 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).
+ */
+ if (_next_time[stream]) {
+ ct = *_next_time[stream];
+ }
+ } else {
+ ct = ContentTime::from_seconds (
+ frame->best_effort_timestamp *
+ av_q2d (stream->stream(_format_context)->time_base))
+ + _pts_offset;
+ }
+
+ _next_time[stream] = ct + ContentTime::from_frames(data->frames(), stream->frame_rate());