X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fffmpeg_file_encoder.cc;h=e9809008098536ee6591904e2047b378683d22d1;hb=f5980767b7d1d9b39186dd13f12b9d8297a87aef;hp=0c6bd96853858d97367a25a8d37239a21428328b;hpb=0f2813bd0c62a4748c8354077583d69a07f19c9e;p=dcpomatic.git diff --git a/src/lib/ffmpeg_file_encoder.cc b/src/lib/ffmpeg_file_encoder.cc index 0c6bd9685..e98090080 100644 --- a/src/lib/ffmpeg_file_encoder.cc +++ b/src/lib/ffmpeg_file_encoder.cc @@ -63,6 +63,7 @@ FFmpegFileEncoder::FFmpegFileEncoder ( , _video_frame_size (video_frame_size) , _video_frame_rate (video_frame_rate) , _audio_frame_rate (audio_frame_rate) + , _audio_frames (0) { _pixel_format = pixel_format (format); @@ -86,6 +87,8 @@ FFmpegFileEncoder::FFmpegFileEncoder ( _audio_codec_name = "pcm_s24le"; av_dict_set_int (&_video_options, "crf", x264_crf, 0); break; + default: + DCPOMATIC_ASSERT (false); } setup_video (); @@ -294,7 +297,8 @@ FFmpegFileEncoder::video (shared_ptr video, DCPTime time) frame->width = image->size().width; frame->height = image->size().height; frame->format = _pixel_format; - frame->pts = time.seconds() / av_q2d (_video_stream->time_base); + DCPOMATIC_ASSERT (_video_stream->time_base.num == 1); + frame->pts = time.get() * _video_stream->time_base.den / DCPTime::HZ; AVPacket packet; av_init_packet (&packet); @@ -389,6 +393,9 @@ FFmpegFileEncoder::audio_frame (int size) DCPOMATIC_ASSERT (false); } + DCPOMATIC_ASSERT (_audio_stream->time_base.num == 1); + frame->pts = _audio_frames * _audio_stream->time_base.den / _audio_frame_rate; + AVPacket packet; av_init_packet (&packet); packet.data = 0; @@ -409,6 +416,7 @@ FFmpegFileEncoder::audio_frame (int size) av_frame_free (&frame); _pending_audio->trim_start (size); + _audio_frames += size; } void