/*
Copyright (C) 2013-2016 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/>.
*/
#include "i18n.h"
-#define LOG_GENERAL(...) film->log()->log (String::compose (__VA_ARGS__), LogEntry::TYPE_GENERAL);
+#define LOG_GENERAL(...) _parent->film()->log()->log (String::compose (__VA_ARGS__), LogEntry::TYPE_GENERAL);
int const VideoContentProperty::SIZE = 0;
int const VideoContentProperty::FRAME_TYPE = 1;
using boost::optional;
using boost::dynamic_pointer_cast;
-VideoContent::VideoContent (Content* parent, shared_ptr<const Film> film)
- : ContentPart (parent, film)
+VideoContent::VideoContent (Content* parent)
+ : ContentPart (parent)
, _length (0)
, _frame_type (VIDEO_FRAME_TYPE_2D)
, _scale (VideoContentScale (Ratio::from_id ("178")))
}
-VideoContent::VideoContent (Content* parent, shared_ptr<const Film> film, cxml::ConstNodePtr node, int version)
- : ContentPart (parent, film)
+shared_ptr<VideoContent>
+VideoContent::from_xml (Content* parent, cxml::ConstNodePtr node, int version)
+{
+ if (!node->optional_number_child<int> ("VideoWidth")) {
+ return shared_ptr<VideoContent> ();
+ }
+
+ return shared_ptr<VideoContent> (new VideoContent (parent, node, version));
+}
+
+VideoContent::VideoContent (Content* parent, cxml::ConstNodePtr node, int version)
+ : ContentPart (parent)
{
_size.width = node->number_child<int> ("VideoWidth");
_size.height = node->number_child<int> ("VideoHeight");
}
}
-VideoContent::VideoContent (Content* parent, shared_ptr<const Film> film, vector<shared_ptr<Content> > c)
- : ContentPart (parent, film)
+VideoContent::VideoContent (Content* parent, vector<shared_ptr<Content> > c)
+ : ContentPart (parent)
, _length (0)
, _yuv (false)
{
);
}
- shared_ptr<const Film> film = _film.lock ();
- DCPOMATIC_ASSERT (film);
LOG_GENERAL ("Video length obtained from header as %1 frames", _length);
if (d->video_frame_rate()) {
void
VideoContent::scale_and_crop_to_fit_width ()
{
- shared_ptr<const Film> film = _film.lock ();
- DCPOMATIC_ASSERT (film);
+ shared_ptr<const Film> film = _parent->film ();
set_scale (VideoContentScale (film->container ()));
int const crop = max (0, int (size().height - double (film->frame_size().height) * size().width / film->frame_size().width));
void
VideoContent::scale_and_crop_to_fit_height ()
{
- shared_ptr<const Film> film = _film.lock ();
- DCPOMATIC_ASSERT (film);
+ shared_ptr<const Film> film = _parent->film ();
set_scale (VideoContentScale (film->container ()));
int const crop = max (0, int (size().width - double (film->frame_size().width) * size().height / film->frame_size().height));
{
DCPOMATIC_ASSERT (f >= 0);
- shared_ptr<const Film> film = _film.lock ();
- DCPOMATIC_ASSERT (film);
+ shared_ptr<const Film> film = _parent->film ();
double const vfr = _parent->active_video_frame_rate ();
d << " (" << fixed << setprecision(2) << cropped.ratio () << ":1)\n";
}
- shared_ptr<const Film> film = _film.lock ();
- DCPOMATIC_ASSERT (film);
+ shared_ptr<const Film> film = _parent->film ();
dcp::Size const container_size = film->frame_size ();
dcp::Size const scaled = scale().size (shared_from_this(), container_size, container_size);