1 #ifndef _DECODER_PLUGIN_H 2 #define _DECODER_PLUGIN_H 3 4 #include <MediaTrack.h> 5 #include <MediaFormats.h> 6 #include "MediaPlugin.h" 7 8 9 namespace BPrivate { namespace media { 10 11 class PluginManager; 12 13 class ChunkProvider { 14 public: 15 virtual ~ChunkProvider() {}; 16 virtual status_t GetNextChunk(const void** chunkBuffer, 17 size_t* chunkSize, 18 media_header* mediaHeader) = 0; 19 }; 20 21 class Decoder { 22 public: 23 Decoder(); 24 virtual ~Decoder(); 25 26 virtual void GetCodecInfo(media_codec_info* codecInfo) = 0; 27 28 // Setup get's called with the info data from Reader::GetStreamInfo 29 virtual status_t Setup(media_format* ioEncodedFormat, 30 const void* infoBuffer, 31 size_t infoSize) = 0; 32 33 virtual status_t NegotiateOutputFormat( 34 media_format* ioDecodedFormat) = 0; 35 36 virtual status_t SeekedTo(int64 frame, bigtime_t time) = 0; 37 38 virtual status_t Decode(void* buffer, int64* frameCount, 39 media_header* mediaHeader, 40 media_decode_info* info = 0) = 0; 41 42 status_t GetNextChunk(const void** chunkBuffer, 43 size_t* chunkSize, 44 media_header* mediaHeader); 45 46 void SetChunkProvider(ChunkProvider* provider); 47 48 virtual status_t Perform(perform_code code, void* data); 49 50 private: 51 virtual void _ReservedDecoder1(); 52 virtual void _ReservedDecoder2(); 53 virtual void _ReservedDecoder3(); 54 virtual void _ReservedDecoder4(); 55 virtual void _ReservedDecoder5(); 56 57 ChunkProvider* fChunkProvider; 58 59 // needed for plug-in reference count management 60 friend class PluginManager; 61 MediaPlugin* fMediaPlugin; 62 63 uint32 fReserved[5]; 64 }; 65 66 67 class DecoderPlugin : public virtual MediaPlugin { 68 public: 69 DecoderPlugin(); 70 71 virtual Decoder* NewDecoder(uint index) = 0; 72 virtual status_t GetSupportedFormats(media_format** formats, 73 size_t* count) = 0; 74 }; 75 76 } } // namespace BPrivate::media 77 78 using namespace BPrivate::media; 79 80 #endif // _DECODER_PLUGIN_H 81