xref: /haiku/headers/os/media/MediaEncoder.h (revision 2b76973fa2401f7a5edf68e6470f3d3210cbcff3)
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