blob: 6d9188b1d2ece71af86aab6b1dd547a3053f90d6 [file] [log] [blame]
/*
* Copyright (C) 2024 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef _NDK_MEDIA_CODEC_INFO_PRIV_H
#define _NDK_MEDIA_CODEC_INFO_PRIV_H
#include <media/MediaCodecInfo.h>
#include <media/NdkMediaCodecInfo.h>
struct ACodecAudioCapabilities {
std::shared_ptr<android::AudioCapabilities> mAudioCaps;
std::vector<int> mSampleRates;
std::vector<AIntRange> mSampleRateRanges;
std::vector<AIntRange> mInputChannelCountRanges;
void initSampleRates() {
mSampleRates = mAudioCaps->getSupportedSampleRates();
}
void initSampleRateRanges() {
const std::vector<android::Range<int>>& sampleRateRanges
= mAudioCaps->getSupportedSampleRateRanges();
for (auto it = sampleRateRanges.begin(); it != sampleRateRanges.end(); it++) {
mSampleRateRanges.emplace_back(it->lower(), it->upper());
}
}
void initInputChannelCountRanges() {
const std::vector<android::Range<int>>& inputChannels
= mAudioCaps->getInputChannelCountRanges();
for (auto it = inputChannels.begin(); it != inputChannels.end(); it++) {
mInputChannelCountRanges.emplace_back(it->lower(), it->upper());
}
}
ACodecAudioCapabilities(std::shared_ptr<android::AudioCapabilities> audioCaps)
: mAudioCaps(audioCaps) {
initSampleRates();
initSampleRateRanges();
initInputChannelCountRanges();
}
};
struct ACodecPerformancePoint {
std::shared_ptr<const android::VideoCapabilities::PerformancePoint> mPerformancePoint;
ACodecPerformancePoint(std::shared_ptr<const android::VideoCapabilities::PerformancePoint>
performancePoint) : mPerformancePoint(performancePoint) {}
};
struct ACodecVideoCapabilities {
std::shared_ptr<android::VideoCapabilities> mVideoCaps;
std::vector<ACodecPerformancePoint> mPerformancePoints;
void initPerformancePoints() {
const std::vector<android::VideoCapabilities::PerformancePoint>& performancePoints
= mVideoCaps->getSupportedPerformancePoints();
for (auto it = performancePoints.begin(); it != performancePoints.end(); it++) {
mPerformancePoints.emplace_back(
std::shared_ptr<const android::VideoCapabilities::PerformancePoint>(&(*it)));
}
}
ACodecVideoCapabilities(std::shared_ptr<android::VideoCapabilities> videoCaps)
: mVideoCaps(videoCaps) {
initPerformancePoints();
}
};
struct ACodecEncoderCapabilities {
std::shared_ptr<android::EncoderCapabilities> mEncoderCaps;
ACodecEncoderCapabilities(std::shared_ptr<android::EncoderCapabilities> encoderCaps)
: mEncoderCaps(encoderCaps) {}
};
struct AMediaCodecInfo {
std::string mName;
android::sp<android::MediaCodecInfo> mInfo;
std::string mMediaType;
std::shared_ptr<android::CodecCapabilities> mCodecCaps;
std::shared_ptr<const ACodecAudioCapabilities> mAAudioCaps;
std::shared_ptr<const ACodecVideoCapabilities> mAVideoCaps;
std::shared_ptr<const ACodecEncoderCapabilities> mAEncoderCaps;
AMediaCodecInfo(std::string name, android::sp<android::MediaCodecInfo> info,
std::shared_ptr<android::CodecCapabilities> codecCaps, std::string mediaType)
: mName(name), mInfo(info), mMediaType(mediaType), mCodecCaps(codecCaps) {
if (!mName.empty() && mInfo != nullptr && !mMediaType.empty() && mCodecCaps != nullptr) {
if (mCodecCaps->getAudioCapabilities() != nullptr) {
mAAudioCaps = std::make_shared<const ACodecAudioCapabilities>(
mCodecCaps->getAudioCapabilities());
}
if (mCodecCaps->getVideoCapabilities() != nullptr) {
mAVideoCaps = std::make_shared<const ACodecVideoCapabilities>(
mCodecCaps->getVideoCapabilities());
}
if (mCodecCaps->getEncoderCapabilities() != nullptr) {
mAEncoderCaps = std::make_shared<const ACodecEncoderCapabilities>(
mCodecCaps->getEncoderCapabilities());
}
}
}
};
#endif //_NDK_MEDIA_CODEC_INFO_PRIV_H