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 "BufferImpl" 197e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim#include <utils/Log.h> 207e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim 217e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim#include <binder/IMemory.h> 227e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim#include <media/stagefright/foundation/ABuffer.h> 237e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim#include <media/stagefright/foundation/AMessage.h> 244811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kim#include <media/ICrypto.h> 254811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kim#include <utils/NativeHandle.h> 267e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim 274811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kim#include "include/SecureBuffer.h" 287e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim#include "include/SharedMemoryBuffer.h" 297e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim 307e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kimnamespace android { 317e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim 327e34bf5af26f8752d4786d3098740cdf51e2438fWonsik KimSharedMemoryBuffer::SharedMemoryBuffer(const sp<AMessage> &format, const sp<IMemory> &mem) 337e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim : MediaCodecBuffer(format, new ABuffer(mem->pointer(), mem->size())), 347e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim mMemory(mem) { 357e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim} 367e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim 378a21c0191f974a0b9cbd5818052e2655e0aaa306Pawin VongmasaSharedMemoryBuffer::SharedMemoryBuffer(const sp<AMessage> &format, const sp<TMemory> &mem) 388a21c0191f974a0b9cbd5818052e2655e0aaa306Pawin Vongmasa : MediaCodecBuffer(format, new ABuffer(mem->getPointer(), mem->getSize())), 398a21c0191f974a0b9cbd5818052e2655e0aaa306Pawin Vongmasa mTMemory(mem) { 408a21c0191f974a0b9cbd5818052e2655e0aaa306Pawin Vongmasa} 418a21c0191f974a0b9cbd5818052e2655e0aaa306Pawin Vongmasa 42fd44d8e2f2d37184f7add67125657f3fbfb5a085Wonsik KimSecureBuffer::SecureBuffer(const sp<AMessage> &format, const void *ptr, size_t size) 434811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kim : MediaCodecBuffer(format, new ABuffer(nullptr, size)), 444811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kim mPointer(ptr) { 454811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kim} 464811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kim 474811923e80a8abefa278307ebf8cc9b0294ba67fWonsik KimSecureBuffer::SecureBuffer( 484811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kim const sp<AMessage> &format, const sp<NativeHandle> &handle, size_t size) 494811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kim : MediaCodecBuffer(format, new ABuffer(nullptr, size)), 504811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kim mPointer(nullptr), 514811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kim mHandle(handle) { 524811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kim} 534811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kim 544811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kimvoid *SecureBuffer::getDestinationPointer() { 554811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kim return (void *)(mHandle == nullptr ? mPointer : mHandle->handle()); 564811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kim} 574811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kim 584811923e80a8abefa278307ebf8cc9b0294ba67fWonsik KimICrypto::DestinationType SecureBuffer::getDestinationType() { 59a53d6553fce1818bdf87833f93633c93ad1b5915Jeff Tinker return ICrypto::kDestinationTypeNativeHandle; 604811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kim} 614811923e80a8abefa278307ebf8cc9b0294ba67fWonsik Kim 627e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim} // namespace android 63