]> git.sesse.net Git - casparcg/blob - core/video_format.h
2.1.0: Some mayor refactoring.
[casparcg] / core / video_format.h
1 /*\r
2 * Copyright (c) 2011 Sveriges Television AB <info@casparcg.com>\r
3 *\r
4 * This file is part of CasparCG (www.casparcg.com).\r
5 *\r
6 * CasparCG is free software: you can redistribute it and/or modify\r
7 * it under the terms of the GNU General Public License as published by\r
8 * the Free Software Foundation, either version 3 of the License, or\r
9 * (at your option) any later version.\r
10 *\r
11 * CasparCG is distributed in the hope that it will be useful,\r
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
14 * GNU General Public License for more details.\r
15 *\r
16 * You should have received a copy of the GNU General Public License\r
17 * along with CasparCG. If not, see <http://www.gnu.org/licenses/>.\r
18 *\r
19 * Author: Robert Nagy, ronag89@gmail.com\r
20 */\r
21 \r
22 #pragma once\r
23 \r
24 #include <common/enum_class.h>\r
25 \r
26 #include <vector>\r
27 #include <string>\r
28 \r
29 namespace caspar { namespace core {\r
30         \r
31 CASPAR_BEGIN_ENUM_CLASS\r
32 {\r
33         pal,            \r
34         ntsc,           \r
35         x576p2500,      \r
36         x720p2500,      \r
37         x720p5000,      \r
38         x720p5994,      \r
39         x720p6000,      \r
40         x1080p2397,     \r
41         x1080p2400,     \r
42         x1080i5000,     \r
43         x1080i5994,     \r
44         x1080i6000,     \r
45         x1080p2500,     \r
46         x1080p2997,     \r
47         x1080p3000,     \r
48         x1080p5000,     \r
49         invalid,\r
50         count\r
51 }\r
52 CASPAR_END_ENUM_CLASS(video_format);\r
53 \r
54 CASPAR_BEGIN_ENUM_CLASS\r
55 {\r
56         empty           = 0,\r
57         lower           = 1,\r
58         upper           = 2,\r
59         progressive = 3, // NOTE: progressive == lower | upper;\r
60 }\r
61 CASPAR_END_ENUM_CLASS(field_mode);\r
62 \r
63 struct video_format_desc sealed\r
64 {\r
65         video_format            format;         // video output format\r
66 \r
67         int                                     width;          // output frame width\r
68         int                                     height;         // output frame height\r
69         int                                     square_width;\r
70         int                                     square_height;\r
71         field_mode                      field_mode;     // progressive, interlaced upper field first, interlaced lower field first\r
72         double                          fps;            // actual framerate, e.g. i50 = 25 fps, p50 = 50 fps\r
73         int                                     time_scale;\r
74         int                                     duration;\r
75         int                                     field_count;\r
76         int                                     size;           // output frame size in bytes \r
77         std::wstring            name;           // name of output format\r
78 \r
79         int                                     audio_sample_rate;\r
80         int                                     audio_channels;\r
81         std::vector<int>        audio_cadence;\r
82 \r
83         video_format_desc(video_format format,\r
84                                           int width,\r
85                                           int height,\r
86                                           int square_width,\r
87                                           int square_height,\r
88                                           core::field_mode field_mode,\r
89                                           int time_scale,\r
90                                           int duration,\r
91                                           const std::wstring& name,\r
92                                           const std::vector<int>& audio_cadence);\r
93 \r
94         video_format_desc& operator=(const video_format_desc& other);\r
95         \r
96         video_format_desc(video_format format = video_format::invalid);\r
97         video_format_desc(const std::wstring& name);\r
98 };\r
99 \r
100 bool operator==(const video_format_desc& rhs, const video_format_desc& lhs);\r
101 bool operator!=(const video_format_desc& rhs, const video_format_desc& lhs);\r
102 \r
103 std::wostream& operator<<(std::wostream& out, const video_format_desc& format_desc);\r
104 \r
105 }}