Use make_shared<>.
[dcpomatic.git] / test / play_test.cc
index 7beee6f43df86453e316e052a8fc3e83bb32a7c5..9b9e2c87bed21faf161d98682ec76c505c903915 100644 (file)
@@ -1,19 +1,20 @@
 /*
-    Copyright (C) 2013 Carl Hetherington <cth@carlh.net>
+    Copyright (C) 2013-2014 Carl Hetherington <cth@carlh.net>
 
-    This program is free software; you can redistribute it and/or modify
+    This file is part of DCP-o-matic.
+
+    DCP-o-matic is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
     the Free Software Foundation; either version 2 of the License, or
     (at your option) any later version.
 
-    This program is distributed in the hope that it will be useful,
+    DCP-o-matic is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     GNU General Public License for more details.
 
     You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+    along with DCP-o-matic.  If not, see <http://www.gnu.org/licenses/>.
 
 */
 
@@ -21,7 +22,9 @@
 #include "lib/player.h"
 #include "lib/ratio.h"
 #include "lib/dcp_content_type.h"
+#include "lib/player_video_frame.h"
 #include "test.h"
+#include <iostream>
 
 /* This test needs stuff in Player that is only included in debug mode */
 #ifdef DCPOMATIC_DEBUG
@@ -34,7 +37,7 @@ struct Video
 {
        boost::shared_ptr<Content> content;
        boost::shared_ptr<const Image> image;
-       DCPTime time;
+       Time time;
 };
 
 class PlayerWrapper
@@ -43,14 +46,14 @@ public:
        PlayerWrapper (shared_ptr<Player> p)
                : _player (p)
        {
-               _player->Video.connect (bind (&PlayerWrapper::process_video, this, _1, _2, _5));
+               _player->Video.connect (bind (&PlayerWrapper::process_video, this, _1, _3));
        }
 
-       void process_video (shared_ptr<PlayerImage> i, bool, DCPTime t)
+       void process_video (shared_ptr<PlayerVideoFrame> i, Time t)
        {
                Video v;
                v.content = _player->_last_video;
-               v.image = i->image ();
+               v.image = i->image (PIX_FMT_RGB24);
                v.time = t;
                _queue.push_front (v);
        }
@@ -61,13 +64,13 @@ public:
                if (_queue.empty ()) {
                        return optional<Video> ();
                }
-               
+
                Video v = _queue.back ();
                _queue.pop_back ();
                return v;
        }
 
-       void seek (DCPTime t, bool ac)
+       void seek (Time t, bool ac)
        {
                _player->seek (t, ac);
                _queue.clear ();
@@ -81,22 +84,22 @@ private:
 BOOST_AUTO_TEST_CASE (play_test)
 {
        shared_ptr<Film> film = new_test_film ("play_test");
-       film->set_dcp_content_type (DCPContentType::from_dci_name ("FTR"));
+       film->set_dcp_content_type (DCPContentType::from_isdcf_name ("FTR"));
        film->set_container (Ratio::from_id ("185"));
        film->set_name ("play_test");
 
-       shared_ptr<FFmpegContent> A (new FFmpegContent (film, "test/data/red_24.mp4"));
+       shared_ptr<FFmpegContent> A = make_shared<FFmpegContent> (film, "test/data/red_24.mp4");
        film->examine_and_add_content (A);
        wait_for_jobs ();
 
-       BOOST_CHECK_EQUAL (A->video_length(), 16);
+       BOOST_CHECK_EQUAL (A->video_length_after_3d_combine(), 16);
 
-       shared_ptr<FFmpegContent> B (new FFmpegContent (film, "test/data/red_30.mp4"));
+       shared_ptr<FFmpegContent> B = make_shared<FFmpegContent> (film, "test/data/red_30.mp4");
        film->examine_and_add_content (B);
        wait_for_jobs ();
 
-       BOOST_CHECK_EQUAL (B->video_length(), 16);
-       
+       BOOST_CHECK_EQUAL (B->video_length_after_3d_combine(), 16);
+
        /* Film should have been set to 25fps */
        BOOST_CHECK_EQUAL (film->video_frame_rate(), 25);
 
@@ -104,8 +107,10 @@ BOOST_AUTO_TEST_CASE (play_test)
        /* A is 16 frames long at 25 fps */
        BOOST_CHECK_EQUAL (B->position(), 16 * TIME_HZ / 25);
 
-       shared_ptr<Player> player = film->make_player ();
+       shared_ptr<Player> player = make_shared<Player> (film);
        PlayerWrapper wrap (player);
+       /* Seek and audio don't get on at the moment */
+       player->disable_audio ();
 
        for (int i = 0; i < 32; ++i) {
                optional<Video> v = wrap.get_video ();
@@ -117,10 +122,10 @@ BOOST_AUTO_TEST_CASE (play_test)
                }
        }
 
-       player->seek (6 * TIME_HZ / 25, true);
+       wrap.seek (10 * TIME_HZ / 25, true);
        optional<Video> v = wrap.get_video ();
        BOOST_CHECK (v);
-       BOOST_CHECK_EQUAL (v.get().time, 6 * TIME_HZ / 25);
+       BOOST_CHECK_EQUAL (v.get().time, 10 * TIME_HZ / 25);
 }
 
 #endif