summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2013-03-07 22:01:06 +0000
committerCarl Hetherington <cth@carlh.net>2013-03-07 22:01:06 +0000
commit665bc942f86bd7a8aeb2b38f3e9c2cb6662e6edc (patch)
treeed6a81b9b16d605c0c84be443b7326ff472b1f4c /src
parente1395a170449f8d4911f1e7db2ad7338d0c3326c (diff)
parentb9fb4a402b411ddf84c10587187e187bcea34a5e (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.cc24
-rw-r--r--src/lib/matcher.h3
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;
};