int FFmpegFileEncoder::_video_stream_index = 0;
int FFmpegFileEncoder::_audio_stream_index = 1;
-static AVPixelFormat
-force_pixel_format (AVPixelFormat, AVPixelFormat out)
-{
- return out;
-}
-
FFmpegFileEncoder::FFmpegFileEncoder (
dcp::Size video_frame_size,
int video_frame_rate,
FFmpegFileEncoder::video (shared_ptr<PlayerVideo> video, DCPTime time)
{
shared_ptr<Image> image = video->image (
- bind (&force_pixel_format, _1, _pixel_format),
+ bind (&PlayerVideo::force, _1, _pixel_format),
true,
false
);
/** Create an image for this frame.
* @param pixel_format Function which is called to decide what pixel format the output image should be;
* it is passed the pixel format of the input image from the ImageProxy, and should return the desired
- * output pixel format. Two functions always_rgb and keep_xyz_or_rgb are provided for use here.
+ * output pixel format. Two functions force and keep_xyz_or_rgb are provided for use here.
* @param aligned true if the output image should be aligned to 32-byte boundaries.
* @param fast true to be fast at the expense of quality.
*/
}
AVPixelFormat
-PlayerVideo::always_rgb (AVPixelFormat)
+PlayerVideo::force (AVPixelFormat, AVPixelFormat force_to)
{
- return AV_PIX_FMT_RGB24;
+ return force_to;
}
AVPixelFormat
void prepare ();
boost::shared_ptr<Image> image (boost::function<AVPixelFormat (AVPixelFormat)> pixel_format, bool aligned, bool fast) const;
- static AVPixelFormat always_rgb (AVPixelFormat);
+ static AVPixelFormat force (AVPixelFormat, AVPixelFormat);
static AVPixelFormat keep_xyz_or_rgb (AVPixelFormat);
void add_metadata (xmlpp::Node* node) const;
* The content's specified colour conversion indicates the colourspace
* which the content is in (according to the user).
*
- * PlayerVideo::image (bound to PlayerVideo::always_rgb) will take the source
+ * PlayerVideo::image (bound to PlayerVideo::force) will take the source
* image and convert it (from whatever the user has said it is) to RGB.
*/
_frame = _player_video.first->image (
- bind (&PlayerVideo::always_rgb, _1),
+ bind (&PlayerVideo::force, _1, AV_PIX_FMT_RGB24),
false, true
);
}
/* assuming DCP is 24fps/48kHz */
butler->get_audio (audio_buffer, 2000);
- p.first->image(bind(&PlayerVideo::always_rgb, _1), false, true);
+ p.first->image(bind(&PlayerVideo::force, _1, AV_PIX_FMT_RGB24), false, true);
}
delete[] audio_buffer;
}
butler->seek (t, true);
pair<shared_ptr<PlayerVideo>, DCPTime> video = butler->get_video();
BOOST_CHECK_EQUAL(video.second.get(), t.get());
- write_image(video.first->image(PlayerVideo::always_rgb, false, true), String::compose("build/test/player_seek_test_%1.png", i), "RGB");
+ write_image(video.first->image(bind(PlayerVideo::force, _1, AV_PIX_FMT_RGB24), false, true), String::compose("build/test/player_seek_test_%1.png", i), "RGB");
/* This 0.011 is empirically chosen (hopefully) to accept changes in rendering between the reference and a test machine
(17.10 and 16.04 seem to anti-alias a little differently) but to reject gross errors e.g. missing fonts or missing
text altogether.
butler->seek (t, true);
pair<shared_ptr<PlayerVideo>, DCPTime> video = butler->get_video();
BOOST_CHECK_EQUAL(video.second.get(), t.get());
- write_image(video.first->image(PlayerVideo::always_rgb, false, true), String::compose("build/test/player_seek_test2_%1.png", i), "RGB");
+ write_image(video.first->image(bind(PlayerVideo::force, _1, AV_PIX_FMT_RGB24), false, true), String::compose("build/test/player_seek_test2_%1.png", i), "RGB");
check_image(String::compose("test/data/player_seek_test2_%1.png", i), String::compose("build/test/player_seek_test2_%1.png", i), 0.011);
}
}