xref: /haiku/headers/private/media/MediaWriter.h (revision 02354704729d38c3b078c696adc1bbbd33cbcf72)
1 /*
2  * Copyright 2009-2010, Stephan Aßmus <superstippi@gmx.de>.
3  * All rights reserved. Distributed under the terms of the MIT License.
4  */
5 #ifndef _MEDIA_WRITER_H
6 #define _MEDIA_WRITER_H
7 
8 
9 #include "EncoderPlugin.h"
10 #include "TList.h"
11 #include "WriterPlugin.h"
12 
13 
14 namespace BPrivate {
15 namespace media {
16 
17 
18 class MediaWriter {
19 public:
20 								MediaWriter(BDataIO* target,
21 									const media_file_format& fileFormat);
22 								~MediaWriter();
23 
24 			status_t			InitCheck();
25 
26 			BDataIO*			Target() const;
27 
28 			void				GetFileFormatInfo(media_file_format* mfi) const;
29 
30 			status_t			CreateEncoder(Encoder** _encoder,
31 									const media_codec_info* codecInfo,
32 									media_format* format, uint32 flags = 0);
33 
34 			status_t			SetCopyright(int32 streamIndex,
35 									const char* copyright);
36 			status_t			SetCopyright(const char* copyright);
37 			status_t			CommitHeader();
38 			status_t			Flush();
39 			status_t			Close();
40 
41 			status_t			AddTrackInfo(int32 streamIndex, uint32 code,
42 									const void* data, size_t size,
43 									uint32 flags = 0);
44 
45 			status_t			WriteChunk(int32 streamIndex,
46 									const void* chunkBuffer, size_t chunkSize,
47 									media_encode_info* encodeInfo);
48 
49 private:
50 			struct StreamInfo {
51 				void*			cookie;
52 			};
53 
54 private:
55 			BDataIO*			fTarget;
56 			Writer*				fWriter;
57 
58 			List<StreamInfo>	fStreamInfos;
59 
60 			media_file_format	fFileFormat;
61 };
62 
63 
64 }; // namespace media
65 }; // namespace BPrivate
66 
67 using namespace BPrivate::media;
68 
69 
70 #endif // _MEDIA_WRITER_H
71