1 // Copyright 2018 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "third_party/blink/renderer/platform/webrtc/webrtc_video_utils.h"
6 
7 namespace blink {
8 
WebRtcToMediaVideoRotation(webrtc::VideoRotation rotation)9 media::VideoRotation WebRtcToMediaVideoRotation(
10     webrtc::VideoRotation rotation) {
11   switch (rotation) {
12     case webrtc::kVideoRotation_0:
13       return media::VIDEO_ROTATION_0;
14     case webrtc::kVideoRotation_90:
15       return media::VIDEO_ROTATION_90;
16     case webrtc::kVideoRotation_180:
17       return media::VIDEO_ROTATION_180;
18     case webrtc::kVideoRotation_270:
19       return media::VIDEO_ROTATION_270;
20   }
21   return media::VIDEO_ROTATION_0;
22 }
23 
WebRtcToMediaVideoColorSpace(const webrtc::ColorSpace & color_space)24 media::VideoColorSpace WebRtcToMediaVideoColorSpace(
25     const webrtc::ColorSpace& color_space) {
26   media::VideoColorSpace::PrimaryID primaries =
27       media::VideoColorSpace::PrimaryID::INVALID;
28   switch (color_space.primaries()) {
29     case webrtc::ColorSpace::PrimaryID::kBT709:
30       primaries = media::VideoColorSpace::PrimaryID::BT709;
31       break;
32     case webrtc::ColorSpace::PrimaryID::kBT470M:
33       primaries = media::VideoColorSpace::PrimaryID::BT470M;
34       break;
35     case webrtc::ColorSpace::PrimaryID::kBT470BG:
36       primaries = media::VideoColorSpace::PrimaryID::BT470BG;
37       break;
38     case webrtc::ColorSpace::PrimaryID::kSMPTE170M:
39       primaries = media::VideoColorSpace::PrimaryID::SMPTE170M;
40       break;
41     case webrtc::ColorSpace::PrimaryID::kSMPTE240M:
42       primaries = media::VideoColorSpace::PrimaryID::SMPTE240M;
43       break;
44     case webrtc::ColorSpace::PrimaryID::kFILM:
45       primaries = media::VideoColorSpace::PrimaryID::FILM;
46       break;
47     case webrtc::ColorSpace::PrimaryID::kBT2020:
48       primaries = media::VideoColorSpace::PrimaryID::BT2020;
49       break;
50     case webrtc::ColorSpace::PrimaryID::kSMPTEST428:
51       primaries = media::VideoColorSpace::PrimaryID::SMPTEST428_1;
52       break;
53     case webrtc::ColorSpace::PrimaryID::kSMPTEST431:
54       primaries = media::VideoColorSpace::PrimaryID::SMPTEST431_2;
55       break;
56     case webrtc::ColorSpace::PrimaryID::kSMPTEST432:
57       primaries = media::VideoColorSpace::PrimaryID::SMPTEST432_1;
58       break;
59     case webrtc::ColorSpace::PrimaryID::kJEDECP22:
60       primaries = media::VideoColorSpace::PrimaryID::EBU_3213_E;
61       break;
62     default:
63       break;
64   }
65 
66   media::VideoColorSpace::TransferID transfer =
67       media::VideoColorSpace::TransferID::INVALID;
68   switch (color_space.transfer()) {
69     case webrtc::ColorSpace::TransferID::kBT709:
70       transfer = media::VideoColorSpace::TransferID::BT709;
71       break;
72     case webrtc::ColorSpace::TransferID::kGAMMA22:
73       transfer = media::VideoColorSpace::TransferID::GAMMA22;
74       break;
75     case webrtc::ColorSpace::TransferID::kGAMMA28:
76       transfer = media::VideoColorSpace::TransferID::GAMMA28;
77       break;
78     case webrtc::ColorSpace::TransferID::kSMPTE170M:
79       transfer = media::VideoColorSpace::TransferID::SMPTE170M;
80       break;
81     case webrtc::ColorSpace::TransferID::kSMPTE240M:
82       transfer = media::VideoColorSpace::TransferID::SMPTE240M;
83       break;
84     case webrtc::ColorSpace::TransferID::kLINEAR:
85       transfer = media::VideoColorSpace::TransferID::LINEAR;
86       break;
87     case webrtc::ColorSpace::TransferID::kLOG:
88       transfer = media::VideoColorSpace::TransferID::LOG;
89       break;
90     case webrtc::ColorSpace::TransferID::kLOG_SQRT:
91       transfer = media::VideoColorSpace::TransferID::LOG_SQRT;
92       break;
93     case webrtc::ColorSpace::TransferID::kIEC61966_2_4:
94       transfer = media::VideoColorSpace::TransferID::IEC61966_2_4;
95       break;
96     case webrtc::ColorSpace::TransferID::kBT1361_ECG:
97       transfer = media::VideoColorSpace::TransferID::BT1361_ECG;
98       break;
99     case webrtc::ColorSpace::TransferID::kIEC61966_2_1:
100       transfer = media::VideoColorSpace::TransferID::IEC61966_2_1;
101       break;
102     case webrtc::ColorSpace::TransferID::kBT2020_10:
103       transfer = media::VideoColorSpace::TransferID::BT2020_10;
104       break;
105     case webrtc::ColorSpace::TransferID::kBT2020_12:
106       transfer = media::VideoColorSpace::TransferID::BT2020_12;
107       break;
108     case webrtc::ColorSpace::TransferID::kSMPTEST2084:
109       transfer = media::VideoColorSpace::TransferID::SMPTEST2084;
110       break;
111     case webrtc::ColorSpace::TransferID::kSMPTEST428:
112       transfer = media::VideoColorSpace::TransferID::SMPTEST428_1;
113       break;
114     case webrtc::ColorSpace::TransferID::kARIB_STD_B67:
115       transfer = media::VideoColorSpace::TransferID::ARIB_STD_B67;
116       break;
117     default:
118       break;
119   }
120 
121   media::VideoColorSpace::MatrixID matrix =
122       media::VideoColorSpace::MatrixID::INVALID;
123   switch (color_space.matrix()) {
124     case webrtc::ColorSpace::MatrixID::kRGB:
125       matrix = media::VideoColorSpace::MatrixID::RGB;
126       break;
127     case webrtc::ColorSpace::MatrixID::kBT709:
128       matrix = media::VideoColorSpace::MatrixID::BT709;
129       break;
130     case webrtc::ColorSpace::MatrixID::kFCC:
131       matrix = media::VideoColorSpace::MatrixID::FCC;
132       break;
133     case webrtc::ColorSpace::MatrixID::kBT470BG:
134       matrix = media::VideoColorSpace::MatrixID::BT470BG;
135       break;
136     case webrtc::ColorSpace::MatrixID::kSMPTE170M:
137       matrix = media::VideoColorSpace::MatrixID::SMPTE170M;
138       break;
139     case webrtc::ColorSpace::MatrixID::kSMPTE240M:
140       matrix = media::VideoColorSpace::MatrixID::SMPTE240M;
141       break;
142     case webrtc::ColorSpace::MatrixID::kYCOCG:
143       matrix = media::VideoColorSpace::MatrixID::YCOCG;
144       break;
145     case webrtc::ColorSpace::MatrixID::kBT2020_NCL:
146       matrix = media::VideoColorSpace::MatrixID::BT2020_NCL;
147       break;
148     case webrtc::ColorSpace::MatrixID::kBT2020_CL:
149       matrix = media::VideoColorSpace::MatrixID::BT2020_CL;
150       break;
151     case webrtc::ColorSpace::MatrixID::kSMPTE2085:
152       matrix = media::VideoColorSpace::MatrixID::YDZDX;
153       break;
154     default:
155       break;
156   }
157 
158   gfx::ColorSpace::RangeID range = gfx::ColorSpace::RangeID::INVALID;
159   switch (color_space.range()) {
160     case webrtc::ColorSpace::RangeID::kLimited:
161       range = gfx::ColorSpace::RangeID::LIMITED;
162       break;
163     case webrtc::ColorSpace::RangeID::kFull:
164       range = gfx::ColorSpace::RangeID::FULL;
165       break;
166     default:
167       break;
168   }
169 
170   return media::VideoColorSpace(primaries, transfer, matrix, range);
171 }
172 
173 }  // namespace blink
174