From 931fa4ef2dbfb7c9f726c4dd41eea79621b49906 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Tue, 1 Apr 2014 11:34:56 +0100 Subject: Don't overlap simultaneous video content in the timeline. Fix keep-aligned for separate-eye sources. --- src/lib/player.cc | 2 +- src/lib/player.h | 2 +- src/lib/playlist.cc | 19 +++++++++++++------ 3 files changed, 15 insertions(+), 8 deletions(-) (limited to 'src/lib') diff --git a/src/lib/player.cc b/src/lib/player.cc index d05597dd5..c4558f33f 100644 --- a/src/lib/player.cc +++ b/src/lib/player.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2013 Carl Hetherington + Copyright (C) 2013-2014 Carl Hetherington This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/src/lib/player.h b/src/lib/player.h index 11cc99e77..f7896d7d9 100644 --- a/src/lib/player.h +++ b/src/lib/player.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2013 Carl Hetherington + Copyright (C) 2013-2014 Carl Hetherington This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/src/lib/playlist.cc b/src/lib/playlist.cc index 608323e3b..a2bec83bb 100644 --- a/src/lib/playlist.cc +++ b/src/lib/playlist.cc @@ -64,7 +64,7 @@ Playlist::~Playlist () void Playlist::content_changed (weak_ptr content, int property, bool frequent) { - if (property == ContentProperty::LENGTH) { + if (property == ContentProperty::LENGTH || property == VideoContentProperty::VIDEO_FRAME_TYPE) { maybe_sequence_video (); } @@ -81,14 +81,21 @@ Playlist::maybe_sequence_video () _sequencing_video = true; ContentList cl = _content; - Time next = 0; + Time next_left = 0; + Time next_right = 0; for (ContentList::iterator i = _content.begin(); i != _content.end(); ++i) { - if (!dynamic_pointer_cast (*i)) { + shared_ptr vc = dynamic_pointer_cast (*i); + if (!vc) { continue; } - - (*i)->set_position (next); - next = (*i)->end() + 1; + + if (vc->video_frame_type() == VIDEO_FRAME_TYPE_3D_RIGHT) { + vc->set_position (next_right); + next_right = vc->end() + 1; + } else { + vc->set_position (next_left); + next_left = vc->end() + 1; + } } /* This won't change order, so it does not need a sort */ -- cgit v1.2.3