projects
/
dcpomatic.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Hacks.
[dcpomatic.git]
/
src
/
lib
/
video_content.cc
diff --git
a/src/lib/video_content.cc
b/src/lib/video_content.cc
index e077730483988725fd0fb116c1119210bc38357f..3818fa7920fb4b86d6cbf990858a192473428a1b 100644
(file)
--- a/
src/lib/video_content.cc
+++ b/
src/lib/video_content.cc
@@
-17,41
+17,49
@@
*/
*/
+#include <iomanip>
#include <libcxml/cxml.h>
#include "video_content.h"
#include <libcxml/cxml.h>
#include "video_content.h"
-#include "video_decoder.h"
+#include "video_examiner.h"
+#include "ratio.h"
+#include "compose.hpp"
#include "i18n.h"
#include "i18n.h"
-int const VideoContentProperty::VIDEO_
LENGTH
= 0;
-int const VideoContentProperty::VIDEO_
SIZ
E = 1;
-int const VideoContentProperty::VIDEO_
FRAME_RATE
= 2;
-int const VideoContentProperty::VIDEO_
CROP
= 3;
+int const VideoContentProperty::VIDEO_
SIZE
= 0;
+int const VideoContentProperty::VIDEO_
FRAME_RAT
E = 1;
+int const VideoContentProperty::VIDEO_
CROP
= 2;
+int const VideoContentProperty::VIDEO_
RATIO
= 3;
using std::string;
using std::stringstream;
using std::setprecision;
using boost::shared_ptr;
using boost::lexical_cast;
using std::string;
using std::stringstream;
using std::setprecision;
using boost::shared_ptr;
using boost::lexical_cast;
+using boost::optional;
-VideoContent::VideoContent (
Time s, ContentVideo
Frame len)
- : Content (s)
+VideoContent::VideoContent (
shared_ptr<const Film> f, Time s, VideoContent::
Frame len)
+ : Content (
f,
s)
, _video_length (len)
, _video_length (len)
+ , _video_frame_rate (0)
+ , _ratio (Ratio::from_id ("185"))
{
}
{
}
-VideoContent::VideoContent (
boost::filesystem::path f
)
- : Content (f)
+VideoContent::VideoContent (
shared_ptr<const Film> f, boost::filesystem::path p
)
+ : Content (f
, p
)
, _video_length (0)
, _video_length (0)
+ , _video_frame_rate (0)
+ , _ratio (Ratio::from_id ("185"))
{
}
{
}
-VideoContent::VideoContent (shared_ptr<const cxml::Node> node)
- : Content (node)
+VideoContent::VideoContent (shared_ptr<const
Film> f, shared_ptr<const
cxml::Node> node)
+ : Content (
f,
node)
{
{
- _video_length = node->number_child<
ContentVideo
Frame> ("VideoLength");
+ _video_length = node->number_child<
VideoContent::
Frame> ("VideoLength");
_video_size.width = node->number_child<int> ("VideoWidth");
_video_size.height = node->number_child<int> ("VideoHeight");
_video_frame_rate = node->number_child<float> ("VideoFrameRate");
_video_size.width = node->number_child<int> ("VideoWidth");
_video_size.height = node->number_child<int> ("VideoHeight");
_video_frame_rate = node->number_child<float> ("VideoFrameRate");
@@
-59,6
+67,10
@@
VideoContent::VideoContent (shared_ptr<const cxml::Node> node)
_crop.right = node->number_child<int> ("RightCrop");
_crop.top = node->number_child<int> ("TopCrop");
_crop.bottom = node->number_child<int> ("BottomCrop");
_crop.right = node->number_child<int> ("RightCrop");
_crop.top = node->number_child<int> ("TopCrop");
_crop.bottom = node->number_child<int> ("BottomCrop");
+ optional<string> r = node->optional_string_child ("Ratio");
+ if (r) {
+ _ratio = Ratio::from_id (r.get ());
+ }
}
VideoContent::VideoContent (VideoContent const & o)
}
VideoContent::VideoContent (VideoContent const & o)
@@
-66,6
+78,7
@@
VideoContent::VideoContent (VideoContent const & o)
, _video_length (o._video_length)
, _video_size (o._video_size)
, _video_frame_rate (o._video_frame_rate)
, _video_length (o._video_length)
, _video_size (o._video_size)
, _video_frame_rate (o._video_frame_rate)
+ , _ratio (o._ratio)
{
}
{
}
@@
-82,12
+95,15
@@
VideoContent::as_xml (xmlpp::Node* node) const
node->add_child("RightCrop")->add_child_text (boost::lexical_cast<string> (_crop.right));
node->add_child("TopCrop")->add_child_text (boost::lexical_cast<string> (_crop.top));
node->add_child("BottomCrop")->add_child_text (boost::lexical_cast<string> (_crop.bottom));
node->add_child("RightCrop")->add_child_text (boost::lexical_cast<string> (_crop.right));
node->add_child("TopCrop")->add_child_text (boost::lexical_cast<string> (_crop.top));
node->add_child("BottomCrop")->add_child_text (boost::lexical_cast<string> (_crop.bottom));
+ if (_ratio) {
+ node->add_child("Ratio")->add_child_text (_ratio->id ());
+ }
}
void
}
void
-VideoContent::take_from_video_
decoder (shared_ptr<VideoDecod
er> d)
+VideoContent::take_from_video_
examiner (shared_ptr<VideoExamin
er> d)
{
{
- /* These
decod
er calls could call other content methods which take a lock on the mutex */
+ /* These
examin
er calls could call other content methods which take a lock on the mutex */
libdcp::Size const vs = d->video_size ();
float const vfr = d->video_frame_rate ();
libdcp::Size const vs = d->video_size ();
float const vfr = d->video_frame_rate ();
@@
-192,3
+208,17
@@
VideoContent::set_bottom_crop (int c)
signal_changed (VideoContentProperty::VIDEO_CROP);
}
signal_changed (VideoContentProperty::VIDEO_CROP);
}
+void
+VideoContent::set_ratio (Ratio const * r)
+{
+ {
+ boost::mutex::scoped_lock lm (_mutex);
+ if (_ratio == r) {
+ return;
+ }
+
+ _ratio = r;
+ }
+
+ signal_changed (VideoContentProperty::VIDEO_RATIO);
+}