1*ec779b8eSAndroid Build Coastguard Worker /*
2*ec779b8eSAndroid Build Coastguard Worker * Copyright (C) 2024 The Android Open Source Project
3*ec779b8eSAndroid Build Coastguard Worker *
4*ec779b8eSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
5*ec779b8eSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
6*ec779b8eSAndroid Build Coastguard Worker * You may obtain a copy of the License at
7*ec779b8eSAndroid Build Coastguard Worker *
8*ec779b8eSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
9*ec779b8eSAndroid Build Coastguard Worker *
10*ec779b8eSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
11*ec779b8eSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
12*ec779b8eSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*ec779b8eSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
14*ec779b8eSAndroid Build Coastguard Worker * limitations under the License.
15*ec779b8eSAndroid Build Coastguard Worker */
16*ec779b8eSAndroid Build Coastguard Worker
17*ec779b8eSAndroid Build Coastguard Worker //#define LOG_NDEBUG 0
18*ec779b8eSAndroid Build Coastguard Worker #define LOG_TAG "NdkMediaCodecInfo"
19*ec779b8eSAndroid Build Coastguard Worker
20*ec779b8eSAndroid Build Coastguard Worker #include "NdkMediaCodecInfoPriv.h"
21*ec779b8eSAndroid Build Coastguard Worker
22*ec779b8eSAndroid Build Coastguard Worker #include <media/NdkMediaFormatPriv.h>
23*ec779b8eSAndroid Build Coastguard Worker
24*ec779b8eSAndroid Build Coastguard Worker using namespace android;
25*ec779b8eSAndroid Build Coastguard Worker
26*ec779b8eSAndroid Build Coastguard Worker extern "C" {
27*ec779b8eSAndroid Build Coastguard Worker
28*ec779b8eSAndroid Build Coastguard Worker // Utils
29*ec779b8eSAndroid Build Coastguard Worker
30*ec779b8eSAndroid Build Coastguard Worker EXPORT
AIntRange_delete(AIntRange * range)31*ec779b8eSAndroid Build Coastguard Worker void AIntRange_delete(AIntRange *range) {
32*ec779b8eSAndroid Build Coastguard Worker free(range);
33*ec779b8eSAndroid Build Coastguard Worker }
34*ec779b8eSAndroid Build Coastguard Worker
35*ec779b8eSAndroid Build Coastguard Worker EXPORT
ADoubleRange_delete(ADoubleRange * range)36*ec779b8eSAndroid Build Coastguard Worker void ADoubleRange_delete(ADoubleRange *range) {
37*ec779b8eSAndroid Build Coastguard Worker free(range);
38*ec779b8eSAndroid Build Coastguard Worker }
39*ec779b8eSAndroid Build Coastguard Worker
40*ec779b8eSAndroid Build Coastguard Worker // AMediaCodecInfo
41*ec779b8eSAndroid Build Coastguard Worker
42*ec779b8eSAndroid Build Coastguard Worker EXPORT
AMediaCodecInfo_getCanonicalName(const AMediaCodecInfo * info)43*ec779b8eSAndroid Build Coastguard Worker const char* AMediaCodecInfo_getCanonicalName(const AMediaCodecInfo *info) {
44*ec779b8eSAndroid Build Coastguard Worker if (info == nullptr || info->mInfo == nullptr) {
45*ec779b8eSAndroid Build Coastguard Worker return nullptr;
46*ec779b8eSAndroid Build Coastguard Worker }
47*ec779b8eSAndroid Build Coastguard Worker
48*ec779b8eSAndroid Build Coastguard Worker return info->mInfo->getCodecName();
49*ec779b8eSAndroid Build Coastguard Worker }
50*ec779b8eSAndroid Build Coastguard Worker
51*ec779b8eSAndroid Build Coastguard Worker EXPORT
AMediaCodecInfo_isEncoder(const AMediaCodecInfo * info)52*ec779b8eSAndroid Build Coastguard Worker bool AMediaCodecInfo_isEncoder(const AMediaCodecInfo *info) {
53*ec779b8eSAndroid Build Coastguard Worker return info->mInfo->isEncoder();
54*ec779b8eSAndroid Build Coastguard Worker }
55*ec779b8eSAndroid Build Coastguard Worker
56*ec779b8eSAndroid Build Coastguard Worker EXPORT
AMediaCodecInfo_isVendor(const AMediaCodecInfo * info)57*ec779b8eSAndroid Build Coastguard Worker bool AMediaCodecInfo_isVendor(const AMediaCodecInfo *info) {
58*ec779b8eSAndroid Build Coastguard Worker int32_t attributes = info->mInfo->getAttributes();
59*ec779b8eSAndroid Build Coastguard Worker return (attributes & android::MediaCodecInfo::kFlagIsVendor);
60*ec779b8eSAndroid Build Coastguard Worker }
61*ec779b8eSAndroid Build Coastguard Worker
62*ec779b8eSAndroid Build Coastguard Worker EXPORT
AMediaCodecInfo_getMediaCodecInfoType(const AMediaCodecInfo * info)63*ec779b8eSAndroid Build Coastguard Worker AMediaCodecType AMediaCodecInfo_getMediaCodecInfoType(const AMediaCodecInfo *info) {
64*ec779b8eSAndroid Build Coastguard Worker if (info == nullptr || info->mInfo == nullptr) {
65*ec779b8eSAndroid Build Coastguard Worker return (AMediaCodecType)0;
66*ec779b8eSAndroid Build Coastguard Worker }
67*ec779b8eSAndroid Build Coastguard Worker
68*ec779b8eSAndroid Build Coastguard Worker int32_t attributes = info->mInfo->getAttributes();
69*ec779b8eSAndroid Build Coastguard Worker
70*ec779b8eSAndroid Build Coastguard Worker if (attributes & android::MediaCodecInfo::kFlagIsSoftwareOnly) {
71*ec779b8eSAndroid Build Coastguard Worker return SOFTWARE_ONLY;
72*ec779b8eSAndroid Build Coastguard Worker }
73*ec779b8eSAndroid Build Coastguard Worker if (attributes & android::MediaCodecInfo::kFlagIsHardwareAccelerated) {
74*ec779b8eSAndroid Build Coastguard Worker return HARDWARE_ACCELERATED;
75*ec779b8eSAndroid Build Coastguard Worker }
76*ec779b8eSAndroid Build Coastguard Worker return SOFTWARE_WITH_DEVICE_ACCESS;
77*ec779b8eSAndroid Build Coastguard Worker }
78*ec779b8eSAndroid Build Coastguard Worker
79*ec779b8eSAndroid Build Coastguard Worker EXPORT
AMediaCodecInfo_getMediaType(const AMediaCodecInfo * info)80*ec779b8eSAndroid Build Coastguard Worker const char* AMediaCodecInfo_getMediaType(const AMediaCodecInfo *info) {
81*ec779b8eSAndroid Build Coastguard Worker if (info == nullptr || info->mInfo == nullptr) {
82*ec779b8eSAndroid Build Coastguard Worker return nullptr;
83*ec779b8eSAndroid Build Coastguard Worker }
84*ec779b8eSAndroid Build Coastguard Worker
85*ec779b8eSAndroid Build Coastguard Worker return info->mMediaType.c_str();
86*ec779b8eSAndroid Build Coastguard Worker }
87*ec779b8eSAndroid Build Coastguard Worker
88*ec779b8eSAndroid Build Coastguard Worker EXPORT
AMediaCodecInfo_getMaxSupportedInstances(const AMediaCodecInfo * info)89*ec779b8eSAndroid Build Coastguard Worker int32_t AMediaCodecInfo_getMaxSupportedInstances(const AMediaCodecInfo *info) {
90*ec779b8eSAndroid Build Coastguard Worker if (info == nullptr) {
91*ec779b8eSAndroid Build Coastguard Worker return -1;
92*ec779b8eSAndroid Build Coastguard Worker }
93*ec779b8eSAndroid Build Coastguard Worker
94*ec779b8eSAndroid Build Coastguard Worker return info->mCodecCaps->getMaxSupportedInstances();
95*ec779b8eSAndroid Build Coastguard Worker }
96*ec779b8eSAndroid Build Coastguard Worker
97*ec779b8eSAndroid Build Coastguard Worker EXPORT
AMediaCodecInfo_isFeatureSupported(const AMediaCodecInfo * info,const char * featureName)98*ec779b8eSAndroid Build Coastguard Worker int32_t AMediaCodecInfo_isFeatureSupported(const AMediaCodecInfo *info, const char *featureName) {
99*ec779b8eSAndroid Build Coastguard Worker if (featureName == nullptr) {
100*ec779b8eSAndroid Build Coastguard Worker return -1;
101*ec779b8eSAndroid Build Coastguard Worker }
102*ec779b8eSAndroid Build Coastguard Worker return info->mCodecCaps->isFeatureSupported(std::string(featureName));
103*ec779b8eSAndroid Build Coastguard Worker }
104*ec779b8eSAndroid Build Coastguard Worker
105*ec779b8eSAndroid Build Coastguard Worker EXPORT
AMediaCodecInfo_isFeatureRequired(const AMediaCodecInfo * info,const char * featureName)106*ec779b8eSAndroid Build Coastguard Worker int32_t AMediaCodecInfo_isFeatureRequired(const AMediaCodecInfo *info, const char *featureName) {
107*ec779b8eSAndroid Build Coastguard Worker if (featureName == nullptr) {
108*ec779b8eSAndroid Build Coastguard Worker return -1;
109*ec779b8eSAndroid Build Coastguard Worker }
110*ec779b8eSAndroid Build Coastguard Worker return info->mCodecCaps->isFeatureRequired(std::string(featureName));
111*ec779b8eSAndroid Build Coastguard Worker }
112*ec779b8eSAndroid Build Coastguard Worker
113*ec779b8eSAndroid Build Coastguard Worker EXPORT
AMediaCodecInfo_isFormatSupported(const AMediaCodecInfo * info,const AMediaFormat * format)114*ec779b8eSAndroid Build Coastguard Worker int32_t AMediaCodecInfo_isFormatSupported(const AMediaCodecInfo *info, const AMediaFormat *format) {
115*ec779b8eSAndroid Build Coastguard Worker if (format == nullptr) {
116*ec779b8eSAndroid Build Coastguard Worker return -1;
117*ec779b8eSAndroid Build Coastguard Worker }
118*ec779b8eSAndroid Build Coastguard Worker
119*ec779b8eSAndroid Build Coastguard Worker sp<AMessage> nativeFormat;
120*ec779b8eSAndroid Build Coastguard Worker AMediaFormat_getFormat(format, &nativeFormat);
121*ec779b8eSAndroid Build Coastguard Worker
122*ec779b8eSAndroid Build Coastguard Worker return info->mCodecCaps->isFormatSupported(nativeFormat);
123*ec779b8eSAndroid Build Coastguard Worker }
124*ec779b8eSAndroid Build Coastguard Worker
125*ec779b8eSAndroid Build Coastguard Worker EXPORT
AMediaCodecInfo_getAudioCapabilities(const AMediaCodecInfo * info,const ACodecAudioCapabilities ** outAudioCaps)126*ec779b8eSAndroid Build Coastguard Worker media_status_t AMediaCodecInfo_getAudioCapabilities(const AMediaCodecInfo *info,
127*ec779b8eSAndroid Build Coastguard Worker const ACodecAudioCapabilities **outAudioCaps) {
128*ec779b8eSAndroid Build Coastguard Worker if (info == nullptr || info->mInfo == nullptr) {
129*ec779b8eSAndroid Build Coastguard Worker return AMEDIA_ERROR_INVALID_PARAMETER;
130*ec779b8eSAndroid Build Coastguard Worker }
131*ec779b8eSAndroid Build Coastguard Worker
132*ec779b8eSAndroid Build Coastguard Worker *outAudioCaps = info->mAAudioCaps.get();
133*ec779b8eSAndroid Build Coastguard Worker
134*ec779b8eSAndroid Build Coastguard Worker if ((*outAudioCaps) == nullptr) {
135*ec779b8eSAndroid Build Coastguard Worker return AMEDIA_ERROR_UNSUPPORTED;
136*ec779b8eSAndroid Build Coastguard Worker }
137*ec779b8eSAndroid Build Coastguard Worker
138*ec779b8eSAndroid Build Coastguard Worker return AMEDIA_OK;
139*ec779b8eSAndroid Build Coastguard Worker }
140*ec779b8eSAndroid Build Coastguard Worker
141*ec779b8eSAndroid Build Coastguard Worker EXPORT
AMediaCodecInfo_getVideoCapabilities(const AMediaCodecInfo * info,const ACodecVideoCapabilities ** outVideoCaps)142*ec779b8eSAndroid Build Coastguard Worker media_status_t AMediaCodecInfo_getVideoCapabilities(const AMediaCodecInfo *info,
143*ec779b8eSAndroid Build Coastguard Worker const ACodecVideoCapabilities **outVideoCaps) {
144*ec779b8eSAndroid Build Coastguard Worker if (info == nullptr || info->mInfo == nullptr) {
145*ec779b8eSAndroid Build Coastguard Worker return AMEDIA_ERROR_INVALID_PARAMETER;
146*ec779b8eSAndroid Build Coastguard Worker }
147*ec779b8eSAndroid Build Coastguard Worker
148*ec779b8eSAndroid Build Coastguard Worker *outVideoCaps = info->mAVideoCaps.get();
149*ec779b8eSAndroid Build Coastguard Worker
150*ec779b8eSAndroid Build Coastguard Worker if ((*outVideoCaps) == nullptr) {
151*ec779b8eSAndroid Build Coastguard Worker return AMEDIA_ERROR_UNSUPPORTED;
152*ec779b8eSAndroid Build Coastguard Worker }
153*ec779b8eSAndroid Build Coastguard Worker
154*ec779b8eSAndroid Build Coastguard Worker return AMEDIA_OK;
155*ec779b8eSAndroid Build Coastguard Worker }
156*ec779b8eSAndroid Build Coastguard Worker
157*ec779b8eSAndroid Build Coastguard Worker EXPORT
AMediaCodecInfo_getEncoderCapabilities(const AMediaCodecInfo * info,const ACodecEncoderCapabilities ** outEncoderCaps)158*ec779b8eSAndroid Build Coastguard Worker media_status_t AMediaCodecInfo_getEncoderCapabilities(const AMediaCodecInfo *info,
159*ec779b8eSAndroid Build Coastguard Worker const ACodecEncoderCapabilities **outEncoderCaps) {
160*ec779b8eSAndroid Build Coastguard Worker if (info == nullptr || info->mInfo == nullptr) {
161*ec779b8eSAndroid Build Coastguard Worker return AMEDIA_ERROR_INVALID_PARAMETER;
162*ec779b8eSAndroid Build Coastguard Worker }
163*ec779b8eSAndroid Build Coastguard Worker
164*ec779b8eSAndroid Build Coastguard Worker *outEncoderCaps = info->mAEncoderCaps.get();
165*ec779b8eSAndroid Build Coastguard Worker
166*ec779b8eSAndroid Build Coastguard Worker if ((*outEncoderCaps) == nullptr) {
167*ec779b8eSAndroid Build Coastguard Worker return AMEDIA_ERROR_UNSUPPORTED;
168*ec779b8eSAndroid Build Coastguard Worker }
169*ec779b8eSAndroid Build Coastguard Worker
170*ec779b8eSAndroid Build Coastguard Worker return AMEDIA_OK;
171*ec779b8eSAndroid Build Coastguard Worker }
172*ec779b8eSAndroid Build Coastguard Worker
173*ec779b8eSAndroid Build Coastguard Worker // ACodecAudioCapabilities
174*ec779b8eSAndroid Build Coastguard Worker
175*ec779b8eSAndroid Build Coastguard Worker EXPORT
ACodecAudioCapabilities_getBitrateRange(const ACodecAudioCapabilities * audioCaps,AIntRange * outRange)176*ec779b8eSAndroid Build Coastguard Worker media_status_t ACodecAudioCapabilities_getBitrateRange(const ACodecAudioCapabilities *audioCaps,
177*ec779b8eSAndroid Build Coastguard Worker AIntRange *outRange) {
178*ec779b8eSAndroid Build Coastguard Worker if (audioCaps == nullptr || outRange == nullptr) {
179*ec779b8eSAndroid Build Coastguard Worker return AMEDIA_ERROR_INVALID_PARAMETER;
180*ec779b8eSAndroid Build Coastguard Worker }
181*ec779b8eSAndroid Build Coastguard Worker
182*ec779b8eSAndroid Build Coastguard Worker const Range<int32_t>& bitrateRange = audioCaps->mAudioCaps->getBitrateRange();
183*ec779b8eSAndroid Build Coastguard Worker outRange->mLower = bitrateRange.lower();
184*ec779b8eSAndroid Build Coastguard Worker outRange->mUpper = bitrateRange.upper();
185*ec779b8eSAndroid Build Coastguard Worker
186*ec779b8eSAndroid Build Coastguard Worker return AMEDIA_OK;
187*ec779b8eSAndroid Build Coastguard Worker }
188*ec779b8eSAndroid Build Coastguard Worker
189*ec779b8eSAndroid Build Coastguard Worker EXPORT
ACodecAudioCapabilities_getSupportedSampleRates(const ACodecAudioCapabilities * audioCaps,const int ** outArrayPtr,size_t * outCount)190*ec779b8eSAndroid Build Coastguard Worker media_status_t ACodecAudioCapabilities_getSupportedSampleRates(
191*ec779b8eSAndroid Build Coastguard Worker const ACodecAudioCapabilities *audioCaps, const int **outArrayPtr, size_t *outCount) {
192*ec779b8eSAndroid Build Coastguard Worker if (audioCaps == nullptr || outArrayPtr == nullptr || outCount == nullptr) {
193*ec779b8eSAndroid Build Coastguard Worker return AMEDIA_ERROR_INVALID_PARAMETER;
194*ec779b8eSAndroid Build Coastguard Worker }
195*ec779b8eSAndroid Build Coastguard Worker
196*ec779b8eSAndroid Build Coastguard Worker if (audioCaps->mSampleRates.empty()) {
197*ec779b8eSAndroid Build Coastguard Worker return AMEDIA_ERROR_UNSUPPORTED;
198*ec779b8eSAndroid Build Coastguard Worker }
199*ec779b8eSAndroid Build Coastguard Worker
200*ec779b8eSAndroid Build Coastguard Worker *outArrayPtr = audioCaps->mSampleRates.data();
201*ec779b8eSAndroid Build Coastguard Worker *outCount = audioCaps->mSampleRates.size();
202*ec779b8eSAndroid Build Coastguard Worker
203*ec779b8eSAndroid Build Coastguard Worker return AMEDIA_OK;
204*ec779b8eSAndroid Build Coastguard Worker }
205*ec779b8eSAndroid Build Coastguard Worker
206*ec779b8eSAndroid Build Coastguard Worker EXPORT
ACodecAudioCapabilities_getSupportedSampleRateRanges(const ACodecAudioCapabilities * audioCaps,const AIntRange ** outArrayPtr,size_t * outCount)207*ec779b8eSAndroid Build Coastguard Worker media_status_t ACodecAudioCapabilities_getSupportedSampleRateRanges(
208*ec779b8eSAndroid Build Coastguard Worker const ACodecAudioCapabilities *audioCaps, const AIntRange **outArrayPtr, size_t *outCount) {
209*ec779b8eSAndroid Build Coastguard Worker if (audioCaps == nullptr || outArrayPtr == nullptr || outCount == nullptr) {
210*ec779b8eSAndroid Build Coastguard Worker return AMEDIA_ERROR_INVALID_PARAMETER;
211*ec779b8eSAndroid Build Coastguard Worker }
212*ec779b8eSAndroid Build Coastguard Worker
213*ec779b8eSAndroid Build Coastguard Worker *outArrayPtr = audioCaps->mSampleRateRanges.data();
214*ec779b8eSAndroid Build Coastguard Worker *outCount = audioCaps->mSampleRateRanges.size();
215*ec779b8eSAndroid Build Coastguard Worker
216*ec779b8eSAndroid Build Coastguard Worker return AMEDIA_OK;
217*ec779b8eSAndroid Build Coastguard Worker }
218*ec779b8eSAndroid Build Coastguard Worker
219*ec779b8eSAndroid Build Coastguard Worker EXPORT
ACodecAudioCapabilities_getMaxInputChannelCount(const ACodecAudioCapabilities * audioCaps)220*ec779b8eSAndroid Build Coastguard Worker int32_t ACodecAudioCapabilities_getMaxInputChannelCount(const ACodecAudioCapabilities *audioCaps) {
221*ec779b8eSAndroid Build Coastguard Worker if (audioCaps == nullptr) {
222*ec779b8eSAndroid Build Coastguard Worker return -1;
223*ec779b8eSAndroid Build Coastguard Worker }
224*ec779b8eSAndroid Build Coastguard Worker return audioCaps->mAudioCaps->getMaxInputChannelCount();
225*ec779b8eSAndroid Build Coastguard Worker }
226*ec779b8eSAndroid Build Coastguard Worker
227*ec779b8eSAndroid Build Coastguard Worker EXPORT
ACodecAudioCapabilities_getMinInputChannelCount(const ACodecAudioCapabilities * audioCaps)228*ec779b8eSAndroid Build Coastguard Worker int32_t ACodecAudioCapabilities_getMinInputChannelCount(const ACodecAudioCapabilities *audioCaps) {
229*ec779b8eSAndroid Build Coastguard Worker if (audioCaps == nullptr) {
230*ec779b8eSAndroid Build Coastguard Worker return -1;
231*ec779b8eSAndroid Build Coastguard Worker }
232*ec779b8eSAndroid Build Coastguard Worker return audioCaps->mAudioCaps->getMinInputChannelCount();
233*ec779b8eSAndroid Build Coastguard Worker }
234*ec779b8eSAndroid Build Coastguard Worker
235*ec779b8eSAndroid Build Coastguard Worker EXPORT
ACodecAudioCapabilities_getInputChannelCountRanges(const ACodecAudioCapabilities * audioCaps,const AIntRange ** outArrayPtr,size_t * outCount)236*ec779b8eSAndroid Build Coastguard Worker media_status_t ACodecAudioCapabilities_getInputChannelCountRanges(
237*ec779b8eSAndroid Build Coastguard Worker const ACodecAudioCapabilities *audioCaps, const AIntRange **outArrayPtr, size_t *outCount) {
238*ec779b8eSAndroid Build Coastguard Worker if (audioCaps == nullptr || outArrayPtr == nullptr || outCount == nullptr) {
239*ec779b8eSAndroid Build Coastguard Worker return AMEDIA_ERROR_INVALID_PARAMETER;
240*ec779b8eSAndroid Build Coastguard Worker }
241*ec779b8eSAndroid Build Coastguard Worker
242*ec779b8eSAndroid Build Coastguard Worker *outArrayPtr = audioCaps->mInputChannelCountRanges.data();
243*ec779b8eSAndroid Build Coastguard Worker *outCount = audioCaps->mInputChannelCountRanges.size();
244*ec779b8eSAndroid Build Coastguard Worker
245*ec779b8eSAndroid Build Coastguard Worker return AMEDIA_OK;
246*ec779b8eSAndroid Build Coastguard Worker }
247*ec779b8eSAndroid Build Coastguard Worker
248*ec779b8eSAndroid Build Coastguard Worker EXPORT
ACodecAudioCapabilities_isSampleRateSupported(const ACodecAudioCapabilities * audioCaps,int32_t sampleRate)249*ec779b8eSAndroid Build Coastguard Worker int32_t ACodecAudioCapabilities_isSampleRateSupported(const ACodecAudioCapabilities *audioCaps,
250*ec779b8eSAndroid Build Coastguard Worker int32_t sampleRate) {
251*ec779b8eSAndroid Build Coastguard Worker if (audioCaps == nullptr) {
252*ec779b8eSAndroid Build Coastguard Worker return -1;
253*ec779b8eSAndroid Build Coastguard Worker }
254*ec779b8eSAndroid Build Coastguard Worker return audioCaps->mAudioCaps->isSampleRateSupported(sampleRate);
255*ec779b8eSAndroid Build Coastguard Worker }
256*ec779b8eSAndroid Build Coastguard Worker
257*ec779b8eSAndroid Build Coastguard Worker // ACodecPerformancePoint
258*ec779b8eSAndroid Build Coastguard Worker
259*ec779b8eSAndroid Build Coastguard Worker EXPORT
ACodecPerformancePoint_create(int32_t width,int32_t height,int32_t frameRate)260*ec779b8eSAndroid Build Coastguard Worker ACodecPerformancePoint* ACodecPerformancePoint_create(int32_t width, int32_t height,
261*ec779b8eSAndroid Build Coastguard Worker int32_t frameRate) {
262*ec779b8eSAndroid Build Coastguard Worker return new ACodecPerformancePoint(
263*ec779b8eSAndroid Build Coastguard Worker std::make_shared<VideoCapabilities::PerformancePoint>(width, height, frameRate));
264*ec779b8eSAndroid Build Coastguard Worker }
265*ec779b8eSAndroid Build Coastguard Worker
266*ec779b8eSAndroid Build Coastguard Worker EXPORT
ACodecPerformancePoint_delete(ACodecPerformancePoint * performancePoint)267*ec779b8eSAndroid Build Coastguard Worker media_status_t ACodecPerformancePoint_delete(ACodecPerformancePoint *performancePoint) {
268*ec779b8eSAndroid Build Coastguard Worker if (performancePoint == nullptr) {
269*ec779b8eSAndroid Build Coastguard Worker return AMEDIA_ERROR_INVALID_PARAMETER;
270*ec779b8eSAndroid Build Coastguard Worker }
271*ec779b8eSAndroid Build Coastguard Worker
272*ec779b8eSAndroid Build Coastguard Worker delete performancePoint;
273*ec779b8eSAndroid Build Coastguard Worker
274*ec779b8eSAndroid Build Coastguard Worker return AMEDIA_OK;
275*ec779b8eSAndroid Build Coastguard Worker }
276*ec779b8eSAndroid Build Coastguard Worker
277*ec779b8eSAndroid Build Coastguard Worker EXPORT
ACodecPerformancePoint_coversFormat(const ACodecPerformancePoint * performancePoint,const AMediaFormat * format)278*ec779b8eSAndroid Build Coastguard Worker bool ACodecPerformancePoint_coversFormat(const ACodecPerformancePoint *performancePoint,
279*ec779b8eSAndroid Build Coastguard Worker const AMediaFormat *format) {
280*ec779b8eSAndroid Build Coastguard Worker sp<AMessage> nativeFormat;
281*ec779b8eSAndroid Build Coastguard Worker AMediaFormat_getFormat(format, &nativeFormat);
282*ec779b8eSAndroid Build Coastguard Worker
283*ec779b8eSAndroid Build Coastguard Worker return performancePoint->mPerformancePoint->covers(nativeFormat);
284*ec779b8eSAndroid Build Coastguard Worker }
285*ec779b8eSAndroid Build Coastguard Worker
286*ec779b8eSAndroid Build Coastguard Worker EXPORT
ACodecPerformancePoint_covers(const ACodecPerformancePoint * one,const ACodecPerformancePoint * another)287*ec779b8eSAndroid Build Coastguard Worker bool ACodecPerformancePoint_covers(const ACodecPerformancePoint *one,
288*ec779b8eSAndroid Build Coastguard Worker const ACodecPerformancePoint *another) {
289*ec779b8eSAndroid Build Coastguard Worker return one->mPerformancePoint->covers(*(another->mPerformancePoint));
290*ec779b8eSAndroid Build Coastguard Worker }
291*ec779b8eSAndroid Build Coastguard Worker
292*ec779b8eSAndroid Build Coastguard Worker EXPORT
ACodecPerformancePoint_equals(const ACodecPerformancePoint * one,const ACodecPerformancePoint * another)293*ec779b8eSAndroid Build Coastguard Worker bool ACodecPerformancePoint_equals(const ACodecPerformancePoint *one,
294*ec779b8eSAndroid Build Coastguard Worker const ACodecPerformancePoint *another) {
295*ec779b8eSAndroid Build Coastguard Worker return one->mPerformancePoint->equals(*(another->mPerformancePoint));
296*ec779b8eSAndroid Build Coastguard Worker }
297*ec779b8eSAndroid Build Coastguard Worker
298*ec779b8eSAndroid Build Coastguard Worker // ACodecVideoCapabilities
299*ec779b8eSAndroid Build Coastguard Worker
300*ec779b8eSAndroid Build Coastguard Worker EXPORT
ACodecVideoCapabilities_getBitrateRange(const ACodecVideoCapabilities * videoCaps,AIntRange * outRange)301*ec779b8eSAndroid Build Coastguard Worker media_status_t ACodecVideoCapabilities_getBitrateRange(const ACodecVideoCapabilities *videoCaps,
302*ec779b8eSAndroid Build Coastguard Worker AIntRange *outRange) {
303*ec779b8eSAndroid Build Coastguard Worker if (videoCaps == nullptr || outRange == nullptr) {
304*ec779b8eSAndroid Build Coastguard Worker return AMEDIA_ERROR_INVALID_PARAMETER;
305*ec779b8eSAndroid Build Coastguard Worker }
306*ec779b8eSAndroid Build Coastguard Worker
307*ec779b8eSAndroid Build Coastguard Worker const Range<int32_t>& bitrateRange = videoCaps->mVideoCaps->getBitrateRange();
308*ec779b8eSAndroid Build Coastguard Worker outRange->mLower = bitrateRange.lower();
309*ec779b8eSAndroid Build Coastguard Worker outRange->mUpper = bitrateRange.upper();
310*ec779b8eSAndroid Build Coastguard Worker
311*ec779b8eSAndroid Build Coastguard Worker return AMEDIA_OK;
312*ec779b8eSAndroid Build Coastguard Worker }
313*ec779b8eSAndroid Build Coastguard Worker
314*ec779b8eSAndroid Build Coastguard Worker EXPORT
ACodecVideoCapabilities_getSupportedWidths(const ACodecVideoCapabilities * videoCaps,AIntRange * outRange)315*ec779b8eSAndroid Build Coastguard Worker media_status_t ACodecVideoCapabilities_getSupportedWidths(const ACodecVideoCapabilities *videoCaps,
316*ec779b8eSAndroid Build Coastguard Worker AIntRange *outRange) {
317*ec779b8eSAndroid Build Coastguard Worker if (videoCaps == nullptr || outRange == nullptr) {
318*ec779b8eSAndroid Build Coastguard Worker return AMEDIA_ERROR_INVALID_PARAMETER;
319*ec779b8eSAndroid Build Coastguard Worker }
320*ec779b8eSAndroid Build Coastguard Worker
321*ec779b8eSAndroid Build Coastguard Worker const Range<int32_t>& supportedWidths = videoCaps->mVideoCaps->getSupportedWidths();
322*ec779b8eSAndroid Build Coastguard Worker outRange->mLower = supportedWidths.lower();
323*ec779b8eSAndroid Build Coastguard Worker outRange->mUpper = supportedWidths.upper();
324*ec779b8eSAndroid Build Coastguard Worker
325*ec779b8eSAndroid Build Coastguard Worker return AMEDIA_OK;
326*ec779b8eSAndroid Build Coastguard Worker }
327*ec779b8eSAndroid Build Coastguard Worker
328*ec779b8eSAndroid Build Coastguard Worker EXPORT
ACodecVideoCapabilities_getSupportedHeights(const ACodecVideoCapabilities * videoCaps,AIntRange * outRange)329*ec779b8eSAndroid Build Coastguard Worker media_status_t ACodecVideoCapabilities_getSupportedHeights(const ACodecVideoCapabilities *videoCaps,
330*ec779b8eSAndroid Build Coastguard Worker AIntRange *outRange) {
331*ec779b8eSAndroid Build Coastguard Worker if (videoCaps == nullptr || outRange == nullptr) {
332*ec779b8eSAndroid Build Coastguard Worker return AMEDIA_ERROR_INVALID_PARAMETER;
333*ec779b8eSAndroid Build Coastguard Worker }
334*ec779b8eSAndroid Build Coastguard Worker
335*ec779b8eSAndroid Build Coastguard Worker const Range<int32_t>& supportedHeights = videoCaps->mVideoCaps->getSupportedHeights();
336*ec779b8eSAndroid Build Coastguard Worker outRange->mLower = supportedHeights.lower();
337*ec779b8eSAndroid Build Coastguard Worker outRange->mUpper = supportedHeights.upper();
338*ec779b8eSAndroid Build Coastguard Worker
339*ec779b8eSAndroid Build Coastguard Worker return AMEDIA_OK;
340*ec779b8eSAndroid Build Coastguard Worker }
341*ec779b8eSAndroid Build Coastguard Worker
342*ec779b8eSAndroid Build Coastguard Worker EXPORT
ACodecVideoCapabilities_getWidthAlignment(const ACodecVideoCapabilities * videoCaps)343*ec779b8eSAndroid Build Coastguard Worker int32_t ACodecVideoCapabilities_getWidthAlignment(const ACodecVideoCapabilities *videoCaps) {
344*ec779b8eSAndroid Build Coastguard Worker if (videoCaps == nullptr) {
345*ec779b8eSAndroid Build Coastguard Worker return -1;
346*ec779b8eSAndroid Build Coastguard Worker }
347*ec779b8eSAndroid Build Coastguard Worker return videoCaps->mVideoCaps->getWidthAlignment();
348*ec779b8eSAndroid Build Coastguard Worker }
349*ec779b8eSAndroid Build Coastguard Worker
350*ec779b8eSAndroid Build Coastguard Worker EXPORT
ACodecVideoCapabilities_getHeightAlignment(const ACodecVideoCapabilities * videoCaps)351*ec779b8eSAndroid Build Coastguard Worker int32_t ACodecVideoCapabilities_getHeightAlignment(const ACodecVideoCapabilities *videoCaps) {
352*ec779b8eSAndroid Build Coastguard Worker if (videoCaps == nullptr) {
353*ec779b8eSAndroid Build Coastguard Worker return -1;
354*ec779b8eSAndroid Build Coastguard Worker }
355*ec779b8eSAndroid Build Coastguard Worker return videoCaps->mVideoCaps->getHeightAlignment();
356*ec779b8eSAndroid Build Coastguard Worker }
357*ec779b8eSAndroid Build Coastguard Worker
358*ec779b8eSAndroid Build Coastguard Worker EXPORT
ACodecVideoCapabilities_getSupportedFrameRates(const ACodecVideoCapabilities * videoCaps,AIntRange * outRange)359*ec779b8eSAndroid Build Coastguard Worker media_status_t ACodecVideoCapabilities_getSupportedFrameRates(
360*ec779b8eSAndroid Build Coastguard Worker const ACodecVideoCapabilities *videoCaps, AIntRange *outRange) {
361*ec779b8eSAndroid Build Coastguard Worker if (videoCaps == nullptr || outRange == nullptr) {
362*ec779b8eSAndroid Build Coastguard Worker return AMEDIA_ERROR_INVALID_PARAMETER;
363*ec779b8eSAndroid Build Coastguard Worker }
364*ec779b8eSAndroid Build Coastguard Worker
365*ec779b8eSAndroid Build Coastguard Worker const Range<int32_t>& frameRateRange = videoCaps->mVideoCaps->getSupportedFrameRates();
366*ec779b8eSAndroid Build Coastguard Worker outRange->mLower = frameRateRange.lower();
367*ec779b8eSAndroid Build Coastguard Worker outRange->mUpper = frameRateRange.upper();
368*ec779b8eSAndroid Build Coastguard Worker
369*ec779b8eSAndroid Build Coastguard Worker return AMEDIA_OK;
370*ec779b8eSAndroid Build Coastguard Worker }
371*ec779b8eSAndroid Build Coastguard Worker
372*ec779b8eSAndroid Build Coastguard Worker EXPORT
ACodecVideoCapabilities_getSupportedWidthsFor(const ACodecVideoCapabilities * videoCaps,int32_t height,AIntRange * outRange)373*ec779b8eSAndroid Build Coastguard Worker media_status_t ACodecVideoCapabilities_getSupportedWidthsFor(
374*ec779b8eSAndroid Build Coastguard Worker const ACodecVideoCapabilities *videoCaps, int32_t height, AIntRange *outRange) {
375*ec779b8eSAndroid Build Coastguard Worker if (videoCaps == nullptr || outRange == nullptr) {
376*ec779b8eSAndroid Build Coastguard Worker return AMEDIA_ERROR_INVALID_PARAMETER;
377*ec779b8eSAndroid Build Coastguard Worker }
378*ec779b8eSAndroid Build Coastguard Worker
379*ec779b8eSAndroid Build Coastguard Worker std::optional<Range<int32_t>> widthRange = videoCaps->mVideoCaps->getSupportedWidthsFor(height);
380*ec779b8eSAndroid Build Coastguard Worker if (!widthRange) {
381*ec779b8eSAndroid Build Coastguard Worker return AMEDIA_ERROR_UNSUPPORTED;
382*ec779b8eSAndroid Build Coastguard Worker }
383*ec779b8eSAndroid Build Coastguard Worker
384*ec779b8eSAndroid Build Coastguard Worker outRange->mLower = widthRange.value().lower();
385*ec779b8eSAndroid Build Coastguard Worker outRange->mUpper = widthRange.value().upper();
386*ec779b8eSAndroid Build Coastguard Worker
387*ec779b8eSAndroid Build Coastguard Worker return AMEDIA_OK;
388*ec779b8eSAndroid Build Coastguard Worker }
389*ec779b8eSAndroid Build Coastguard Worker
390*ec779b8eSAndroid Build Coastguard Worker EXPORT
ACodecVideoCapabilities_getSupportedHeightsFor(const ACodecVideoCapabilities * videoCaps,int32_t width,AIntRange * outRange)391*ec779b8eSAndroid Build Coastguard Worker media_status_t ACodecVideoCapabilities_getSupportedHeightsFor(
392*ec779b8eSAndroid Build Coastguard Worker const ACodecVideoCapabilities *videoCaps, int32_t width, AIntRange *outRange) {
393*ec779b8eSAndroid Build Coastguard Worker if (videoCaps == nullptr || outRange == nullptr) {
394*ec779b8eSAndroid Build Coastguard Worker return AMEDIA_ERROR_INVALID_PARAMETER;
395*ec779b8eSAndroid Build Coastguard Worker }
396*ec779b8eSAndroid Build Coastguard Worker
397*ec779b8eSAndroid Build Coastguard Worker std::optional<Range<int32_t>> heightRange
398*ec779b8eSAndroid Build Coastguard Worker = videoCaps->mVideoCaps->getSupportedHeightsFor(width);
399*ec779b8eSAndroid Build Coastguard Worker if (!heightRange) {
400*ec779b8eSAndroid Build Coastguard Worker return AMEDIA_ERROR_UNSUPPORTED;
401*ec779b8eSAndroid Build Coastguard Worker }
402*ec779b8eSAndroid Build Coastguard Worker
403*ec779b8eSAndroid Build Coastguard Worker outRange->mLower = heightRange.value().lower();
404*ec779b8eSAndroid Build Coastguard Worker outRange->mUpper = heightRange.value().upper();
405*ec779b8eSAndroid Build Coastguard Worker
406*ec779b8eSAndroid Build Coastguard Worker return AMEDIA_OK;
407*ec779b8eSAndroid Build Coastguard Worker }
408*ec779b8eSAndroid Build Coastguard Worker
409*ec779b8eSAndroid Build Coastguard Worker EXPORT
ACodecVideoCapabilities_getSupportedFrameRatesFor(const ACodecVideoCapabilities * videoCaps,int32_t width,int32_t height,ADoubleRange * outRange)410*ec779b8eSAndroid Build Coastguard Worker media_status_t ACodecVideoCapabilities_getSupportedFrameRatesFor(
411*ec779b8eSAndroid Build Coastguard Worker const ACodecVideoCapabilities *videoCaps, int32_t width, int32_t height,
412*ec779b8eSAndroid Build Coastguard Worker ADoubleRange *outRange) {
413*ec779b8eSAndroid Build Coastguard Worker if (videoCaps == nullptr || outRange == nullptr) {
414*ec779b8eSAndroid Build Coastguard Worker return AMEDIA_ERROR_INVALID_PARAMETER;
415*ec779b8eSAndroid Build Coastguard Worker }
416*ec779b8eSAndroid Build Coastguard Worker
417*ec779b8eSAndroid Build Coastguard Worker std::optional<Range<double>> frameRates
418*ec779b8eSAndroid Build Coastguard Worker = videoCaps->mVideoCaps->getSupportedFrameRatesFor(width, height);
419*ec779b8eSAndroid Build Coastguard Worker if (!frameRates) {
420*ec779b8eSAndroid Build Coastguard Worker return AMEDIA_ERROR_UNSUPPORTED;
421*ec779b8eSAndroid Build Coastguard Worker }
422*ec779b8eSAndroid Build Coastguard Worker
423*ec779b8eSAndroid Build Coastguard Worker outRange->mLower = frameRates.value().lower();
424*ec779b8eSAndroid Build Coastguard Worker outRange->mUpper = frameRates.value().upper();
425*ec779b8eSAndroid Build Coastguard Worker
426*ec779b8eSAndroid Build Coastguard Worker return AMEDIA_OK;
427*ec779b8eSAndroid Build Coastguard Worker }
428*ec779b8eSAndroid Build Coastguard Worker
429*ec779b8eSAndroid Build Coastguard Worker EXPORT
ACodecVideoCapabilities_getAchievableFrameRatesFor(const ACodecVideoCapabilities * videoCaps,int32_t width,int32_t height,ADoubleRange * outRange)430*ec779b8eSAndroid Build Coastguard Worker media_status_t ACodecVideoCapabilities_getAchievableFrameRatesFor(
431*ec779b8eSAndroid Build Coastguard Worker const ACodecVideoCapabilities *videoCaps, int32_t width, int32_t height,
432*ec779b8eSAndroid Build Coastguard Worker ADoubleRange *outRange) {
433*ec779b8eSAndroid Build Coastguard Worker if (videoCaps == nullptr || outRange == nullptr) {
434*ec779b8eSAndroid Build Coastguard Worker return AMEDIA_ERROR_INVALID_PARAMETER;
435*ec779b8eSAndroid Build Coastguard Worker }
436*ec779b8eSAndroid Build Coastguard Worker
437*ec779b8eSAndroid Build Coastguard Worker std::optional<Range<double>> frameRates
438*ec779b8eSAndroid Build Coastguard Worker = videoCaps->mVideoCaps->getAchievableFrameRatesFor(width, height);
439*ec779b8eSAndroid Build Coastguard Worker if (!frameRates) {
440*ec779b8eSAndroid Build Coastguard Worker return AMEDIA_ERROR_UNSUPPORTED;
441*ec779b8eSAndroid Build Coastguard Worker }
442*ec779b8eSAndroid Build Coastguard Worker
443*ec779b8eSAndroid Build Coastguard Worker outRange->mLower = frameRates.value().lower();
444*ec779b8eSAndroid Build Coastguard Worker outRange->mUpper = frameRates.value().upper();
445*ec779b8eSAndroid Build Coastguard Worker
446*ec779b8eSAndroid Build Coastguard Worker return AMEDIA_OK;
447*ec779b8eSAndroid Build Coastguard Worker }
448*ec779b8eSAndroid Build Coastguard Worker
449*ec779b8eSAndroid Build Coastguard Worker EXPORT
ACodecVideoCapabilities_getSupportedPerformancePoints(const ACodecVideoCapabilities * videoCaps,const ACodecPerformancePoint ** outPerformancePointArray,size_t * outCount)450*ec779b8eSAndroid Build Coastguard Worker media_status_t ACodecVideoCapabilities_getSupportedPerformancePoints(
451*ec779b8eSAndroid Build Coastguard Worker const ACodecVideoCapabilities *videoCaps,
452*ec779b8eSAndroid Build Coastguard Worker const ACodecPerformancePoint **outPerformancePointArray, size_t *outCount) {
453*ec779b8eSAndroid Build Coastguard Worker if (videoCaps == nullptr) {
454*ec779b8eSAndroid Build Coastguard Worker return AMEDIA_ERROR_INVALID_PARAMETER;
455*ec779b8eSAndroid Build Coastguard Worker }
456*ec779b8eSAndroid Build Coastguard Worker
457*ec779b8eSAndroid Build Coastguard Worker *outPerformancePointArray = videoCaps->mPerformancePoints.data();
458*ec779b8eSAndroid Build Coastguard Worker *outCount = videoCaps->mPerformancePoints.size();
459*ec779b8eSAndroid Build Coastguard Worker
460*ec779b8eSAndroid Build Coastguard Worker return AMEDIA_OK;
461*ec779b8eSAndroid Build Coastguard Worker }
462*ec779b8eSAndroid Build Coastguard Worker
463*ec779b8eSAndroid Build Coastguard Worker EXPORT
ACodecVideoCapabilities_areSizeAndRateSupported(const ACodecVideoCapabilities * videoCaps,int32_t width,int32_t height,double frameRate)464*ec779b8eSAndroid Build Coastguard Worker int32_t ACodecVideoCapabilities_areSizeAndRateSupported(const ACodecVideoCapabilities *videoCaps,
465*ec779b8eSAndroid Build Coastguard Worker int32_t width, int32_t height, double frameRate) {
466*ec779b8eSAndroid Build Coastguard Worker if (videoCaps == nullptr) {
467*ec779b8eSAndroid Build Coastguard Worker return -1;
468*ec779b8eSAndroid Build Coastguard Worker }
469*ec779b8eSAndroid Build Coastguard Worker return videoCaps->mVideoCaps->areSizeAndRateSupported(width, height, frameRate);
470*ec779b8eSAndroid Build Coastguard Worker }
471*ec779b8eSAndroid Build Coastguard Worker
472*ec779b8eSAndroid Build Coastguard Worker EXPORT
ACodecVideoCapabilities_isSizeSupported(const ACodecVideoCapabilities * videoCaps,int32_t width,int32_t height)473*ec779b8eSAndroid Build Coastguard Worker int32_t ACodecVideoCapabilities_isSizeSupported(const ACodecVideoCapabilities *videoCaps,
474*ec779b8eSAndroid Build Coastguard Worker int32_t width, int32_t height) {
475*ec779b8eSAndroid Build Coastguard Worker if (videoCaps == nullptr) {
476*ec779b8eSAndroid Build Coastguard Worker return -1;
477*ec779b8eSAndroid Build Coastguard Worker }
478*ec779b8eSAndroid Build Coastguard Worker return videoCaps->mVideoCaps->isSizeSupported(width, height);
479*ec779b8eSAndroid Build Coastguard Worker }
480*ec779b8eSAndroid Build Coastguard Worker
481*ec779b8eSAndroid Build Coastguard Worker // ACodecEncoderCapabilities
482*ec779b8eSAndroid Build Coastguard Worker
483*ec779b8eSAndroid Build Coastguard Worker EXPORT
ACodecEncoderCapabilities_getQualityRange(const ACodecEncoderCapabilities * encoderCaps,AIntRange * outRange)484*ec779b8eSAndroid Build Coastguard Worker media_status_t ACodecEncoderCapabilities_getQualityRange(
485*ec779b8eSAndroid Build Coastguard Worker const ACodecEncoderCapabilities *encoderCaps, AIntRange *outRange) {
486*ec779b8eSAndroid Build Coastguard Worker if (encoderCaps == nullptr || outRange == nullptr) {
487*ec779b8eSAndroid Build Coastguard Worker return AMEDIA_ERROR_INVALID_PARAMETER;
488*ec779b8eSAndroid Build Coastguard Worker }
489*ec779b8eSAndroid Build Coastguard Worker
490*ec779b8eSAndroid Build Coastguard Worker const Range<int32_t>& qualityRange = encoderCaps->mEncoderCaps->getQualityRange();
491*ec779b8eSAndroid Build Coastguard Worker outRange->mLower = qualityRange.lower();
492*ec779b8eSAndroid Build Coastguard Worker outRange->mUpper = qualityRange.upper();
493*ec779b8eSAndroid Build Coastguard Worker
494*ec779b8eSAndroid Build Coastguard Worker return AMEDIA_OK;
495*ec779b8eSAndroid Build Coastguard Worker }
496*ec779b8eSAndroid Build Coastguard Worker
497*ec779b8eSAndroid Build Coastguard Worker EXPORT
ACodecEncoderCapabilities_getComplexityRange(const ACodecEncoderCapabilities * encoderCaps,AIntRange * outRange)498*ec779b8eSAndroid Build Coastguard Worker media_status_t ACodecEncoderCapabilities_getComplexityRange(
499*ec779b8eSAndroid Build Coastguard Worker const ACodecEncoderCapabilities *encoderCaps, AIntRange *outRange) {
500*ec779b8eSAndroid Build Coastguard Worker if (encoderCaps == nullptr || outRange == nullptr) {
501*ec779b8eSAndroid Build Coastguard Worker return AMEDIA_ERROR_INVALID_PARAMETER;
502*ec779b8eSAndroid Build Coastguard Worker }
503*ec779b8eSAndroid Build Coastguard Worker
504*ec779b8eSAndroid Build Coastguard Worker const Range<int32_t>& complexityRange = encoderCaps->mEncoderCaps->getComplexityRange();
505*ec779b8eSAndroid Build Coastguard Worker outRange->mLower = complexityRange.lower();
506*ec779b8eSAndroid Build Coastguard Worker outRange->mUpper = complexityRange.upper();
507*ec779b8eSAndroid Build Coastguard Worker
508*ec779b8eSAndroid Build Coastguard Worker return AMEDIA_OK;
509*ec779b8eSAndroid Build Coastguard Worker }
510*ec779b8eSAndroid Build Coastguard Worker
ACodecEncoderCapabilities_isBitrateModeSupported(const ACodecEncoderCapabilities * encoderCaps,ABiterateMode mode)511*ec779b8eSAndroid Build Coastguard Worker int32_t ACodecEncoderCapabilities_isBitrateModeSupported(
512*ec779b8eSAndroid Build Coastguard Worker const ACodecEncoderCapabilities *encoderCaps, ABiterateMode mode) {
513*ec779b8eSAndroid Build Coastguard Worker if (encoderCaps == nullptr) {
514*ec779b8eSAndroid Build Coastguard Worker return -1;
515*ec779b8eSAndroid Build Coastguard Worker }
516*ec779b8eSAndroid Build Coastguard Worker return encoderCaps->mEncoderCaps->isBitrateModeSupported(mode);
517*ec779b8eSAndroid Build Coastguard Worker }
518*ec779b8eSAndroid Build Coastguard Worker
519*ec779b8eSAndroid Build Coastguard Worker
520*ec779b8eSAndroid Build Coastguard Worker }