diff options
Diffstat (limited to 'include/media/stagefright/ACodec.h')
-rw-r--r-- | include/media/stagefright/ACodec.h | 68 |
1 files changed, 56 insertions, 12 deletions
diff --git a/include/media/stagefright/ACodec.h b/include/media/stagefright/ACodec.h index 8b5b862..0ac13b9 100644 --- a/include/media/stagefright/ACodec.h +++ b/include/media/stagefright/ACodec.h @@ -28,6 +28,8 @@ #include <media/stagefright/SkipCutBuffer.h> #include <OMX_Audio.h> +#include <system/audio.h> + #define TRACK_BUFFER_TIMING 0 namespace android { @@ -93,8 +95,11 @@ struct ACodec : public AHierarchicalStateMachine, public CodecBase { protected: virtual ~ACodec(); + virtual status_t setupCustomCodec( + status_t err, const char *mime, const sp<AMessage> &msg); + virtual status_t GetVideoCodingTypeFromMime( + const char *mime, OMX_VIDEO_CODINGTYPE *codingType); -private: struct BaseState; struct UninitializedState; struct LoadedState; @@ -143,6 +148,7 @@ private: kFlagIsSecure = 1, kFlagPushBlankBuffersToNativeWindowOnShutdown = 2, kFlagIsGrallocUsageProtected = 4, + kFlagPushBlankBuffersToNativeWindowOnSwitch = 1 << 7, }; enum { @@ -152,6 +158,7 @@ private: }; struct BufferInfo { + BufferInfo() : mCustomData(-1) {} enum Status { OWNED_BY_US, OWNED_BY_COMPONENT, @@ -173,6 +180,7 @@ private: sp<GraphicBuffer> mGraphicBuffer; int mFenceFd; FrameRenderTracker::Info *mRenderInfo; + int mCustomData; // The following field and 4 methods are used for debugging only bool mIsReadFence; @@ -236,6 +244,8 @@ private: bool mSentFormat; bool mIsVideo; bool mIsEncoder; + bool mEncoderComponent; + bool mComponentAllocByName; bool mFatalError; bool mShutdownInProgress; bool mExplicitShutdown; @@ -271,7 +281,7 @@ private: status_t setCyclicIntraMacroblockRefresh(const sp<AMessage> &msg, int32_t mode); status_t allocateBuffersOnPort(OMX_U32 portIndex); status_t freeBuffersOnPort(OMX_U32 portIndex); - status_t freeBuffer(OMX_U32 portIndex, size_t i); + virtual status_t freeBuffer(OMX_U32 portIndex, size_t i); status_t handleSetSurface(const sp<Surface> &surface); status_t setupNativeWindowSizeFormatAndUsage( @@ -284,6 +294,9 @@ private: status_t submitOutputMetadataBuffer(); void signalSubmitOutputMetadataBufferIfEOS_workaround(); status_t allocateOutputBuffersFromNativeWindow(); +#ifdef USE_SAMSUNG_COLORFORMAT + void setNativeWindowColorFormat(OMX_COLOR_FORMATTYPE &eNativeColorFormat); +#endif status_t cancelBufferToNativeWindow(BufferInfo *info); status_t freeOutputBuffersNotOwnedByComponent(); BufferInfo *dequeueBufferFromNativeWindow(); @@ -300,8 +313,8 @@ private: uint32_t portIndex, IOMX::buffer_id bufferID, ssize_t *index = NULL); - status_t setComponentRole(bool isEncoder, const char *mime); - status_t configureCodec(const char *mime, const sp<AMessage> &msg); + virtual status_t setComponentRole(bool isEncoder, const char *mime); + virtual status_t configureCodec(const char *mime, const sp<AMessage> &msg); status_t configureTunneledVideoPlayback(int32_t audioHwSync, const sp<ANativeWindow> &nativeWindow); @@ -314,10 +327,10 @@ private: status_t setSupportedOutputFormat(bool getLegacyFlexibleFormat); - status_t setupVideoDecoder( + virtual status_t setupVideoDecoder( const char *mime, const sp<AMessage> &msg, bool usingNativeBuffers); - status_t setupVideoEncoder( + virtual status_t setupVideoEncoder( const char *mime, const sp<AMessage> &msg); status_t setVideoFormatOnPort( @@ -338,11 +351,13 @@ private: int32_t numChannels, int32_t sampleRate, int32_t bitRate, int32_t aacProfile, bool isADTS, int32_t sbrMode, int32_t maxOutputChannelCount, const drcParams_t& drc, - int32_t pcmLimiterEnable); + int32_t pcmLimiterEnable, int32_t bitsPerSample = 16); - status_t setupAC3Codec(bool encoder, int32_t numChannels, int32_t sampleRate); + status_t setupAC3Codec(bool encoder, int32_t numChannels, int32_t sampleRate, + int32_t bitsPerSample = 16); - status_t setupEAC3Codec(bool encoder, int32_t numChannels, int32_t sampleRate); + status_t setupEAC3Codec(bool encoder, int32_t numChannels, int32_t sampleRate, + int32_t bitsPerSample = 16); status_t selectAudioPortFormat( OMX_U32 portIndex, OMX_AUDIO_CODINGTYPE desiredFormat); @@ -372,7 +387,7 @@ private: status_t configureBitrate( int32_t bitrate, OMX_VIDEO_CONTROLRATETYPE bitrateMode); - status_t setupErrorCorrectionParameters(); + virtual status_t setupErrorCorrectionParameters(); status_t initNativeWindow(); @@ -408,7 +423,7 @@ private: bool dropIncomplete = false, FrameRenderTracker::Info *until = NULL); void sendFormatChange(const sp<AMessage> &reply); - status_t getPortFormat(OMX_U32 portIndex, sp<AMessage> ¬ify); + virtual status_t getPortFormat(OMX_U32 portIndex, sp<AMessage> ¬ify); void signalError( OMX_ERRORTYPE error = OMX_ErrorUndefined, @@ -420,11 +435,40 @@ private: DescribeColorFormatParams &describeParams); status_t requestIDRFrame(); - status_t setParameters(const sp<AMessage> ¶ms); + virtual status_t setParameters(const sp<AMessage> ¶ms); // Send EOS on input stream. void onSignalEndOfInputStream(); + virtual void setBFrames(OMX_VIDEO_PARAM_MPEG4TYPE *mpeg4type) {} + virtual void setBFrames(OMX_VIDEO_PARAM_AVCTYPE *h264type, + const int32_t iFramesInterval, const int32_t frameRate) {} + + virtual status_t getVQZIPInfo(const sp<AMessage> &msg) { + return OK; + } + virtual bool canAllocateBuffer(OMX_U32 /* portIndex */) { + return false; + } + virtual void enableCustomAllocationMode(const sp<AMessage> &/* msg */) {} + virtual status_t allocateBuffer( + OMX_U32 portIndex, size_t bufSize, BufferInfo &info); + + virtual status_t setDSModeHint(sp<AMessage>& msg, + OMX_U32 flags, int64_t timeUs) { + return UNKNOWN_ERROR; + } + + virtual bool getDSModeHint(const sp<AMessage>& msg) { + return false; + } + + sp<IOMXObserver> createObserver(); + + status_t setupRawAudioFormatInternal( + OMX_U32 portIndex, int32_t sampleRate, int32_t numChannels, + int32_t bitsPerSample); + DISALLOW_EVIL_CONSTRUCTORS(ACodec); }; |