New way of checking for 2D content mislabelled as 3D (#1565).
[dcpomatic.git] / test / frame_interval_checker_test.cc
1 /*
2     Copyright (C) 2020 Carl Hetherington <cth@carlh.net>
3
4     This file is part of DCP-o-matic.
5
6     DCP-o-matic is free software; you can redistribute it and/or modify
7     it under the terms of the GNU General Public License as published by
8     the Free Software Foundation; either version 2 of the License, or
9     (at your option) any later version.
10
11     DCP-o-matic is distributed in the hope that it will be useful,
12     but WITHOUT ANY WARRANTY; without even the implied warranty of
13     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14     GNU General Public License for more details.
15
16     You should have received a copy of the GNU General Public License
17     along with DCP-o-matic.  If not, see <http://www.gnu.org/licenses/>.
18
19 */
20
21 #include "lib/frame_interval_checker.h"
22 #include <boost/test/unit_test.hpp>
23
24 /** Test of 2D-ish frame timings */
25 BOOST_AUTO_TEST_CASE (frame_interval_checker_test1)
26 {
27         FrameIntervalChecker checker;
28         ContentTime t(3888);
29         checker.feed (t, 24);
30         BOOST_CHECK (checker.guess() == FrameIntervalChecker::AGAIN);
31         t += ContentTime(4012);
32         checker.feed (t, 24);
33         BOOST_CHECK (checker.guess() == FrameIntervalChecker::AGAIN);
34         t += ContentTime(4000);
35         checker.feed (t, 24);
36         BOOST_CHECK (checker.guess() == FrameIntervalChecker::AGAIN);
37         t += ContentTime(4000);
38         checker.feed (t, 24);
39         BOOST_CHECK (checker.guess() == FrameIntervalChecker::AGAIN);
40         t += ContentTime(3776);
41         checker.feed (t, 24);
42         BOOST_CHECK (checker.guess() == FrameIntervalChecker::AGAIN);
43         t += ContentTime(3779);
44         checker.feed (t, 24);
45         BOOST_CHECK (checker.guess() == FrameIntervalChecker::AGAIN);
46         t += ContentTime(4010);
47         checker.feed (t, 24);
48         BOOST_CHECK (checker.guess() == FrameIntervalChecker::AGAIN);
49         t += ContentTime(4085);
50         checker.feed (t, 24);
51         BOOST_CHECK (checker.guess() == FrameIntervalChecker::AGAIN);
52         t += ContentTime(4085);
53         checker.feed (t, 24);
54         BOOST_CHECK (checker.guess() == FrameIntervalChecker::AGAIN);
55         t += ContentTime(4012);
56         checker.feed (t, 24);
57         BOOST_CHECK (checker.guess() == FrameIntervalChecker::AGAIN);
58         t += ContentTime(4000);
59         checker.feed (t, 24);
60         BOOST_CHECK (checker.guess() == FrameIntervalChecker::AGAIN);
61         t += ContentTime(4000);
62         checker.feed (t, 24);
63         BOOST_CHECK (checker.guess() == FrameIntervalChecker::AGAIN);
64         t += ContentTime(3776);
65         checker.feed (t, 24);
66         BOOST_CHECK (checker.guess() == FrameIntervalChecker::AGAIN);
67         t += ContentTime(3779);
68         checker.feed (t, 24);
69         BOOST_CHECK (checker.guess() == FrameIntervalChecker::AGAIN);
70         t += ContentTime(4010);
71         checker.feed (t, 24);
72         BOOST_CHECK (checker.guess() == FrameIntervalChecker::AGAIN);
73         t += ContentTime(4085);
74         checker.feed (t, 24);
75         BOOST_CHECK (checker.guess() == FrameIntervalChecker::AGAIN);
76         t += ContentTime(4085);
77         checker.feed (t, 24);
78         BOOST_CHECK (checker.guess() == FrameIntervalChecker::PROBABLY_NOT_3D);
79 }
80
81 /** Test of 3D-ish frame timings */
82 BOOST_AUTO_TEST_CASE (frame_interval_checker_test2)
83 {
84         FrameIntervalChecker checker;
85         ContentTime t(3888);
86         checker.feed (t, 24);
87         BOOST_CHECK (checker.guess() == FrameIntervalChecker::AGAIN);
88         t += ContentTime(0);
89         checker.feed (t, 24);
90         BOOST_CHECK (checker.guess() == FrameIntervalChecker::AGAIN);
91         t += ContentTime(4000);
92         checker.feed (t, 24);
93         BOOST_CHECK (checker.guess() == FrameIntervalChecker::AGAIN);
94         t += ContentTime(0);
95         checker.feed (t, 24);
96         BOOST_CHECK (checker.guess() == FrameIntervalChecker::AGAIN);
97         t += ContentTime(3776);
98         checker.feed (t, 24);
99         BOOST_CHECK (checker.guess() == FrameIntervalChecker::AGAIN);
100         t += ContentTime(50);
101         checker.feed (t, 24);
102         BOOST_CHECK (checker.guess() == FrameIntervalChecker::AGAIN);
103         t += ContentTime(4010);
104         checker.feed (t, 24);
105         BOOST_CHECK (checker.guess() == FrameIntervalChecker::AGAIN);
106         t += ContentTime(2);
107         checker.feed (t, 24);
108         BOOST_CHECK (checker.guess() == FrameIntervalChecker::AGAIN);
109         t += ContentTime(4011);
110         checker.feed (t, 24);
111         BOOST_CHECK (checker.guess() == FrameIntervalChecker::AGAIN);
112         t += ContentTime(0);
113         checker.feed (t, 24);
114         BOOST_CHECK (checker.guess() == FrameIntervalChecker::AGAIN);
115         t += ContentTime(4000);
116         checker.feed (t, 24);
117         BOOST_CHECK (checker.guess() == FrameIntervalChecker::AGAIN);
118         t += ContentTime(0);
119         checker.feed (t, 24);
120         BOOST_CHECK (checker.guess() == FrameIntervalChecker::AGAIN);
121         t += ContentTime(3776);
122         checker.feed (t, 24);
123         BOOST_CHECK (checker.guess() == FrameIntervalChecker::AGAIN);
124         t += ContentTime(50);
125         checker.feed (t, 24);
126         BOOST_CHECK (checker.guess() == FrameIntervalChecker::AGAIN);
127         t += ContentTime(4010);
128         checker.feed (t, 24);
129         BOOST_CHECK (checker.guess() == FrameIntervalChecker::AGAIN);
130         t += ContentTime(2);
131         checker.feed (t, 24);
132         BOOST_CHECK (checker.guess() == FrameIntervalChecker::AGAIN);
133         t += ContentTime(4011);
134         checker.feed (t, 24);
135         BOOST_CHECK (checker.guess() == FrameIntervalChecker::PROBABLY_3D);
136 }
137
138