xref: /aosp_15_r20/external/v4l2_codec2/common/Common.cpp (revision 0ec5a0ec62797f775085659156625e7f1bdb369f)
1*0ec5a0ecSAndroid Build Coastguard Worker // Copyright 2021 The Chromium Authors. All rights reserved.
2*0ec5a0ecSAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*0ec5a0ecSAndroid Build Coastguard Worker // found in the LICENSE file.
4*0ec5a0ecSAndroid Build Coastguard Worker 
5*0ec5a0ecSAndroid Build Coastguard Worker #include <v4l2_codec2/common/Common.h>
6*0ec5a0ecSAndroid Build Coastguard Worker 
7*0ec5a0ecSAndroid Build Coastguard Worker #include <base/numerics/safe_math.h>
8*0ec5a0ecSAndroid Build Coastguard Worker 
9*0ec5a0ecSAndroid Build Coastguard Worker namespace android {
10*0ec5a0ecSAndroid Build Coastguard Worker 
contains(const Rect & rect1,const Rect & rect2)11*0ec5a0ecSAndroid Build Coastguard Worker bool contains(const Rect& rect1, const Rect& rect2) {
12*0ec5a0ecSAndroid Build Coastguard Worker     return (rect2.left >= rect1.left && rect2.right <= rect1.right && rect2.top >= rect1.top &&
13*0ec5a0ecSAndroid Build Coastguard Worker             rect2.bottom <= rect1.bottom);
14*0ec5a0ecSAndroid Build Coastguard Worker }
15*0ec5a0ecSAndroid Build Coastguard Worker 
toString(const Rect & rect)16*0ec5a0ecSAndroid Build Coastguard Worker std::string toString(const Rect& rect) {
17*0ec5a0ecSAndroid Build Coastguard Worker     return std::string("(") + std::to_string(rect.left) + "," + std::to_string(rect.top) + ") " +
18*0ec5a0ecSAndroid Build Coastguard Worker            std::to_string(rect.width()) + "x" + std::to_string(rect.height());
19*0ec5a0ecSAndroid Build Coastguard Worker }
20*0ec5a0ecSAndroid Build Coastguard Worker 
getArea(const ui::Size & size)21*0ec5a0ecSAndroid Build Coastguard Worker std::optional<int> getArea(const ui::Size& size) {
22*0ec5a0ecSAndroid Build Coastguard Worker     base::CheckedNumeric<int> checked_area = size.width;
23*0ec5a0ecSAndroid Build Coastguard Worker     checked_area *= size.height;
24*0ec5a0ecSAndroid Build Coastguard Worker     return checked_area.IsValid() ? std::optional<int>(checked_area.ValueOrDie()) : std::nullopt;
25*0ec5a0ecSAndroid Build Coastguard Worker }
26*0ec5a0ecSAndroid Build Coastguard Worker 
isEmpty(const ui::Size & size)27*0ec5a0ecSAndroid Build Coastguard Worker bool isEmpty(const ui::Size& size) {
28*0ec5a0ecSAndroid Build Coastguard Worker     return !size.width || !size.height;
29*0ec5a0ecSAndroid Build Coastguard Worker }
30*0ec5a0ecSAndroid Build Coastguard Worker 
toString(const ui::Size & size)31*0ec5a0ecSAndroid Build Coastguard Worker std::string toString(const ui::Size& size) {
32*0ec5a0ecSAndroid Build Coastguard Worker     return std::to_string(size.width) + "x" + std::to_string(size.height);
33*0ec5a0ecSAndroid Build Coastguard Worker }
34*0ec5a0ecSAndroid Build Coastguard Worker 
35*0ec5a0ecSAndroid Build Coastguard Worker // Check whether the specified profile is a valid profile for the specified codec.
isValidProfileForCodec(VideoCodec codec,C2Config::profile_t profile)36*0ec5a0ecSAndroid Build Coastguard Worker bool isValidProfileForCodec(VideoCodec codec, C2Config::profile_t profile) {
37*0ec5a0ecSAndroid Build Coastguard Worker     switch (codec) {
38*0ec5a0ecSAndroid Build Coastguard Worker     case VideoCodec::H264:
39*0ec5a0ecSAndroid Build Coastguard Worker         return ((profile >= C2Config::PROFILE_AVC_BASELINE) &&
40*0ec5a0ecSAndroid Build Coastguard Worker                 (profile <= C2Config::PROFILE_AVC_ENHANCED_MULTIVIEW_DEPTH_HIGH));
41*0ec5a0ecSAndroid Build Coastguard Worker     case VideoCodec::VP8:
42*0ec5a0ecSAndroid Build Coastguard Worker         return ((profile >= C2Config::PROFILE_VP8_0) && (profile <= C2Config::PROFILE_VP8_3));
43*0ec5a0ecSAndroid Build Coastguard Worker     case VideoCodec::VP9:
44*0ec5a0ecSAndroid Build Coastguard Worker         return ((profile >= C2Config::PROFILE_VP9_0) && (profile <= C2Config::PROFILE_VP9_3));
45*0ec5a0ecSAndroid Build Coastguard Worker     case VideoCodec::HEVC:
46*0ec5a0ecSAndroid Build Coastguard Worker         return ((profile >= C2Config::PROFILE_HEVC_MAIN) &&
47*0ec5a0ecSAndroid Build Coastguard Worker                 (profile <= C2Config::PROFILE_HEVC_3D_MAIN));
48*0ec5a0ecSAndroid Build Coastguard Worker     default:
49*0ec5a0ecSAndroid Build Coastguard Worker         return false;
50*0ec5a0ecSAndroid Build Coastguard Worker     }
51*0ec5a0ecSAndroid Build Coastguard Worker }
52*0ec5a0ecSAndroid Build Coastguard Worker 
53*0ec5a0ecSAndroid Build Coastguard Worker }  // namespace android
54