blob: 4e46ad66a1828c4a18017ce588cb4df03ae84c3a [file] [log] [blame]
/*
* Copyright 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.
*/
//#define LOG_NDEBUG 0
#define LOG_TAG "C2AidlNode"
#include <log/log.h>
#include <private/android/AHardwareBufferHelpers.h>
#include <media/stagefright/MediaErrors.h>
#include <media/stagefright/aidlpersistentsurface/wrapper/Conversion.h>
#include "C2NodeImpl.h"
#include "C2AidlNode.h"
namespace android {
using ::aidl::android::media::IAidlBufferSource;
using ::aidl::android::media::IAidlNode;
// Conversion
using ::android::media::aidl_conversion::toAidlStatus;
C2AidlNode::C2AidlNode(const std::shared_ptr<Codec2Client::Component> &comp)
: mImpl(new C2NodeImpl(comp, true)) {}
// aidl ndk interfaces
::ndk::ScopedAStatus C2AidlNode::freeNode() {
return toAidlStatus(mImpl->freeNode());
}
::ndk::ScopedAStatus C2AidlNode::getConsumerUsage(int64_t* _aidl_return) {
uint64_t usage;
mImpl->getConsumerUsageBits(&usage);
*_aidl_return = usage;
return ::ndk::ScopedAStatus::ok();
}
::ndk::ScopedAStatus C2AidlNode::getInputBufferParams(IAidlNode::InputBufferParams* _aidl_return) {
mImpl->getInputBufferParams(_aidl_return);
return ::ndk::ScopedAStatus::ok();
}
::ndk::ScopedAStatus C2AidlNode::setConsumerUsage(int64_t usage) {
mImpl->setConsumerUsageBits(static_cast<uint64_t>(usage));
return ::ndk::ScopedAStatus::ok();
}
::ndk::ScopedAStatus C2AidlNode::setAdjustTimestampGapUs(int32_t gapUs) {
mImpl->setAdjustTimestampGapUs(gapUs);
return ::ndk::ScopedAStatus::ok();
}
::ndk::ScopedAStatus C2AidlNode::setInputSurface(
const std::shared_ptr<IAidlBufferSource>& bufferSource) {
return toAidlStatus(mImpl->setAidlInputSurface(bufferSource));
}
::ndk::ScopedAStatus C2AidlNode::submitBuffer(
int32_t buffer,
const std::optional<::aidl::android::hardware::HardwareBuffer>& hBuffer,
int32_t flags, int64_t timestamp, const ::ndk::ScopedFileDescriptor& fence) {
sp<GraphicBuffer> gBuf;
AHardwareBuffer *ahwb = nullptr;
if (hBuffer.has_value()) {
ahwb = hBuffer.value().get();
}
if (ahwb) {
gBuf = AHardwareBuffer_to_GraphicBuffer(ahwb);
}
return toAidlStatus(mImpl->submitBuffer(
buffer, gBuf, flags, timestamp, ::dup(fence.get())));
}
::ndk::ScopedAStatus C2AidlNode::onDataSpaceChanged(
int32_t dataSpace,
int32_t aspects,
int32_t pixelFormat) {
// NOTE: legacy codes passed aspects, but they didn't used.
(void)aspects;
return toAidlStatus(mImpl->onDataspaceChanged(
static_cast<uint32_t>(dataSpace),
static_cast<uint32_t>(pixelFormat)));
}
// cpp interface
std::shared_ptr<IAidlBufferSource> C2AidlNode::getSource() {
return mImpl->getAidlSource();
}
void C2AidlNode::setFrameSize(uint32_t width, uint32_t height) {
return mImpl->setFrameSize(width, height);
}
void C2AidlNode::onInputBufferDone(c2_cntr64_t index) {
return mImpl->onInputBufferDone(index);
}
void C2AidlNode::onInputBufferEmptied() {
return mImpl->onInputBufferEmptied();
}
android_dataspace C2AidlNode::getDataspace() {
return mImpl->getDataspace();
}
uint32_t C2AidlNode::getPixelFormat() {
return mImpl->getPixelFormat();
}
void C2AidlNode::setPriority(int priority) {
return mImpl->setPriority(priority);
}
} // namespace android