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