throw EncodeError (N_("avcodec_receive_packet"), N_("FFmpegFileEncoder::flush"), r);
} else {
packet->stream_index = _video_stream_index;
+ packet->duration = _video_stream->time_base.den / _video_frame_rate;
av_interleaved_write_frame (_format_context, packet.get());
}
flushed_audio = true;
- for (auto i: _audio_streams) {
+ for (auto const& i: _audio_streams) {
if (!i->flush()) {
flushed_audio = false;
}
}
auto const r = av_write_trailer(_format_context);
- DCPOMATIC_ASSERT(r == 0);
+ if (r) {
+ throw EncodeError(N_("av_write_trailer"), N_("FFmpegFileEncoder::flush"), r);
+ }
}
throw EncodeError (N_("avcodec_receive_packet"), N_("FFmpegFileEncoder::video"), r);
} else if (r >= 0) {
packet->stream_index = _video_stream_index;
+ packet->duration = _video_stream->time_base.den / _video_frame_rate;
av_interleaved_write_frame (_format_context, packet.get());
}
}