extern "C" {
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
+#include <libavutil/pixfmt.h>
+#include <libavutil/pixdesc.h>
}
#include "ffmpeg_examiner.h"
#include "ffmpeg_content.h"
if (s->codec->channel_layout == 0) {
s->codec->channel_layout = av_get_default_channel_layout (s->codec->channels);
}
-
+
_audio_streams.push_back (
shared_ptr<FFmpegAudioStream> (
new FFmpegAudioStream (audio_stream_name (s), s->id, s->codec->sample_rate, s->codec->channels)
job->set_progress_unknown ();
}
+ if (job) {
+ job->sub (_("Finding subtitles"));
+ }
+
/* Run through until we find:
* - the first video.
* - the first audio for each stream.
break;
}
+ if (job) {
+ job->set_progress_unknown ();
+ }
+
AVCodecContext* context = _format_context->streams[_packet.stream_index]->codec;
if (_packet.stream_index == _video_stream) {
video_packet (context);
}
-
+
for (size_t i = 0; i < _audio_streams.size(); ++i) {
if (_audio_streams[i]->uses_index (_format_context, _packet.stream_index)) {
audio_packet (context, _audio_streams[i]);
FFmpegExaminer::frame_time (AVStream* s) const
{
optional<ContentTime> t;
-
+
int64_t const bet = av_frame_get_best_effort_timestamp (_frame);
if (bet != AV_NOPTS_VALUE) {
t = ContentTime::from_seconds (bet * av_q2d (s->time_base));
return t;
}
-optional<float>
+optional<double>
FFmpegExaminer::video_frame_rate () const
{
/* This use of r_frame_rate is debateable; there's a few different
return max (Frame (1), _video_length);
}
-optional<float>
+optional<double>
FFmpegExaminer::sample_aspect_ratio () const
{
AVRational sar = av_guess_sample_aspect_ratio (_format_context, _format_context->streams[_video_stream], 0);
if (sar.num == 0) {
/* I assume this means that we don't know */
- return optional<float> ();
+ return optional<double> ();
}
- return float (sar.num) / sar.den;
+ return double (sar.num) / sar.den;
}
string
if (lang) {
n << lang->value;
}
-
+
AVDictionaryEntry const * title = av_dict_get (s->metadata, "title", 0, 0);
if (title) {
if (!n.str().empty()) {
return n.str ();
}
+
+int
+FFmpegExaminer::bits_per_pixel () const
+{
+ return av_get_bits_per_pixel (av_pix_fmt_desc_get (video_codec_context()->pix_fmt));
+}