17e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim/*
27e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim * Copyright 2016, The Android Open Source Project
37e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim *
47e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim * Licensed under the Apache License, Version 2.0 (the "License");
57e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim * you may not use this file except in compliance with the License.
67e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim * You may obtain a copy of the License at
77e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim *
87e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim *     http://www.apache.org/licenses/LICENSE-2.0
97e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim *
107e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim * Unless required by applicable law or agreed to in writing, software
117e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim * distributed under the License is distributed on an "AS IS" BASIS,
127e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim * See the License for the specific language governing permissions and
147e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim * limitations under the License.
157e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim */
167e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim
177e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim//#define LOG_NDEBUG 0
187e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim#define LOG_TAG "MediaCodecBuffer"
197e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim#include <utils/Log.h>
207e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim
217e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim#include <media/MediaCodecBuffer.h>
227e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim#include <media/stagefright/foundation/ABuffer.h>
237e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim#include <media/stagefright/foundation/AMessage.h>
247e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim#include <media/stagefright/foundation/MediaBufferBase.h>
257e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim
267e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kimnamespace android {
277e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim
287e34bf5af26f8752d4786d3098740cdf51e2438fWonsik KimMediaCodecBuffer::MediaCodecBuffer(const sp<AMessage> &format, const sp<ABuffer> &buffer)
297e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim    : mMeta(new AMessage),
307e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim      mFormat(format),
317e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim      mBuffer(buffer),
327e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim      mMediaBufferBase(nullptr) {
337e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim}
347e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim
357e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim// ABuffer-like interface
367e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kimuint8_t *MediaCodecBuffer::base() {
377e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim    return mBuffer->base();
387e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim}
397e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim
407e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kimuint8_t *MediaCodecBuffer::data() {
417e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim    return mBuffer->data();
427e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim}
437e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim
447e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kimsize_t MediaCodecBuffer::capacity() const {
457e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim    return mBuffer->capacity();
467e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim}
477e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim
487e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kimsize_t MediaCodecBuffer::size() const {
497e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim    return mBuffer->size();
507e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim}
517e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim
527e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kimsize_t MediaCodecBuffer::offset() const {
537e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim    return mBuffer->offset();
547e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim}
557e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim
567e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kimstatus_t MediaCodecBuffer::setRange(size_t offset, size_t size) {
577e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim    mBuffer->setRange(offset, size);
587e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim    return OK;
597e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim}
607e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim
617e34bf5af26f8752d4786d3098740cdf51e2438fWonsik KimMediaBufferBase *MediaCodecBuffer::getMediaBufferBase() {
627e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim    if (mMediaBufferBase != NULL) {
637e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim        mMediaBufferBase->add_ref();
647e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim    }
657e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim    return mMediaBufferBase;
667e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim}
677e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim
687e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kimvoid MediaCodecBuffer::setMediaBufferBase(MediaBufferBase *mediaBuffer) {
697e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim    if (mMediaBufferBase != NULL) {
707e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim        mMediaBufferBase->release();
717e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim    }
727e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim    mMediaBufferBase = mediaBuffer;
737e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim}
747e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim
757e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kimsp<AMessage> MediaCodecBuffer::meta() {
767e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim    return mMeta;
777e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim}
787e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim
797e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kimsp<AMessage> MediaCodecBuffer::format() {
807e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim    return mFormat;
817e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim}
827e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim
83ad60a0f6cd9012507f8086fe741236d12d280ef3Wonsik Kimvoid MediaCodecBuffer::setFormat(const sp<AMessage> &format) {
84ad60a0f6cd9012507f8086fe741236d12d280ef3Wonsik Kim    mMeta->clear();
85ad60a0f6cd9012507f8086fe741236d12d280ef3Wonsik Kim    mFormat = format;
86fd44d8e2f2d37184f7add67125657f3fbfb5a085Wonsik Kim}
87fd44d8e2f2d37184f7add67125657f3fbfb5a085Wonsik Kim
887e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim}  // namespace android
89