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