MediaWriter.h revision 0ba82236
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 <Url.h>
10
11#include "EncoderPlugin.h"
12#include "StreamerPlugin.h"
13#include "TList.h"
14#include "WriterPlugin.h"
15
16
17namespace BPrivate {
18namespace media {
19
20
21class MediaWriter {
22public:
23								MediaWriter(BDataIO* target,
24									const media_file_format& fileFormat);
25								MediaWriter(BUrl url,
26									const media_file_format& fileFormat);
27								~MediaWriter();
28
29			status_t			InitCheck();
30
31			BDataIO*			Target() const;
32
33			void				GetFileFormatInfo(media_file_format* mfi) const;
34
35			status_t			CreateEncoder(Encoder** _encoder,
36									const media_codec_info* codecInfo,
37									media_format* format, uint32 flags = 0);
38
39			status_t			SetCopyright(int32 streamIndex,
40									const char* copyright);
41			status_t			SetCopyright(const char* copyright);
42			status_t			CommitHeader();
43			status_t			Flush();
44			status_t			Close();
45
46			status_t			AddTrackInfo(int32 streamIndex, uint32 code,
47									const void* data, size_t size,
48									uint32 flags = 0);
49
50			status_t			WriteChunk(int32 streamIndex,
51									const void* chunkBuffer, size_t chunkSize,
52									media_encode_info* encodeInfo);
53
54private:
55			struct StreamInfo {
56				void*			cookie;
57			};
58
59private:
60			BDataIO*			fTarget;
61			Writer*				fWriter;
62			Streamer*			fStreamer;
63
64			List<StreamInfo>	fStreamInfos;
65
66			media_file_format	fFileFormat;
67};
68
69
70}; // namespace media
71}; // namespace BPrivate
72
73using namespace BPrivate::media;
74
75
76#endif // _MEDIA_WRITER_H
77