Add some more logging when reading DCPs.
[dcpomatic.git] / src / lib / ffmpeg_decoder.cc
index 30a4b1823e8873193051ec2c6e91f9bbfe68f4c8..82eccb576d5df8248926315b72f6748406e9daaf 100644 (file)
@@ -93,8 +93,10 @@ FFmpegDecoder::FFmpegDecoder (shared_ptr<const Film> film, shared_ptr<const FFmp
        }
 
        if (c->only_text()) {
-               /* XXX: this time here should be the time of the first subtitle, not 0 */
-               text.push_back (make_shared<TextDecoder>(this, c->only_text(), ContentTime()));
+               text.push_back (make_shared<TextDecoder>(this, c->only_text()));
+               /* XXX: we should be calling maybe_set_position() on this TextDecoder, but we can't easily find
+                * the time of the first subtitle at this point.
+                */
        }
 
        for (auto i: c->ffmpeg_audio_streams()) {
@@ -644,6 +646,7 @@ FFmpegDecoder::decode_and_process_subtitle_packet (AVPacket* packet)
                _have_current_subtitle = true;
        }
 
+       ContentBitmapText bitmap_text(from);
        for (unsigned int i = 0; i < sub.num_rects; ++i) {
                auto const rect = sub.rects[i];
 
@@ -651,7 +654,7 @@ FFmpegDecoder::decode_and_process_subtitle_packet (AVPacket* packet)
                case SUBTITLE_NONE:
                        break;
                case SUBTITLE_BITMAP:
-                       process_bitmap_subtitle (rect, from);
+                       bitmap_text.subs.push_back(process_bitmap_subtitle(rect));
                        break;
                case SUBTITLE_TEXT:
                        cout << "XXX: SUBTITLE_TEXT " << rect->text << "\n";
@@ -662,6 +665,10 @@ FFmpegDecoder::decode_and_process_subtitle_packet (AVPacket* packet)
                }
        }
 
+       if (!bitmap_text.subs.empty()) {
+               only_text()->emit_bitmap_start(bitmap_text);
+       }
+
        if (_current_subtitle_to) {
                only_text()->emit_stop (*_current_subtitle_to);
        }
@@ -670,8 +677,8 @@ FFmpegDecoder::decode_and_process_subtitle_packet (AVPacket* packet)
 }
 
 
-void
-FFmpegDecoder::process_bitmap_subtitle (AVSubtitleRect const * rect, ContentTime from)
+BitmapText
+FFmpegDecoder::process_bitmap_subtitle (AVSubtitleRect const * rect)
 {
        /* Note BGRA is expressed little-endian, so the first byte in the word is B, second
           G, third R, fourth A.
@@ -754,7 +761,7 @@ FFmpegDecoder::process_bitmap_subtitle (AVSubtitleRect const * rect, ContentTime
                static_cast<double>(rect->h) / target_height
                );
 
-       only_text()->emit_bitmap_start (from, image, scaled_rect);
+       return { image, scaled_rect };
 }