X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fvideo_filter_graph.cc;h=6075500e9d9148f5af103e9f56f6034dbdc3ab58;hb=561eed2dc9978e890a020b6435ceb0333bb69a61;hp=b6b3c2668095c444d77c74fd6ae9b4d59ac9a777;hpb=5a5324ed3a381a86dfe0a6e3932c1d58fdcd596f;p=dcpomatic.git diff --git a/src/lib/video_filter_graph.cc b/src/lib/video_filter_graph.cc index b6b3c2668..6075500e9 100644 --- a/src/lib/video_filter_graph.cc +++ b/src/lib/video_filter_graph.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2012-2015 Carl Hetherington + Copyright (C) 2012-2018 Carl Hetherington This file is part of DCP-o-matic. @@ -25,7 +25,6 @@ extern "C" { #include #include } -#include #include "i18n.h" @@ -35,11 +34,11 @@ using std::vector; using std::string; using std::make_pair; using boost::shared_ptr; -using boost::make_shared; -VideoFilterGraph::VideoFilterGraph (dcp::Size s, AVPixelFormat p) +VideoFilterGraph::VideoFilterGraph (dcp::Size s, AVPixelFormat p, dcp::Fraction r) : _size (s) , _pixel_format (p) + , _frame_rate (r) { } @@ -53,7 +52,7 @@ VideoFilterGraph::process (AVFrame* frame) list, int64_t> > images; if (_copy) { - images.push_back (make_pair (make_shared (frame), av_frame_get_best_effort_timestamp (frame))); + images.push_back (make_pair (shared_ptr (new Image (frame)), av_frame_get_best_effort_timestamp (frame))); } else { int r = av_buffersrc_write_frame (_buffer_src_context, frame); if (r < 0) { @@ -65,7 +64,7 @@ VideoFilterGraph::process (AVFrame* frame) break; } - images.push_back (make_pair (make_shared (_frame), av_frame_get_best_effort_timestamp (_frame))); + images.push_back (make_pair (shared_ptr (new Image (_frame)), av_frame_get_best_effort_timestamp (_frame))); av_frame_unref (_frame); } } @@ -86,14 +85,15 @@ VideoFilterGraph::can_process (dcp::Size s, AVPixelFormat p) const string VideoFilterGraph::src_parameters () const { - SafeStringStream a; - - a << "video_size=" << _size.width << "x" << _size.height << ":" - << "pix_fmt=" << _pixel_format << ":" - << "time_base=1/1:" - << "pixel_aspect=1/1"; - - return a.str (); + char buffer[256]; + snprintf ( + buffer, sizeof(buffer), + "video_size=%dx%d:pix_fmt=%d:frame_rate=%d/%d:time_base=1/1:pixel_aspect=1/1", + _size.width, _size.height, + _pixel_format, + _frame_rate.numerator, _frame_rate.denominator + ); + return buffer; } void * @@ -101,7 +101,6 @@ VideoFilterGraph::sink_parameters () const { AVBufferSinkParams* sink_params = av_buffersink_params_alloc (); AVPixelFormat* pixel_fmts = new AVPixelFormat[2]; - pixel_fmts = new AVPixelFormat[2]; pixel_fmts[0] = _pixel_format; pixel_fmts[1] = AV_PIX_FMT_NONE; sink_params->pixel_fmts = pixel_fmts;