1 /* 2 * Copyright 2009, Haiku, Inc. All rights reserved. 3 * Distributed under the terms of the MIT License. 4 */ 5 #ifndef _MEDIA_ENCODER_H 6 #define _MEDIA_ENCODER_H 7 8 9 #include <MediaFormats.h> 10 11 12 class BMediaEncoder { 13 public: 14 BMediaEncoder(); 15 BMediaEncoder( 16 const media_format* outputFormat); 17 BMediaEncoder(const media_codec_info* info); 18 virtual ~BMediaEncoder(); 19 20 status_t InitCheck() const; 21 22 status_t SetTo(const media_format* outputFormat); 23 status_t SetTo(const media_codec_info* info); 24 status_t SetFormat(media_format* inputFormat, 25 media_format* outputFormat, 26 media_file_format* fileFormat = NULL); 27 28 status_t Encode(const void* buffer, int64 frameCount, 29 media_encode_info* info); 30 31 status_t GetEncodeParameters( 32 encode_parameters* parameters) const; 33 status_t SetEncodeParameters( 34 encode_parameters* parameters); 35 36 protected: 37 virtual status_t WriteChunk(const void* buffer, size_t size, 38 media_encode_info* info) = 0; 39 40 virtual status_t AddTrackInfo(uint32 code, const char* data, 41 size_t size); 42 43 // TODO: Needs Perform() method for FBC! 44 45 private: 46 // FBC padding and forbidden methods 47 virtual status_t _Reserved_BMediaEncoder_0(int32 arg, ...); 48 virtual status_t _Reserved_BMediaEncoder_1(int32 arg, ...); 49 virtual status_t _Reserved_BMediaEncoder_2(int32 arg, ...); 50 virtual status_t _Reserved_BMediaEncoder_3(int32 arg, ...); 51 virtual status_t _Reserved_BMediaEncoder_4(int32 arg, ...); 52 virtual status_t _Reserved_BMediaEncoder_5(int32 arg, ...); 53 virtual status_t _Reserved_BMediaEncoder_6(int32 arg, ...); 54 virtual status_t _Reserved_BMediaEncoder_7(int32 arg, ...); 55 virtual status_t _Reserved_BMediaEncoder_8(int32 arg, ...); 56 virtual status_t _Reserved_BMediaEncoder_9(int32 arg, ...); 57 virtual status_t _Reserved_BMediaEncoder_10(int32 arg, ...); 58 virtual status_t _Reserved_BMediaEncoder_11(int32 arg, ...); 59 virtual status_t _Reserved_BMediaEncoder_12(int32 arg, ...); 60 virtual status_t _Reserved_BMediaEncoder_13(int32 arg, ...); 61 virtual status_t _Reserved_BMediaEncoder_14(int32 arg, ...); 62 virtual status_t _Reserved_BMediaEncoder_15(int32 arg, ...); 63 64 BMediaEncoder(const BMediaEncoder& other); 65 BMediaEncoder& operator=(const BMediaEncoder& other); 66 67 private: 68 static status_t write_chunk(void* classPtr, 69 const void* buffer, size_t size, 70 media_encode_info* info); 71 72 void Init(); 73 void ReleaseEncoder(); 74 75 uint32 _reserved_was_fEncoderMgr; 76 uint32 _reserved_was_fEncoder; 77 78 int32 fEncoderID; 79 bool fFormatValid; 80 bool fEncoderStarted; 81 status_t fInitStatus; 82 83 uint32 _reserved_BMediaEncoder_[32]; 84 }; 85 86 87 class BMediaBufferEncoder: public BMediaEncoder { 88 public: 89 BMediaBufferEncoder(); 90 BMediaBufferEncoder( 91 const media_format* outputFormat); 92 BMediaBufferEncoder( 93 const media_codec_info* info); 94 95 status_t EncodeToBuffer(void* outputBuffer, 96 size_t* _size, const void* inputBuffer, 97 int64 frameCount, media_encode_info* info); 98 99 protected: 100 virtual status_t WriteChunk(const void* buffer, size_t size, 101 media_encode_info* info); 102 103 protected: 104 void* fBuffer; 105 int32 fBufferSize; 106 }; 107 108 #endif // _MEDIA_ENCODER_H 109 110