CodecBase.h revision 3a09d8d6f909063990a5681b15a442b2ba8ce54a
1f933441648ef6a71dee783d733aac17b9508b452Andreas Huber/* 2f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * Copyright (C) 2014 The Android Open Source Project 3f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * 4f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 5f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * you may not use this file except in compliance with the License. 6f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * You may obtain a copy of the License at 7f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * 8f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * http://www.apache.org/licenses/LICENSE-2.0 9f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * 10f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * Unless required by applicable law or agreed to in writing, software 11f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 12f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * See the License for the specific language governing permissions and 14f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * limitations under the License. 15f933441648ef6a71dee783d733aac17b9508b452Andreas Huber */ 16f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 17f933441648ef6a71dee783d733aac17b9508b452Andreas Huber#ifndef CODEC_BASE_H_ 18f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 19f933441648ef6a71dee783d733aac17b9508b452Andreas Huber#define CODEC_BASE_H_ 20f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 213a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar#include <stdint.h> 223a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar 233a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar#define STRINGIFY_ENUMS 24f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 25f933441648ef6a71dee783d733aac17b9508b452Andreas Huber#include <media/IOMX.h> 26f933441648ef6a71dee783d733aac17b9508b452Andreas Huber#include <media/MediaCodecInfo.h> 27f933441648ef6a71dee783d733aac17b9508b452Andreas Huber#include <media/stagefright/foundation/AHandler.h> 2835d5af131c9d4962e935082f204ccd6a2130861cWeiyin Jiang#include <media/stagefright/foundation/ColorUtils.h> 297b15cb33847e6282ea8352c98894683b796127f3Wei Jia#include <media/hardware/HardwareAPI.h> 307e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim 31dc43dfa1294470a4413c37e863ef3b621da8681fLajos Molnar#include <utils/NativeHandle.h> 325bc087c573c70c84c6a39946457590b42d392a33Andreas Huber 33f933441648ef6a71dee783d733aac17b9508b452Andreas Huber#include <system/graphics.h> 34d5e56231a598b180a1d898bb7dc61b75580e59a4Andreas Huber 35d5e56231a598b180a1d898bb7dc61b75580e59a4Andreas Hubernamespace android { 36bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia 37d5e56231a598b180a1d898bb7dc61b75580e59a4Andreas Huberstruct ABuffer; 38f933441648ef6a71dee783d733aac17b9508b452Andreas Huberstruct PersistentSurface; 39d5e56231a598b180a1d898bb7dc61b75580e59a4Andreas Huber 40d5e56231a598b180a1d898bb7dc61b75580e59a4Andreas Huberstruct CodecBase : public AHandler, /* static */ ColorUtils { 41f933441648ef6a71dee783d733aac17b9508b452Andreas Huber enum { 42bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia kWhatFillThisBuffer = 'fill', 43bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia kWhatDrainThisBuffer = 'drai', 44bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia kWhatEOS = 'eos ', 45bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia kWhatShutdownCompleted = 'scom', 46bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia kWhatFlushCompleted = 'fcom', 47f933441648ef6a71dee783d733aac17b9508b452Andreas Huber kWhatOutputFormatChanged = 'outC', 48f933441648ef6a71dee783d733aac17b9508b452Andreas Huber kWhatError = 'erro', 497e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim kWhatComponentAllocated = 'cAll', 50f933441648ef6a71dee783d733aac17b9508b452Andreas Huber kWhatComponentConfigured = 'cCon', 51f933441648ef6a71dee783d733aac17b9508b452Andreas Huber kWhatInputSurfaceCreated = 'isfc', 52f933441648ef6a71dee783d733aac17b9508b452Andreas Huber kWhatInputSurfaceAccepted = 'isfa', 53f933441648ef6a71dee783d733aac17b9508b452Andreas Huber kWhatSignaledInputEOS = 'seos', 543a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar kWhatBuffersAllocated = 'allc', 553a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar kWhatOutputFramesRendered = 'outR', 563a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar }; 573a474aa67fc31505740526dd249d96204c08bf79Lajos Molnar 589816016afb2a13c6a866cd047d57020566a8b9a9Wei Jia virtual void setNotificationMessage(const sp<AMessage> &msg) = 0; 597137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang 60f933441648ef6a71dee783d733aac17b9508b452Andreas Huber virtual void initiateAllocateComponent(const sp<AMessage> &msg) = 0; 61f933441648ef6a71dee783d733aac17b9508b452Andreas Huber virtual void initiateConfigureComponent(const sp<AMessage> &msg) = 0; 62f933441648ef6a71dee783d733aac17b9508b452Andreas Huber virtual void initiateCreateInputSurface() = 0; 63bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia virtual void initiateSetInputSurface( 64a10fd23bb9fcf16e778c639ea5638e2917dacd89Ronghua Wu const sp<PersistentSurface> &surface) = 0; 65bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia virtual void initiateStart() = 0; 66b408222bd9479c291874b607acae1425d6154fe7Andreas Huber virtual void initiateShutdown(bool keepComponentAllocated = false) = 0; 67b408222bd9479c291874b607acae1425d6154fe7Andreas Huber 68b408222bd9479c291874b607acae1425d6154fe7Andreas Huber // require an explicit message handler 69c851b5de495169d7e9528644c2592746021bd968Lajos Molnar virtual void onMessageReceived(const sp<AMessage> &msg) = 0; 70c851b5de495169d7e9528644c2592746021bd968Lajos Molnar 71a73d9e0b3d171d2bfcd9eb07df9d6d36ae74df57Ronghua Wu virtual status_t queryCapabilities( 72a73d9e0b3d171d2bfcd9eb07df9d6d36ae74df57Ronghua Wu const AString &name, const AString &mime, bool isEncoder, 73a73d9e0b3d171d2bfcd9eb07df9d6d36ae74df57Ronghua Wu sp<MediaCodecInfo::Capabilities> *caps /* nonnull */) { return INVALID_OPERATION; } 74202bce11a7f66f27e6dbb6d154ddc123aa62513dAndy Hung 753b9eb1f8629c6264d924ab7043f80d824cdd39e2Chong Zhang virtual status_t setSurface(const sp<Surface> &surface) { return INVALID_OPERATION; } 763b9eb1f8629c6264d924ab7043f80d824cdd39e2Chong Zhang 773b9eb1f8629c6264d924ab7043f80d824cdd39e2Chong Zhang virtual void signalFlush() = 0; 78202bce11a7f66f27e6dbb6d154ddc123aa62513dAndy Hung virtual void signalResume() = 0; 79c387f2b719a1a26c8306f77d79cc9a6f26b36813Dhananjay Kumar 80c387f2b719a1a26c8306f77d79cc9a6f26b36813Dhananjay Kumar virtual void signalRequestIDRFrame() = 0; 813b9eb1f8629c6264d924ab7043f80d824cdd39e2Chong Zhang virtual void signalSetParameters(const sp<AMessage> &msg) = 0; 823b9eb1f8629c6264d924ab7043f80d824cdd39e2Chong Zhang virtual void signalEndOfInputStream() = 0; 839a3101b22b5115717faeac986b43fc6618fd3b30Wei Jia 849a3101b22b5115717faeac986b43fc6618fd3b30Wei Jia struct PortDescription : public RefBase { 859a3101b22b5115717faeac986b43fc6618fd3b30Wei Jia virtual size_t countBuffers() = 0; 869a3101b22b5115717faeac986b43fc6618fd3b30Wei Jia virtual IOMX::buffer_id bufferIDAt(size_t index) const = 0; 879a3101b22b5115717faeac986b43fc6618fd3b30Wei Jia virtual sp<ABuffer> bufferAt(size_t index) const = 0; 889a3101b22b5115717faeac986b43fc6618fd3b30Wei Jia virtual sp<NativeHandle> handleAt(size_t index) const { return NULL; }; 89c387f2b719a1a26c8306f77d79cc9a6f26b36813Dhananjay Kumar virtual sp<RefBase> memRefAt(size_t index) const { return NULL; } 909a3101b22b5115717faeac986b43fc6618fd3b30Wei Jia 919a3101b22b5115717faeac986b43fc6618fd3b30Wei Jia protected: 92f933441648ef6a71dee783d733aac17b9508b452Andreas Huber PortDescription(); 93faeb0f291330134dc4468359a36e099aae508449Ronghua Wu virtual ~PortDescription(); 94faeb0f291330134dc4468359a36e099aae508449Ronghua Wu 95faeb0f291330134dc4468359a36e099aae508449Ronghua Wu private: 96faeb0f291330134dc4468359a36e099aae508449Ronghua Wu DISALLOW_EVIL_CONSTRUCTORS(PortDescription); 97faeb0f291330134dc4468359a36e099aae508449Ronghua Wu }; 98faeb0f291330134dc4468359a36e099aae508449Ronghua Wu 99f5b1db11734358d979a23a1ac4903872186ef60bRonghua Wu /* 100f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * Codec-related defines 101f933441648ef6a71dee783d733aac17b9508b452Andreas Huber */ 102faeb0f291330134dc4468359a36e099aae508449Ronghua Wu 103a05f1e3a8eb80a0a9f19456aea357d6d8e405794Wei Jiaprotected: 1040852917279f79a94907e9906d0533ae409a30f6aRonghua Wu CodecBase(); 105a05f1e3a8eb80a0a9f19456aea357d6d8e405794Wei Jia virtual ~CodecBase(); 1060852917279f79a94907e9906d0533ae409a30f6aRonghua Wu 1070852917279f79a94907e9906d0533ae409a30f6aRonghua Wuprivate: 108f933441648ef6a71dee783d733aac17b9508b452Andreas Huber DISALLOW_EVIL_CONSTRUCTORS(CodecBase); 109f933441648ef6a71dee783d733aac17b9508b452Andreas Huber}; 110f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 111f933441648ef6a71dee783d733aac17b9508b452Andreas Huber} // namespace android 112f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 113f933441648ef6a71dee783d733aac17b9508b452Andreas Huber#endif // CODEC_BASE_H_ 114f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 115bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia