*/
/** @file src/format.h
- * @brief Class to describe a format (aspect ratio) that a Film should
+ * @brief Classes to describe a format (aspect ratio) that a Film should
* be shown in.
*/
#include <vector>
#include "util.h"
-/** @class Format
- * @brief Class to describe a format (aspect ratio) that a Film should
- * be shown in.
- */
+class Film;
+
class Format
{
public:
- Format (int, Size, std::string, std::string);
+ Format (libdcp::Size dcp, std::string id, std::string n, std::string d)
+ : _dcp_size (dcp)
+ , _id (id)
+ , _nickname (n)
+ , _dci_name (d)
+ {}
/** @return the aspect ratio multiplied by 100
* (e.g. 239 for Cinemascope 2.39:1)
*/
- int ratio_as_integer () const {
- return _ratio;
- }
+ virtual int ratio_as_integer (boost::shared_ptr<const Film> f) const = 0;
/** @return the ratio as a floating point number */
- float ratio_as_float () const {
- return _ratio / 100.0;
- }
+ virtual float ratio_as_float (boost::shared_ptr<const Film> f) const = 0;
+
+ /** @return the ratio of the container (including any padding) as a floating point number */
+ float container_ratio_as_float () const;
+
+ int dcp_padding (boost::shared_ptr<const Film> f) const;
/** @return size in pixels of the images that we should
* put in a DCP for this ratio. This size will not correspond
* to the ratio when we are doing things like 16:9 in a Flat frame.
*/
- Size dcp_size () const {
+ libdcp::Size dcp_size () const {
return _dcp_size;
}
}
/** @return Full name to present to the user */
- std::string name () const;
+ virtual std::string name () const = 0;
/** @return Nickname (e.g. Flat, Scope) */
std::string nickname () const {
return _nickname;
}
- std::string as_metadata () const;
+ std::string dci_name () const {
+ return _dci_name;
+ }
- int dcp_padding () const;
+ std::string as_metadata () const;
- static Format const * from_ratio (int);
static Format const * from_nickname (std::string n);
static Format const * from_metadata (std::string m);
- static Format const * from_index (int i);
static Format const * from_id (std::string i);
- static int as_index (Format const * f);
static std::vector<Format const *> all ();
static void setup_formats ();
-
-private:
- /** Ratio expressed as the actual ratio multiplied by 100 */
- int _ratio;
- /** Size in pixels of the images that we should
+protected:
+ /** libdcp::Size in pixels of the images that we should
* put in a DCP for this ratio. This size will not correspond
* to the ratio when we are doing things like 16:9 in a Flat frame.
*/
- Size _dcp_size;
+ libdcp::Size _dcp_size;
/** id for use in metadata */
std::string _id;
/** nickname (e.g. Flat, Scope) */
std::string _nickname;
+ std::string _dci_name;
+private:
/** all available formats */
static std::vector<Format const *> _formats;
};
+/** @class FixedFormat
+ * @brief Class to describe a format whose ratio is fixed regardless
+ * of source size.
+ */
+class FixedFormat : public Format
+{
+public:
+ FixedFormat (int, libdcp::Size, std::string, std::string, std::string);
+
+ int ratio_as_integer (boost::shared_ptr<const Film>) const {
+ return _ratio;
+ }
+
+ float ratio_as_float (boost::shared_ptr<const Film>) const {
+ return _ratio / 100.0;
+ }
+
+ std::string name () const;
+private:
+
+ /** Ratio expressed as the actual ratio multiplied by 100 */
+ int _ratio;
+};
+
+class VariableFormat : public Format
+{
+public:
+ VariableFormat (libdcp::Size, std::string, std::string, std::string);
+
+ int ratio_as_integer (boost::shared_ptr<const Film> f) const;
+ float ratio_as_float (boost::shared_ptr<const Film> f) const;
+
+ std::string name () const;
+};