haiku/headers/os/media/MediaEncoder.h

92 lines
3.1 KiB
C++

#ifndef MEDIAENCODER_H
#define MEDIAENCODER_H
#include <MediaDefs.h>
#include <MediaFormats.h>
namespace BPrivate {
class Encoder;
class _AddonManager;
}
class BMediaEncoder {
public:
BMediaEncoder();
BMediaEncoder(const media_format *output_format);
BMediaEncoder(const media_codec_info *mci);
virtual ~BMediaEncoder();
status_t InitCheck() const;
status_t SetTo(const media_format *output_format);
status_t SetTo(const media_codec_info *mci);
status_t SetFormat(media_format *input_format,
media_format *output_format,
media_file_format *mfi = NULL);
status_t Encode(const void *buffer, int64 frame_count,
media_encode_info *info);
status_t GetEncodeParameters(encode_parameters *parameters) const;
status_t SetEncodeParameters(encode_parameters *parameters);
protected:
virtual status_t WriteChunk(const void *chunk_data, size_t chunk_len,
media_encode_info *info) = 0;
virtual status_t AddTrackInfo(uint32 code, const char *data, size_t size);
private:
// unimplemented
BMediaEncoder(const BMediaEncoder &);
BMediaEncoder & operator=(const BMediaEncoder &);
static status_t write_chunk(void *classptr, const void *chunk_data,
size_t chunk_len, media_encode_info *info);
void Init();
void ReleaseEncoder();
BPrivate::_AddonManager *fEncoderMgr;
BPrivate::Encoder *fEncoder;
int32 fEncoderID;
bool fFormatValid;
bool fEncoderStarted;
status_t fInitStatus;
/* fbc data and virtuals */
uint32 _reserved_BMediaEncoder_[32];
virtual status_t _Reserved_BMediaEncoder_0(int32 arg, ...);
virtual status_t _Reserved_BMediaEncoder_1(int32 arg, ...);
virtual status_t _Reserved_BMediaEncoder_2(int32 arg, ...);
virtual status_t _Reserved_BMediaEncoder_3(int32 arg, ...);
virtual status_t _Reserved_BMediaEncoder_4(int32 arg, ...);
virtual status_t _Reserved_BMediaEncoder_5(int32 arg, ...);
virtual status_t _Reserved_BMediaEncoder_6(int32 arg, ...);
virtual status_t _Reserved_BMediaEncoder_7(int32 arg, ...);
virtual status_t _Reserved_BMediaEncoder_8(int32 arg, ...);
virtual status_t _Reserved_BMediaEncoder_9(int32 arg, ...);
virtual status_t _Reserved_BMediaEncoder_10(int32 arg, ...);
virtual status_t _Reserved_BMediaEncoder_11(int32 arg, ...);
virtual status_t _Reserved_BMediaEncoder_12(int32 arg, ...);
virtual status_t _Reserved_BMediaEncoder_13(int32 arg, ...);
virtual status_t _Reserved_BMediaEncoder_14(int32 arg, ...);
virtual status_t _Reserved_BMediaEncoder_15(int32 arg, ...);
};
class BMediaBufferEncoder: public BMediaEncoder {
public:
BMediaBufferEncoder();
BMediaBufferEncoder(const media_format *output_format);
BMediaBufferEncoder(const media_codec_info *mci);
status_t EncodeToBuffer(void *output_buffer, size_t *output_size,
const void *input_buffer, int64 frame_count,
media_encode_info *info);
protected:
virtual status_t WriteChunk(const void *chunk_data, size_t chunk_len,
media_encode_info *info);
void *fBuffer;
int32 fBufferSize;
};
#endif