You've already forked libopenshot
mirror of
https://github.com/OpenShot/libopenshot.git
synced 2026-03-02 08:53:52 -08:00
201 lines
6.1 KiB
C++
201 lines
6.1 KiB
C++
#include "UnitTest++.h"
|
|
#include "../include/OpenShot.h"
|
|
|
|
using namespace std;
|
|
using namespace openshot;
|
|
|
|
TEST(FrameMapper_Get_Valid_Frame)
|
|
{
|
|
// Create a reader
|
|
DummyReader r(Framerate(24,1), 720, 480, 22000, 2, 5.0);
|
|
|
|
// Create mapping between 24 fps and 29.97 fps using classic pulldown
|
|
FrameMapper mapping(&r, Framerate(30000, 1001), PULLDOWN_CLASSIC);
|
|
|
|
try
|
|
{
|
|
// Should find this frame
|
|
MappedFrame f = mapping.GetMappedFrame(125);
|
|
CHECK(true); // success
|
|
}
|
|
catch (OutOfBoundsFrame &e)
|
|
{
|
|
// Unexpected failure to find frame
|
|
CHECK(false);
|
|
}
|
|
}
|
|
|
|
TEST(FrameMapper_Invalid_Frame_Too_Small)
|
|
{
|
|
// Create a reader
|
|
DummyReader r(Framerate(24,1), 720, 480, 22000, 2, 5.0);
|
|
|
|
// Create mapping 24 fps and 29.97 fps
|
|
FrameMapper mapping(&r, Framerate(30000, 1001), PULLDOWN_CLASSIC);
|
|
|
|
// Check invalid frame number
|
|
CHECK_THROW(mapping.GetMappedFrame(0), OutOfBoundsFrame);
|
|
|
|
}
|
|
|
|
TEST(FrameMapper_Invalid_Frame_Too_Large)
|
|
{
|
|
// Create a reader
|
|
DummyReader r(Framerate(24,1), 720, 480, 22000, 2, 4.0);
|
|
|
|
// Create mapping 24 fps and 29.97 fps
|
|
FrameMapper mapping(&r, Framerate(30000, 1001), PULLDOWN_CLASSIC);
|
|
|
|
// Check invalid frame number
|
|
CHECK_THROW(mapping.GetMappedFrame(151), OutOfBoundsFrame);
|
|
}
|
|
|
|
TEST(FrameMapper_24_fps_to_30_fps_Pulldown_Classic)
|
|
{
|
|
// Create a reader
|
|
DummyReader r(Framerate(24,1), 720, 480, 22000, 2, 5.0);
|
|
|
|
// Create mapping 24 fps and 29.97 fps
|
|
FrameMapper mapping(&r, Framerate(30000, 1001), PULLDOWN_CLASSIC);
|
|
MappedFrame frame2 = mapping.GetMappedFrame(2);
|
|
MappedFrame frame3 = mapping.GetMappedFrame(3);
|
|
|
|
// Check for 3 fields of frame 2
|
|
CHECK_EQUAL(2, frame2.Odd.Frame);
|
|
CHECK_EQUAL(2, frame2.Even.Frame);
|
|
CHECK_EQUAL(2, frame3.Odd.Frame);
|
|
CHECK_EQUAL(3, frame3.Even.Frame);
|
|
}
|
|
|
|
TEST(FrameMapper_24_fps_to_30_fps_Pulldown_Advanced)
|
|
{
|
|
// Create a reader
|
|
DummyReader r(Framerate(24,1), 720, 480, 22000, 2, 5.0);
|
|
|
|
// Create mapping 24 fps and 29.97 fps
|
|
FrameMapper mapping(&r, Framerate(30000, 1001), PULLDOWN_ADVANCED);
|
|
MappedFrame frame2 = mapping.GetMappedFrame(2);
|
|
MappedFrame frame3 = mapping.GetMappedFrame(3);
|
|
MappedFrame frame4 = mapping.GetMappedFrame(4);
|
|
|
|
// Check for advanced pulldown (only 1 fake frame)
|
|
CHECK_EQUAL(2, frame2.Odd.Frame);
|
|
CHECK_EQUAL(2, frame2.Even.Frame);
|
|
CHECK_EQUAL(2, frame3.Odd.Frame);
|
|
CHECK_EQUAL(3, frame3.Even.Frame);
|
|
CHECK_EQUAL(3, frame4.Odd.Frame);
|
|
CHECK_EQUAL(3, frame4.Even.Frame);
|
|
}
|
|
|
|
TEST(FrameMapper_24_fps_to_30_fps_Pulldown_None)
|
|
{
|
|
// Create a reader
|
|
DummyReader r(Framerate(24,1), 720, 480, 22000, 2, 5.0);
|
|
|
|
// Create mapping 24 fps and 29.97 fps
|
|
FrameMapper mapping(&r, Framerate(30000, 1001), PULLDOWN_NONE);
|
|
MappedFrame frame4 = mapping.GetMappedFrame(4);
|
|
MappedFrame frame5 = mapping.GetMappedFrame(5);
|
|
|
|
// Check for advanced pulldown (only 1 fake frame)
|
|
CHECK_EQUAL(4, frame4.Odd.Frame);
|
|
CHECK_EQUAL(4, frame4.Even.Frame);
|
|
CHECK_EQUAL(4, frame5.Odd.Frame);
|
|
CHECK_EQUAL(4, frame5.Even.Frame);
|
|
}
|
|
|
|
TEST(FrameMapper_30_fps_to_24_fps_Pulldown_Classic)
|
|
{
|
|
// Create a reader
|
|
DummyReader r(Framerate(30000, 1001), 720, 480, 22000, 2, 5.0);
|
|
|
|
// Create mapping between 29.97 fps and 24 fps
|
|
FrameMapper mapping(&r, Framerate(24, 1), PULLDOWN_CLASSIC);
|
|
MappedFrame frame3 = mapping.GetMappedFrame(3);
|
|
MappedFrame frame4 = mapping.GetMappedFrame(4);
|
|
MappedFrame frame5 = mapping.GetMappedFrame(5);
|
|
|
|
// Check for advanced pulldown (only 1 fake frame)
|
|
CHECK_EQUAL(4, frame3.Odd.Frame);
|
|
CHECK_EQUAL(3, frame3.Even.Frame);
|
|
CHECK_EQUAL(5, frame4.Odd.Frame);
|
|
CHECK_EQUAL(4, frame4.Even.Frame);
|
|
CHECK_EQUAL(6, frame5.Odd.Frame);
|
|
CHECK_EQUAL(6, frame5.Even.Frame);
|
|
}
|
|
|
|
TEST(FrameMapper_30_fps_to_24_fps_Pulldown_Advanced)
|
|
{
|
|
// Create a reader
|
|
DummyReader r(Framerate(30000, 1001), 720, 480, 22000, 2, 5.0);
|
|
|
|
// Create mapping between 29.97 fps and 24 fps
|
|
FrameMapper mapping(&r, Framerate(24, 1), PULLDOWN_ADVANCED);
|
|
MappedFrame frame2 = mapping.GetMappedFrame(2);
|
|
MappedFrame frame3 = mapping.GetMappedFrame(3);
|
|
MappedFrame frame4 = mapping.GetMappedFrame(4);
|
|
|
|
// Check for advanced pulldown (only 1 fake frame)
|
|
CHECK_EQUAL(2, frame2.Odd.Frame);
|
|
CHECK_EQUAL(2, frame2.Even.Frame);
|
|
CHECK_EQUAL(4, frame3.Odd.Frame);
|
|
CHECK_EQUAL(4, frame3.Even.Frame);
|
|
CHECK_EQUAL(5, frame4.Odd.Frame);
|
|
CHECK_EQUAL(5, frame4.Even.Frame);
|
|
}
|
|
|
|
TEST(FrameMapper_30_fps_to_24_fps_Pulldown_None)
|
|
{
|
|
// Create a reader
|
|
DummyReader r(Framerate(30000, 1001), 720, 480, 22000, 2, 5.0);
|
|
|
|
// Create mapping between 29.97 fps and 24 fps
|
|
FrameMapper mapping(&r, Framerate(24, 1), PULLDOWN_NONE);
|
|
MappedFrame frame4 = mapping.GetMappedFrame(4);
|
|
MappedFrame frame5 = mapping.GetMappedFrame(5);
|
|
|
|
// Check for advanced pulldown (only 1 fake frame)
|
|
CHECK_EQUAL(4, frame4.Odd.Frame);
|
|
CHECK_EQUAL(4, frame4.Even.Frame);
|
|
CHECK_EQUAL(6, frame5.Odd.Frame);
|
|
CHECK_EQUAL(6, frame5.Even.Frame);
|
|
}
|
|
|
|
TEST(FrameMapper_MapTime)
|
|
{
|
|
// Create a reader
|
|
DummyReader r(Framerate(24, 1), 720, 480, 22000, 2, 5.0);
|
|
|
|
// Create mapping 24 fps and 24 fps
|
|
FrameMapper mapping(&r, Framerate(24, 1), PULLDOWN_NONE);
|
|
|
|
// Create a Keyframe to re-map time (forward, reverse, and then forward again)
|
|
Keyframe kf;
|
|
kf.AddPoint(openshot::Point(Coordinate(1, 1), LINEAR));
|
|
kf.AddPoint(openshot::Point(Coordinate(40, 40), LINEAR));
|
|
kf.AddPoint(openshot::Point(Coordinate(60, 20), LINEAR));
|
|
kf.AddPoint(openshot::Point(Coordinate(100, 100), LINEAR));
|
|
|
|
// Re-map time
|
|
mapping.MapTime(kf);
|
|
|
|
// Check for OutOfBoundsFrames
|
|
CHECK_THROW(mapping.GetMappedFrame(0), OutOfBoundsFrame);
|
|
CHECK_THROW(mapping.GetMappedFrame(101), OutOfBoundsFrame);
|
|
|
|
// Check to see if time remapping worked correctly
|
|
// CHECK_EQUAL(1, mapping.GetMappedFrame(1).Odd.Frame);
|
|
// CHECK_EQUAL(2, mapping.GetMappedFrame(2).Odd.Frame);
|
|
// CHECK_EQUAL(39, mapping.GetMappedFrame(39).Odd.Frame);
|
|
// CHECK_EQUAL(40, mapping.GetMappedFrame(40).Odd.Frame);
|
|
// CHECK_EQUAL(39, mapping.GetMappedFrame(41).Odd.Frame);
|
|
// CHECK_EQUAL(38, mapping.GetMappedFrame(42).Odd.Frame);
|
|
// CHECK_EQUAL(21, mapping.GetMappedFrame(59).Odd.Frame);
|
|
// CHECK_EQUAL(20, mapping.GetMappedFrame(60).Odd.Frame);
|
|
// CHECK_EQUAL(22, mapping.GetMappedFrame(61).Odd.Frame);
|
|
// CHECK_EQUAL(24, mapping.GetMappedFrame(62).Odd.Frame);
|
|
// CHECK_EQUAL(90, mapping.GetMappedFrame(95).Odd.Frame);
|
|
// CHECK_EQUAL(100, mapping.GetMappedFrame(100).Odd.Frame);
|
|
|
|
}
|