Use plain git hash for VERSION when there is no exact tag.
[dcpomatic.git] / src / lib / ffmpeg.cc
index 6c8509b6cd71de2eef9e5a75e3c58b2e9f1cd87f..d9df232df3e7535caaa86c59ba90ff655b5b9a44 100644 (file)
@@ -96,30 +96,9 @@ avio_seek_wrapper (void* data, int64_t offset, int whence)
 }
 
 
-void
-FFmpeg::ffmpeg_log_callback (void* ptr, int level, const char* fmt, va_list vl)
-{
-       if (level > AV_LOG_WARNING) {
-               return;
-       }
-
-       char line[1024];
-       static int prefix = 0;
-       av_log_format_line (ptr, level, fmt, vl, line, sizeof (line), &prefix);
-       string str (line);
-       boost::algorithm::trim (str);
-       dcpomatic_log->log (String::compose ("FFmpeg: %1", str), LogEntry::TYPE_GENERAL);
-}
-
-
 void
 FFmpeg::setup_general ()
 {
-       /* This might not work too well in some cases of multiple FFmpeg decoders,
-          but it's probably good enough.
-       */
-       av_log_set_callback (FFmpeg::ffmpeg_log_callback);
-
        _file_group.set_paths (_ffmpeg_content->paths ());
        _avio_buffer = static_cast<uint8_t*> (wrapped_av_malloc(_avio_buffer_size));
        _avio_context = avio_alloc_context (_avio_buffer, _avio_buffer_size, 0, this, avio_read_wrapper, 0, avio_seek_wrapper);
@@ -147,14 +126,14 @@ FFmpeg::setup_general ()
        optional<int> video_stream_undefined_frame_rate;
 
        for (uint32_t i = 0; i < _format_context->nb_streams; ++i) {
-               auto s = _format_context->streams[i];
-               if (s->codecpar->codec_type == AVMEDIA_TYPE_VIDEO && avcodec_find_decoder(s->codecpar->codec_id)) {
-                       auto const frame_rate = av_q2d(s->avg_frame_rate);
+               auto stream = _format_context->streams[i];
+               if (stream->codecpar->codec_type == AVMEDIA_TYPE_VIDEO && avcodec_find_decoder(stream->codecpar->codec_id) && stream->disposition != AV_DISPOSITION_ATTACHED_PIC) {
+                       auto const frame_rate = av_q2d(stream->avg_frame_rate);
                        if (frame_rate < 1 || frame_rate > 1000) {
                                /* Ignore video streams with crazy frame rates.  These are usually things like album art on MP3s. */
                                continue;
                        }
-                       if (s->avg_frame_rate.num > 0 && s->avg_frame_rate.den > 0) {
+                       if (stream->avg_frame_rate.num > 0 && stream->avg_frame_rate.den > 0) {
                                /* This is definitely our video stream */
                                _video_stream = i;
                        } else {
@@ -273,7 +252,11 @@ FFmpeg::subtitle_codec_context () const
 int
 FFmpeg::avio_read (uint8_t* buffer, int const amount)
 {
-       return _file_group.read (buffer, amount);
+       auto result = _file_group.read(buffer, amount);
+       if (result.eof && result.bytes_read == 0) {
+               return AVERROR_EOF;
+       }
+       return result.bytes_read;
 }
 
 
@@ -376,6 +359,5 @@ FFmpeg::audio_frame (shared_ptr<const FFmpegAudioStream> stream)
 
        _audio_frame[stream] = frame;
        return frame;
-
 }