* Copyright 2002-2010, Haiku, Inc. All rights reserved.
* Distributed under the terms of the MIT License.
*/
#ifndef _MEDIA_TRACK_H
#define _MEDIA_TRACK_H
#include <MediaFormats.h>
namespace BPrivate { namespace media {
class Decoder;
class Encoder;
class MediaExtractor;
class MediaWriter;
} }
class BMessage;
class BView;
class BParameterWeb;
enum media_seek_type {
B_MEDIA_SEEK_CLOSEST_FORWARD = 1,
B_MEDIA_SEEK_CLOSEST_BACKWARD = 2,
B_MEDIA_SEEK_DIRECTION_MASK = 3
};
class BMediaTrack {
protected:
virtual ~BMediaTrack();
public:
status_t InitCheck() const;
status_t GetCodecInfo(
media_codec_info* _codecInfo) const;
status_t EncodedFormat(media_format* _format) const;
status_t DecodedFormat(media_format* _format,
uint32 flags = 0);
int64 CountFrames() const;
bigtime_t Duration() const;
status_t GetMetaData(BMessage* _data) const;
int64 CurrentFrame() const;
bigtime_t CurrentTime() const;
status_t ReadFrames(void* buffer, int64* _frameCount,
media_header* header = NULL);
status_t ReadFrames(void* buffer, int64* _frameCount,
media_header* header,
media_decode_info* info);
status_t ReplaceFrames(const void* buffer,
int64* _frameCount,
const media_header* header);
status_t SeekToTime(bigtime_t* _time, int32 flags = 0);
status_t SeekToFrame(int64* _frame, int32 flags = 0);
status_t FindKeyFrameForTime(bigtime_t* _time,
int32 flags = 0) const;
status_t FindKeyFrameForFrame(int64* _frame,
int32 flags = 0) const;
status_t ReadChunk(char** _buffer, int32* _size,
media_header* _header = NULL);
status_t AddCopyright(const char* copyright);
status_t AddTrackInfo(uint32 code, const void* data,
size_t size, uint32 flags = 0);
status_t WriteFrames(const void* data, int32 frameCount,
int32 flags = 0);
status_t WriteFrames(const void* data, int64 frameCount,
media_encode_info* info);
status_t WriteChunk(const void* data, size_t size,
uint32 flags = 0);
status_t WriteChunk(const void* data, size_t size,
media_encode_info* info);
status_t Flush();
status_t GetParameterWeb(BParameterWeb** _web);
status_t GetParameterValue(int32 id, void* value,
size_t* size);
status_t SetParameterValue(int32 id, const void* value,
size_t size);
BView* GetParameterView();
status_t GetQuality(float* _quality);
status_t SetQuality(float quality);
status_t GetEncodeParameters(
encode_parameters* parameters) const;
status_t SetEncodeParameters(
encode_parameters* parameters);
virtual status_t Perform(int32 code, void* data);
private:
friend class BMediaFile;
BParameterWeb* Web();
status_t ControlCodec(int32 selector, void* _inOutData,
size_t size);
BMediaTrack(
BPrivate::media::MediaExtractor* extractor,
int32 streamIndex);
BMediaTrack(
BPrivate::media::MediaWriter* writer,
int32 streamIndex, media_format* format,
const media_codec_info* codecInfo);
void SetupWorkaround();
bool SetupFormatTranslation(
const media_format& from,
media_format* _to);
private:
status_t fInitStatus;
BPrivate::media::Decoder* fDecoder;
BPrivate::media::Decoder* fRawDecoder;
BPrivate::media::MediaExtractor* fExtractor;
int32 fStream;
int64 fCurrentFrame;
bigtime_t fCurrentTime;
media_codec_info fCodecInfo;
BPrivate::media::Encoder* fEncoder;
int32 fEncoderID;
BPrivate::media::MediaWriter* fWriter;
media_format fFormat;
uint32 fWorkaroundFlags;
protected:
int32 EncoderID() { return fEncoderID; };
private:
BMediaTrack();
BMediaTrack(const BMediaTrack&);
BMediaTrack& operator=(const BMediaTrack&);
double _FrameRate() const;
uint32 _reserved_BMediaTrack_[31];
virtual status_t _Reserved_BMediaTrack_0(int32 arg, ...);
virtual status_t _Reserved_BMediaTrack_1(int32 arg, ...);
virtual status_t _Reserved_BMediaTrack_2(int32 arg, ...);
virtual status_t _Reserved_BMediaTrack_3(int32 arg, ...);
virtual status_t _Reserved_BMediaTrack_4(int32 arg, ...);
virtual status_t _Reserved_BMediaTrack_5(int32 arg, ...);
virtual status_t _Reserved_BMediaTrack_6(int32 arg, ...);
virtual status_t _Reserved_BMediaTrack_7(int32 arg, ...);
virtual status_t _Reserved_BMediaTrack_8(int32 arg, ...);
virtual status_t _Reserved_BMediaTrack_9(int32 arg, ...);
virtual status_t _Reserved_BMediaTrack_10(int32 arg, ...);
virtual status_t _Reserved_BMediaTrack_11(int32 arg, ...);
virtual status_t _Reserved_BMediaTrack_12(int32 arg, ...);
virtual status_t _Reserved_BMediaTrack_13(int32 arg, ...);
virtual status_t _Reserved_BMediaTrack_14(int32 arg, ...);
virtual status_t _Reserved_BMediaTrack_15(int32 arg, ...);
virtual status_t _Reserved_BMediaTrack_16(int32 arg, ...);
virtual status_t _Reserved_BMediaTrack_17(int32 arg, ...);
virtual status_t _Reserved_BMediaTrack_18(int32 arg, ...);
virtual status_t _Reserved_BMediaTrack_19(int32 arg, ...);
virtual status_t _Reserved_BMediaTrack_20(int32 arg, ...);
virtual status_t _Reserved_BMediaTrack_21(int32 arg, ...);
virtual status_t _Reserved_BMediaTrack_22(int32 arg, ...);
virtual status_t _Reserved_BMediaTrack_23(int32 arg, ...);
virtual status_t _Reserved_BMediaTrack_24(int32 arg, ...);
virtual status_t _Reserved_BMediaTrack_25(int32 arg, ...);
virtual status_t _Reserved_BMediaTrack_26(int32 arg, ...);
virtual status_t _Reserved_BMediaTrack_27(int32 arg, ...);
virtual status_t _Reserved_BMediaTrack_28(int32 arg, ...);
virtual status_t _Reserved_BMediaTrack_29(int32 arg, ...);
virtual status_t _Reserved_BMediaTrack_30(int32 arg, ...);
virtual status_t _Reserved_BMediaTrack_31(int32 arg, ...);
virtual status_t _Reserved_BMediaTrack_32(int32 arg, ...);
virtual status_t _Reserved_BMediaTrack_33(int32 arg, ...);
virtual status_t _Reserved_BMediaTrack_34(int32 arg, ...);
virtual status_t _Reserved_BMediaTrack_35(int32 arg, ...);
virtual status_t _Reserved_BMediaTrack_36(int32 arg, ...);
virtual status_t _Reserved_BMediaTrack_37(int32 arg, ...);
virtual status_t _Reserved_BMediaTrack_38(int32 arg, ...);
virtual status_t _Reserved_BMediaTrack_39(int32 arg, ...);
virtual status_t _Reserved_BMediaTrack_40(int32 arg, ...);
virtual status_t _Reserved_BMediaTrack_41(int32 arg, ...);
virtual status_t _Reserved_BMediaTrack_42(int32 arg, ...);
virtual status_t _Reserved_BMediaTrack_43(int32 arg, ...);
virtual status_t _Reserved_BMediaTrack_44(int32 arg, ...);
virtual status_t _Reserved_BMediaTrack_45(int32 arg, ...);
virtual status_t _Reserved_BMediaTrack_46(int32 arg, ...);
virtual status_t _Reserved_BMediaTrack_47(int32 arg, ...);
};
#endif