haiku/headers/private/media/WriterPlugin.h
Stephan Aßmus 69372b5545 * Change the signature of the Writer plugins setup methods such
that they can modify the media_format passed in. For example they
   can store information in the user_data section. I don't actually
   use this anymore, but it may come in handy again.

AVFormatWriter:
 * Adjust the AVCodecContext flags not only for video, but also
   for audio streams (as the API example does). This mechanism
   may not yet work, since the AVCodecEncoder actually uses a
   different AVCodecContext instance.
 * Use the encodeInfo->flags and specify the key frame flag
   for the AVPacket. This finally makes videos encoded on Haiku
   seekable.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39035 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-10-20 21:36:23 +00:00

77 lines
1.8 KiB
C++

#ifndef _WRITER_PLUGIN_H
#define _WRITER_PLUGIN_H
#include <MediaTrack.h>
#include "MediaPlugin.h"
namespace BPrivate { namespace media {
class PluginManager;
class Writer {
public:
Writer();
virtual ~Writer();
virtual status_t Init(const media_file_format* fileFormat) = 0;
virtual status_t SetCopyright(const char* copyright) = 0;
virtual status_t CommitHeader() = 0;
virtual status_t Flush() = 0;
virtual status_t Close() = 0;
virtual status_t AllocateCookie(void** cookie,
media_format* format,
const media_codec_info* codecInfo) = 0;
virtual status_t FreeCookie(void* cookie) = 0;
virtual status_t SetCopyright(void* cookie,
const char* copyright) = 0;
virtual status_t AddTrackInfo(void* cookie, uint32 code,
const void* data, size_t size,
uint32 flags = 0) = 0;
virtual status_t WriteChunk(void* cookie,
const void* chunkBuffer, size_t chunkSize,
media_encode_info* encodeInfo) = 0;
BDataIO* Target() const;
virtual status_t Perform(perform_code code, void* data);
private:
virtual void _ReservedWriter1();
virtual void _ReservedWriter2();
virtual void _ReservedWriter3();
virtual void _ReservedWriter4();
virtual void _ReservedWriter5();
public: // XXX for test programs only
void Setup(BDataIO* target);
BDataIO* fTarget;
// needed for plug-in reference count management
friend class PluginManager;
MediaPlugin* fMediaPlugin;
uint32 fReserved[5];
};
class WriterPlugin : public virtual MediaPlugin {
public:
virtual Writer* NewWriter() = 0;
virtual status_t GetSupportedFileFormats(
const media_file_format** _fileFormats,
size_t* _count) = 0;
};
} } // namespace BPrivate::media
using namespace BPrivate::media;
#endif // _WRITER_PLUGIN_H