CodecBase.h revision 79054b1f53b448511f1edb6e0dcab1d7b6f39964
105ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar/* 205ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar * Copyright (C) 2014 The Android Open Source Project 305ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar * 405ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar * Licensed under the Apache License, Version 2.0 (the "License"); 505ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar * you may not use this file except in compliance with the License. 605ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar * You may obtain a copy of the License at 705ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar * 805ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar * http://www.apache.org/licenses/LICENSE-2.0 905ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar * 1005ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar * Unless required by applicable law or agreed to in writing, software 1105ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar * distributed under the License is distributed on an "AS IS" BASIS, 1205ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1305ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar * See the License for the specific language governing permissions and 1405ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar * limitations under the License. 1505ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar */ 1605ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar 1705ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar#ifndef CODEC_BASE_H_ 1805ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar 1905ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar#define CODEC_BASE_H_ 2005ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar 2179054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim#include <memory> 2279054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim 2305ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar#include <stdint.h> 2405ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar 253a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar#define STRINGIFY_ENUMS 263a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar 278338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar#include <media/IOMX.h> 285b05e49e6550cb2abf1a88272d6cd460b8957176Lajos Molnar#include <media/MediaCodecInfo.h> 2979054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim#include <media/stagefright/MediaErrors.h> 3005ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar#include <media/stagefright/foundation/AHandler.h> 313a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnar#include <media/stagefright/foundation/ColorUtils.h> 328338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar#include <media/hardware/HardwareAPI.h> 338338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar 34a63141af8f036bda0b8f7800107ca8a0e0623135Lajos Molnar#include <utils/NativeHandle.h> 3505ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar 368338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar#include <system/graphics.h> 378338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar 3805ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnarnamespace android { 3905ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar 4079054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kimclass BufferProducerWrapper; 417e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kimclass MediaCodecBuffer; 42d291c222357303b9611cab89d0c3b047584ef377Chong Zhangstruct PersistentSurface; 4379054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kimstruct RenderedFrameInfo; 44addf2cbb120346ae42e78fa739245a353db5edadChong Zhangclass Surface; 4505ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar 463a09d8d6f909063990a5681b15a442b2ba8ce54aLajos Molnarstruct CodecBase : public AHandler, /* static */ ColorUtils { 4779054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim struct PortDescription; 4879054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim 4979054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim /** 5079054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * This interface defines events firing from CodecBase back to MediaCodec. 5179054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * All methods must not block. 5279054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim */ 5379054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim class Callback { 5479054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim public: 5579054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim virtual ~Callback() = default; 5679054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim 5779054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim /** 5879054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * Request MediaCodec to fill the specified input buffer. 5979054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * 6079054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * @param bufferId ID of the buffer, assigned by underlying component. 6179054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * @param buffer a buffer to be filled. 6279054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * @param reply a message to post once MediaCodec has filled the 6379054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * buffer. 6479054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim */ 6579054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim virtual void fillThisBuffer( 6679054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim IOMX::buffer_id bufferId, 6779054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim const sp<MediaCodecBuffer> &buffer, 6879054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim const sp<AMessage> &reply) = 0; 6979054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim /** 7079054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * Request MediaCodec to drain the specified output buffer. 7179054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * 7279054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * @param bufferId ID of the buffer, assigned by underlying component. 7379054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * @param buffer a buffer to be filled. 7479054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * @param flags flags associated with this buffer (e.g. EOS). 7579054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * @param reply a message to post once MediaCodec has filled the 7679054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * buffer. 7779054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim */ 7879054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim virtual void drainThisBuffer( 7979054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim IOMX::buffer_id bufferId, 8079054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim const sp<MediaCodecBuffer> &buffer, 8179054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim int32_t flags, 8279054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim const sp<AMessage> &reply) = 0; 8379054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim /** 8479054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * Notify MediaCodec for seeing an output EOS. 8579054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * 8679054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * @param err the underlying cause of the EOS. If the value is neither 8779054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * OK nor ERROR_END_OF_STREAM, the EOS is declared 8879054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * prematurely for that error. 8979054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim */ 9079054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim virtual void onEos(status_t err) = 0; 9179054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim /** 9279054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * Notify MediaCodec that stop operation is complete. 9379054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim */ 9479054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim virtual void onStopCompleted() = 0; 9579054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim /** 9679054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * Notify MediaCodec that release operation is complete. 9779054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim */ 9879054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim virtual void onReleaseCompleted() = 0; 9979054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim /** 10079054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * Notify MediaCodec that flush operation is complete. 10179054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim */ 10279054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim virtual void onFlushCompleted() = 0; 10379054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim /** 10479054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * Notify MediaCodec that an error is occurred. 10579054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * 10679054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * @param err an error code for the occurred error. 10779054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * @param actionCode an action code for severity of the error. 10879054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim */ 10979054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim virtual void onError(status_t err, enum ActionCode actionCode) = 0; 11079054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim /** 11179054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * Notify MediaCodec that the underlying component is allocated. 11279054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * 11379054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * @param componentName the unique name of the component specified in 11479054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * MediaCodecList. 11579054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim */ 11679054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim virtual void onComponentAllocated(const char *componentName) = 0; 11779054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim /** 11879054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * Notify MediaCodec that the underlying component is configured. 11979054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * 12079054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * @param inputFormat an input format at configure time. 12179054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * @param outputFormat an output format at configure time. 12279054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim */ 12379054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim virtual void onComponentConfigured( 12479054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim const sp<AMessage> &inputFormat, const sp<AMessage> &outputFormat) = 0; 12579054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim /** 12679054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * Notify MediaCodec that the input surface is created. 12779054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * 12879054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * @param inputFormat an input format at surface creation. Formats 12979054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * could change from the previous state as a result 13079054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * of creating a surface. 13179054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * @param outputFormat an output format at surface creation. 13279054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * @param inputSurface the created surface. 13379054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim */ 13479054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim virtual void onInputSurfaceCreated( 13579054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim const sp<AMessage> &inputFormat, 13679054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim const sp<AMessage> &outputFormat, 13779054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim const sp<BufferProducerWrapper> &inputSurface) = 0; 13879054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim /** 13979054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * Notify MediaCodec that the input surface creation is failed. 14079054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * 14179054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * @param err an error code of the cause. 14279054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim */ 14379054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim virtual void onInputSurfaceCreationFailed(status_t err) = 0; 14479054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim /** 14579054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * Notify MediaCodec that the component accepted the provided input 14679054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * surface. 14779054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * 14879054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * @param inputFormat an input format at surface assignment. Formats 14979054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * could change from the previous state as a result 15079054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * of assigning a surface. 15179054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * @param outputFormat an output format at surface assignment. 15279054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim */ 15379054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim virtual void onInputSurfaceAccepted( 15479054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim const sp<AMessage> &inputFormat, 15579054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim const sp<AMessage> &outputFormat) = 0; 15679054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim /** 15779054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * Notify MediaCodec that the component declined the provided input 15879054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * surface. 15979054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * 16079054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * @param err an error code of the cause. 16179054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim */ 16279054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim virtual void onInputSurfaceDeclined(status_t err) = 0; 16379054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim /** 16479054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * Noitfy MediaCodec that the requested input EOS is sent to the input 16579054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * surface. 16679054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * 16779054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * @param err an error code returned from the surface. If there is no 16879054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * input surface, the value is INVALID_OPERATION. 16979054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim */ 17079054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim virtual void onSignaledInputEOS(status_t err) = 0; 17179054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim /** 17279054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * Notify MediaCodec with the allocated buffers. 17379054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * 17479054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * @param portIndex zero for input port, one for output port. 17579054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * @param portDesc a PortDescription object containing allocated 17679054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * buffers. 17779054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim */ 17879054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim virtual void onBuffersAllocated(int32_t portIndex, const sp<PortDescription> &portDesc) = 0; 17979054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim /** 18079054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * Notify MediaCodec that output frames are rendered with information on 18179054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * those frames. 18279054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * 18379054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim * @param done a list of rendered frames. 18479054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim */ 18579054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim virtual void onOutputFramesRendered(const std::list<RenderedFrameInfo> &done) = 0; 18605ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar }; 18705ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar 18828edbba6aa6c1a9bbea76da2f5cc3cd73af8eb4cLajos Molnar enum { 18928edbba6aa6c1a9bbea76da2f5cc3cd73af8eb4cLajos Molnar kMaxCodecBufferSize = 8192 * 4096 * 4, // 8K RGBA 19028edbba6aa6c1a9bbea76da2f5cc3cd73af8eb4cLajos Molnar }; 19128edbba6aa6c1a9bbea76da2f5cc3cd73af8eb4cLajos Molnar 19279054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim void setCallback(std::shared_ptr<Callback> &&callback); 19305ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar 19405ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar virtual void initiateAllocateComponent(const sp<AMessage> &msg) = 0; 19505ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar virtual void initiateConfigureComponent(const sp<AMessage> &msg) = 0; 19605ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar virtual void initiateCreateInputSurface() = 0; 1978f469e18c307cb9dc0d16ed9225972aa8be4516fChong Zhang virtual void initiateSetInputSurface( 198d291c222357303b9611cab89d0c3b047584ef377Chong Zhang const sp<PersistentSurface> &surface) = 0; 19905ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar virtual void initiateStart() = 0; 20005ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar virtual void initiateShutdown(bool keepComponentAllocated = false) = 0; 20105ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar 20205ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar // require an explicit message handler 20305ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar virtual void onMessageReceived(const sp<AMessage> &msg) = 0; 20405ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar 2055b05e49e6550cb2abf1a88272d6cd460b8957176Lajos Molnar virtual status_t queryCapabilities( 2065b05e49e6550cb2abf1a88272d6cd460b8957176Lajos Molnar const AString &name, const AString &mime, bool isEncoder, 2075b05e49e6550cb2abf1a88272d6cd460b8957176Lajos Molnar sp<MediaCodecInfo::Capabilities> *caps /* nonnull */) { return INVALID_OPERATION; } 2085b05e49e6550cb2abf1a88272d6cd460b8957176Lajos Molnar 2091dcdfead2971c1fa7c02f24ba86f706890c9f99eLajos Molnar virtual status_t setSurface(const sp<Surface> &surface) { return INVALID_OPERATION; } 2101dcdfead2971c1fa7c02f24ba86f706890c9f99eLajos Molnar 21105ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar virtual void signalFlush() = 0; 21205ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar virtual void signalResume() = 0; 21305ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar 21405ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar virtual void signalRequestIDRFrame() = 0; 21505ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar virtual void signalSetParameters(const sp<AMessage> &msg) = 0; 21605ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar virtual void signalEndOfInputStream() = 0; 21705ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar 21805ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar struct PortDescription : public RefBase { 21905ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar virtual size_t countBuffers() = 0; 22005ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar virtual IOMX::buffer_id bufferIDAt(size_t index) const = 0; 2217e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kim virtual sp<MediaCodecBuffer> bufferAt(size_t index) const = 0; 22205ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar 22305ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar protected: 22405ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar PortDescription(); 22505ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar virtual ~PortDescription(); 22605ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar 22705ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar private: 22805ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar DISALLOW_EVIL_CONSTRUCTORS(PortDescription); 22905ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar }; 23005ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar 2318338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar /* 2328338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar * Codec-related defines 2338338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar */ 2348338519ba2d8d731072c4edf7b9953787ce834cfLajos Molnar 23505ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnarprotected: 23605ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar CodecBase(); 23705ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar virtual ~CodecBase(); 23805ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar 23979054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim std::shared_ptr<Callback> mCallback; 24079054b1f53b448511f1edb6e0dcab1d7b6f39964Wonsik Kim 24105ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnarprivate: 24205ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar DISALLOW_EVIL_CONSTRUCTORS(CodecBase); 24305ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar}; 24405ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar 24505ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar} // namespace android 24605ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar 24705ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar#endif // CODEC_BASE_H_ 24805ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar 249