diff options
| author | Carl Hetherington <cth@carlh.net> | 2013-03-07 22:01:06 +0000 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2013-03-07 22:01:06 +0000 |
| commit | 665bc942f86bd7a8aeb2b38f3e9c2cb6662e6edc (patch) | |
| tree | ed6a81b9b16d605c0c84be443b7326ff472b1f4c /src | |
| parent | e1395a170449f8d4911f1e7db2ad7338d0c3326c (diff) | |
| parent | b9fb4a402b411ddf84c10587187e187bcea34a5e (diff) | |
Merge branch 'fix-early-audio-take2' of ssh://carlh.dnsalias.org/home/carl/git/dvdomatic into fix-early-audio-take2
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/matcher.cc | 24 | ||||
| -rw-r--r-- | src/lib/matcher.h | 3 |
2 files changed, 21 insertions, 6 deletions
diff --git a/src/lib/matcher.cc b/src/lib/matcher.cc index 883f1a42a..a74eeabbb 100644 --- a/src/lib/matcher.cc +++ b/src/lib/matcher.cc @@ -34,6 +34,8 @@ Matcher::Matcher (Log* log, int sample_rate, float frames_per_second) , _frames_per_second (frames_per_second) , _video_frames (0) , _audio_frames (0) + , _had_first_video (false) + , _had_first_audio (false) { } @@ -44,17 +46,20 @@ Matcher::process_video (boost::shared_ptr<Image> image, bool same, boost::shared _pixel_format = image->pixel_format (); _size = image->size (); - _log->log(String::compose("Matcher video @ %1 (same=%2)", t, same)); + _log->log(String::compose("Matcher video @ %1 [audio=%2, video=%3, pending_audio=%4]", t, _audio_frames, _video_frames, _pending_audio.size())); if (!_first_input) { _first_input = t; } - if (!_pending_audio.empty() && _video_frames == 0) { + bool const this_is_first_video = !_had_first_video; + _had_first_video = true; + + if (this_is_first_video && _had_first_audio) { /* First video since we got audio */ fix_start (t); } - + /* Video before audio is fine, since we can make up an arbitrary difference with audio samples (contrasting with video which is quantised to frames) */ @@ -88,15 +93,20 @@ void Matcher::process_audio (boost::shared_ptr<AudioBuffers> b, double t) { _channels = b->channels (); - + + _log->log (String::compose ("Matcher audio @ %1 [video=%2, audio=%3, pending_audio=%4]", t, _video_frames, _audio_frames, _pending_audio.size())); + if (!_first_input) { _first_input = t; } + + bool const this_is_first_audio = _had_first_audio; + _had_first_audio = true; - if (_video_frames == 0) { + if (!_had_first_video) { /* No video yet; we must postpone these data until we have some */ _pending_audio.push_back (AudioRecord (b, t)); - } else if (_video_frames > 0 && _audio_frames == 0 && _pending_audio.empty()) { + } else if (this_is_first_audio && !_had_first_video) { /* First audio since we got video */ _pending_audio.push_back (AudioRecord (b, t)); fix_start (_first_input.get ()); @@ -140,6 +150,8 @@ Matcher::fix_start (double first_video) void Matcher::match (double extra_video_needed) { + _log->log (String::compose ("Match %1", extra_video_needed)); + if (extra_video_needed > 0) { /* Emit black video frames */ diff --git a/src/lib/matcher.h b/src/lib/matcher.h index 4a387a3f9..a7054f540 100644 --- a/src/lib/matcher.h +++ b/src/lib/matcher.h @@ -57,4 +57,7 @@ private: boost::optional<double> _first_input; boost::shared_ptr<Image> _last_image; boost::shared_ptr<Subtitle> _last_subtitle; + + bool _had_first_video; + bool _had_first_audio; }; |
