/* See if the header has duration information in it */
_need_video_length = _format_context->duration == AV_NOPTS_VALUE;
if (!_need_video_length) {
- _video_length = (double (_format_context->duration) / AV_TIME_BASE) * video_frame_rate().get ();
+ _video_length = llrint ((double (_format_context->duration) / AV_TIME_BASE) * video_frame_rate().get());
}
}
FFmpegExaminer::video_frame_rate () const
{
DCPOMATIC_ASSERT (_video_stream);
- /* This use of r_frame_rate is debateable; there's a few different
- * frame rates in the format context, but this one seems to be the most
- * reliable.
- */
- return av_q2d (av_stream_get_r_frame_rate (_format_context->streams[_video_stream.get()]));
+ return av_q2d(av_guess_frame_rate(_format_context, _format_context->streams[_video_stream.get()], 0));
}
dcp::Size
return n;
}
-int
+optional<int>
FFmpegExaminer::bits_per_pixel () const
{
if (video_codec_context()->pix_fmt == -1) {
- throw DecodeError (_("Could not find pixel format for video."));
+ return optional<int>();
}
AVPixFmtDescriptor const * d = av_pix_fmt_desc_get (video_codec_context()->pix_fmt);