diff options
| author | Carl Hetherington <cth@carlh.net> | 2022-09-11 09:32:06 +0200 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2022-09-11 09:32:06 +0200 |
| commit | 3bc8c0bd2375e8180a2745e760c91cfb59b413d7 (patch) | |
| tree | bd9e617932013933f1d3a00199c5cda897d75735 /src/lib/ffmpeg_decoder.cc | |
| parent | 61fb89205e631cdb49161bbc4b321d5a93868120 (diff) | |
| parent | 3005c17f626e739b2f8d63f203a0b0a3240eb530 (diff) | |
Merge branch '2323-player-locking'
Various attempts to tidy up and fix the locking of Player (#2323).
Diffstat (limited to 'src/lib/ffmpeg_decoder.cc')
| -rw-r--r-- | src/lib/ffmpeg_decoder.cc | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/src/lib/ffmpeg_decoder.cc b/src/lib/ffmpeg_decoder.cc index 331ab313d..250bce955 100644 --- a/src/lib/ffmpeg_decoder.cc +++ b/src/lib/ffmpeg_decoder.cc @@ -452,6 +452,8 @@ FFmpegDecoder::process_audio_frame (shared_ptr<FFmpegAudioStream> stream) auto frame = audio_frame (stream); auto data = deinterleave_audio (frame); + auto const time_base = stream->stream(_format_context)->time_base; + ContentTime ct; if (frame->pts == AV_NOPTS_VALUE) { /* In some streams we see not every frame coming through with a timestamp; for those @@ -464,8 +466,16 @@ FFmpegDecoder::process_audio_frame (shared_ptr<FFmpegAudioStream> stream) } else { ct = ContentTime::from_seconds ( frame->best_effort_timestamp * - av_q2d (stream->stream(_format_context)->time_base)) + av_q2d(time_base)) + _pts_offset; + LOG_DEBUG_PLAYER( + "Process audio with timestamp %1 (BET %2, timebase %3/%4, (PTS offset %5)", + to_string(ct), + frame->best_effort_timestamp, + time_base.num, + time_base.den, + to_string(_pts_offset) + ); } _next_time[stream] = ct + ContentTime::from_frames(data->frames(), stream->frame_rate()); @@ -485,7 +495,7 @@ FFmpegDecoder::process_audio_frame (shared_ptr<FFmpegAudioStream> stream) data->frames(), stream->id(), frame->best_effort_timestamp, - av_q2d(stream->stream(_format_context)->time_base), + av_q2d(time_base), to_string(_pts_offset) ); } @@ -508,6 +518,7 @@ FFmpegDecoder::decode_and_process_audio_packet (AVPacket* packet) auto context = _codec_context[stream->index(_format_context)]; auto frame = audio_frame (stream); + LOG_DEBUG_PLAYER("Send audio packet on stream %1", stream->index(_format_context)); int r = avcodec_send_packet (context, packet); if (r < 0) { LOG_WARNING("avcodec_send_packet returned %1 for an audio packet", r); @@ -516,6 +527,7 @@ FFmpegDecoder::decode_and_process_audio_packet (AVPacket* packet) r = avcodec_receive_frame (context, frame); if (r == AVERROR(EAGAIN)) { /* More input is required */ + LOG_DEBUG_PLAYER_NC("EAGAIN after trying to receive auido frame"); return; } |
