| OpenBeOS.ExtractorWriterAPI.ProposedAPI.MediaWriter |
 |
struct media_write_info {
uint32 flags;
int32 used_data_size;
bigtime_t start_time;
bigtime_t time_to_write;
void * file_format_data;
size_t file_format_data_size;
int8 pad[??];
media_write_info();
}
class BMediaWriter
{
public:
BMediaWriter();
// start with a file or other destination
BMediaWriter(const entry_ref * ref,
const media_file_format * mfi, int32 flags = 0);
BMediaWriter(BPositionIO * destination,
const media_file_format * mfi, int32 flags = 0);
// start with a file format specification
BMediaWriter(const media_file_format * outputFormat);
BMediaWriter(const media_file_format_info * info);
virtual ~BMediaWriter(void);
status_t InitCheck() const;
status_t SetDestination(const entry_ref * ref, int32 flags = 0);
status_t SetDestination(BPositionIO * destination, int32 flags = 0);
status_t SetTo(const media_file_format * outputFormat);
status_t SetTo(const media_file_format_info * info);
status_t SetOutputFormat(const media_file_format * outputFormat,
media_file_format_info * info);
// for direct transcoding
status_t SetInputFormat(media_file_format * inputFormat);
status_t SetSource(const entry_ref * ref, int32 flags = 0);
status_t SetSource(BPositionIO * destination, int32 flags = 0);
status_t Write(void * buffer, int64 * count,
media_write_info * outInfo);
status_t GetWriterInfo(media_file_format_info * outInfo) const;
// convenience methods, call to SetParameterValue
inline status_t SetCopyright(const char * data, int32 length = -1) {
if (length == -1) length=strlen(data);
return SetParameterValue(B_COPYRIGHT,©right,length);
}
// provides B_TRACK_COUNT, and B_DURATION
// see also BMediaFile::GetParameterValue
virtual status_t GetParameterValue(int32 id, const void * value,
size_t * size) = 0;
// additional configuration parameters
// see also BMediaFile::SetParameterValue
virtual status_t SetParameterValue(int32 id, const void * value,
size_t size);
// the writer may return a BParameterWeb for browsing
// or configuring the file format's parameters. returns
// NULL if the writer doesn't support this.
// see also BMediaFile::Web
virtual BParameterWeb * Web(void);
...
protected:
virtual status_t GetNextChunk(const void ** chunkData,
size_t * chunkLength,
media_header * header) = 0;
private:
// unimplemented
BMediaWriter(const BMediaWriter &);
BMediaWriter & operator=(const BMediaWriter &);
static status_t write_chunk(void *classptr, const void * chunkData,
size_t * chunkLen, media_write_info * info);
void ReleaseEncoder();
BAddonManager * fWritersManager;
BWriter * fWriter;
int32 fWriterID;
bool fFormatValid;
bool fWriterStarted;
status_t fInitStatus;
// gobble gobble
uint32 _reservedBMediaWriter_[32];
virtual status_t _ReservedBMediaWriter_0(int 32 arg, ...);
virtual status_t _ReservedBMediaWriter_1(int 32 arg, ...);
// ....
}
|
|
|