]> git.sesse.net Git - casparcg/blob - core/video_format.h
Add video modes 2160p5000, 2160p5994 and 2160p6000
[casparcg] / core / video_format.h
1 /*
2 * Copyright (c) 2011 Sveriges Television AB <info@casparcg.com>
3 *
4 * This file is part of CasparCG (www.casparcg.com).
5 *
6 * CasparCG is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
10 *
11 * CasparCG is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with CasparCG. If not, see <http://www.gnu.org/licenses/>.
18 *
19 * Author: Robert Nagy, ronag89@gmail.com
20 */
21
22 #pragma once
23
24 #include <vector>
25 #include <string>
26 #include <cstddef>
27
28 #include <common/enum_class.h>
29
30 namespace caspar { namespace core {
31         
32 enum class video_format
33
34         pal,            
35         ntsc,           
36         x576p2500,      
37         x720p2500,      
38         x720p5000,
39         x720p2398,
40         x720p2400,
41         x720p2997,
42         x720p5994,
43         x720p3000,
44         x720p6000,
45         x1080p2398,
46         x1080p2400,     
47         x1080i5000,     
48         x1080i5994,     
49         x1080i6000,     
50         x1080p2500,     
51         x1080p2997,     
52         x1080p3000,     
53         x1080p5000,
54         x1080p5994,
55         x1080p6000,
56         x1556p2398,
57         x1556p2400,
58         x1556p2500,
59         dci1080p2398,
60         dci1080p2400,
61         dci1080p2500,
62         x2160p2398,
63         x2160p2400,
64         x2160p2500,
65         x2160p2997,
66         x2160p3000,
67         x2160p5000,
68         x2160p5994,
69         x2160p6000,
70         dci2160p2398,
71         dci2160p2400,
72         dci2160p2500,
73         invalid,
74         count
75 };
76
77 enum class field_mode
78 {
79         empty           = 0,
80         lower           = 1,
81         upper           = 2,
82         progressive = 3 // NOTE: progressive == lower | upper;
83 };
84 ENUM_ENABLE_BITWISE(field_mode);
85 //static_assert((field_mode::lower | field_mode::upper) == field_mode::progressive, "");
86
87 struct video_format_desc final
88 {
89         video_format            format;         
90
91         int                                     width;          
92         int                                     height;         
93         int                                     square_width;
94         int                                     square_height;
95         core::field_mode        field_mode;     // progressive, interlaced upper field first, interlaced lower field first
96         double                          fps;            // actual framerate = duration/time_scale, e.g. i50 = 25 fps, p50 = 50 fps
97         int                                     time_scale;
98         int                                     duration;
99         int                                     field_count;
100         std::size_t                     size;           // frame size in bytes 
101         std::wstring            name;           // name of output format
102
103         int                                     audio_sample_rate;
104         std::vector<int>        audio_cadence;  // rotating optimal number of samples per frame
105
106         video_format_desc(video_format format,
107                                           int width,
108                                           int height,
109                                           int square_width,
110                                           int square_height,
111                                           core::field_mode field_mode,
112                                           int time_scale,
113                                           int duration,
114                                           const std::wstring& name,
115                                           const std::vector<int>& audio_cadence);
116                 
117         video_format_desc(video_format format = video_format::invalid);
118         video_format_desc(const std::wstring& name);
119 };
120
121 bool operator==(const video_format_desc& rhs, const video_format_desc& lhs);
122 bool operator!=(const video_format_desc& rhs, const video_format_desc& lhs);
123
124 std::wostream& operator<<(std::wostream& out, const video_format_desc& format_desc);
125
126 }}