android_media_MediaCodec.h revision bfc56f497de0d18125366a02a93e61cdc0891be4
188572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber/* 288572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber * Copyright 2012, The Android Open Source Project 388572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber * 488572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 588572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber * you may not use this file except in compliance with the License. 688572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber * You may obtain a copy of the License at 788572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber * 888572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber * http://www.apache.org/licenses/LICENSE-2.0 988572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber * 1088572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber * Unless required by applicable law or agreed to in writing, software 1188572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 1288572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1388572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber * See the License for the specific language governing permissions and 1488572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber * limitations under the License. 1588572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber */ 1688572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber 1788572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber#ifndef _ANDROID_MEDIA_MEDIACODEC_H_ 1888572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber#define _ANDROID_MEDIA_MEDIACODEC_H_ 1988572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber 2088572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber#include "jni.h" 2188572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber 229e6bcce17d13bd4f7bba5f8fbcc2e6a0d695274bAndreas Huber#include <media/hardware/CryptoAPI.h> 2388572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber#include <media/stagefright/foundation/ABase.h> 2488572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber#include <utils/Errors.h> 2588572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber#include <utils/RefBase.h> 2688572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber 2788572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Hubernamespace android { 2888572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber 2988572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huberstruct ALooper; 3088572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huberstruct AMessage; 31bfc56f497de0d18125366a02a93e61cdc0891be4Andreas Huberstruct AString; 328240d9239d9aabed75c49f9d4d69fd8a5fe4c899Andreas Huberstruct ICrypto; 3388572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huberstruct ISurfaceTexture; 3488572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huberstruct MediaCodec; 3588572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber 3688572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huberstruct JMediaCodec : public RefBase { 3788572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber JMediaCodec( 3888572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber JNIEnv *env, jobject thiz, 3988572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber const char *name, bool nameIsType, bool encoder); 4088572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber 4188572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber status_t initCheck() const; 4288572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber 4388572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber status_t configure( 4488572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber const sp<AMessage> &format, 4588572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber const sp<ISurfaceTexture> &surfaceTexture, 468240d9239d9aabed75c49f9d4d69fd8a5fe4c899Andreas Huber const sp<ICrypto> &crypto, 4788572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber int flags); 4888572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber 4988572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber status_t start(); 5088572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber status_t stop(); 5188572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber 5288572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber status_t flush(); 5388572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber 5488572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber status_t queueInputBuffer( 5588572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber size_t index, 56bfc56f497de0d18125366a02a93e61cdc0891be4Andreas Huber size_t offset, size_t size, int64_t timeUs, uint32_t flags, 57bfc56f497de0d18125366a02a93e61cdc0891be4Andreas Huber AString *errorDetailMsg); 5888572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber 599e6bcce17d13bd4f7bba5f8fbcc2e6a0d695274bAndreas Huber status_t queueSecureInputBuffer( 609e6bcce17d13bd4f7bba5f8fbcc2e6a0d695274bAndreas Huber size_t index, 619e6bcce17d13bd4f7bba5f8fbcc2e6a0d695274bAndreas Huber size_t offset, 629e6bcce17d13bd4f7bba5f8fbcc2e6a0d695274bAndreas Huber const CryptoPlugin::SubSample *subSamples, 639e6bcce17d13bd4f7bba5f8fbcc2e6a0d695274bAndreas Huber size_t numSubSamples, 649e6bcce17d13bd4f7bba5f8fbcc2e6a0d695274bAndreas Huber const uint8_t key[16], 659e6bcce17d13bd4f7bba5f8fbcc2e6a0d695274bAndreas Huber const uint8_t iv[16], 669e6bcce17d13bd4f7bba5f8fbcc2e6a0d695274bAndreas Huber CryptoPlugin::Mode mode, 679e6bcce17d13bd4f7bba5f8fbcc2e6a0d695274bAndreas Huber int64_t presentationTimeUs, 68bfc56f497de0d18125366a02a93e61cdc0891be4Andreas Huber uint32_t flags, 69bfc56f497de0d18125366a02a93e61cdc0891be4Andreas Huber AString *errorDetailMsg); 709e6bcce17d13bd4f7bba5f8fbcc2e6a0d695274bAndreas Huber 7188572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber status_t dequeueInputBuffer(size_t *index, int64_t timeoutUs); 7288572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber 7388572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber status_t dequeueOutputBuffer( 7488572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber JNIEnv *env, jobject bufferInfo, size_t *index, int64_t timeoutUs); 7588572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber 7688572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber status_t releaseOutputBuffer(size_t index, bool render); 7788572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber 7888572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber status_t getOutputFormat(JNIEnv *env, jobject *format) const; 7988572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber 8088572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber status_t getBuffers( 8188572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber JNIEnv *env, bool input, jobjectArray *bufArray) const; 8288572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber 8388572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huberprotected: 8488572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber virtual ~JMediaCodec(); 8588572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber 8688572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huberprivate: 8788572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber jclass mClass; 8888572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber jweak mObject; 8988572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber 9088572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber sp<ALooper> mLooper; 9188572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber sp<MediaCodec> mCodec; 9288572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber 9388572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber DISALLOW_EVIL_CONSTRUCTORS(JMediaCodec); 9488572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber}; 9588572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber 9688572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber} // namespace android 9788572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber 9888572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber#endif // _ANDROID_MEDIA_MEDIACODEC_H_ 99