diff --git a/src/add-ons/media/plugins/ffmpeg/AVCodecEncoder.cpp b/src/add-ons/media/plugins/ffmpeg/AVCodecEncoder.cpp new file mode 100644 index 0000000000..c032899a28 --- /dev/null +++ b/src/add-ons/media/plugins/ffmpeg/AVCodecEncoder.cpp @@ -0,0 +1,81 @@ +/* + * Copyright 2009, Stephan Amßus + * All rights reserved. Distributed under the terms of the MIT license. + */ + + +#include "AVCodecEncoder.h" + +#include + + +#undef TRACE +#define TRACE_AV_CODEC_ENCODER +#ifdef TRACE_AV_CODEC_ENCODER +# define TRACE(x...) printf(x) +#else +# define TRACE(x...) +#endif + + +AVCodecEncoder::AVCodecEncoder(const char* shortName) + : + Encoder() +{ + TRACE("AVCodecEncoder::AVCodecEncoder()\n"); +} + + +AVCodecEncoder::~AVCodecEncoder() +{ + TRACE("AVCodecEncoder::~AVCodecEncoder()\n"); +} + + +status_t +AVCodecEncoder::SetFormat(const media_file_format& fileFormat, + media_format* _inOutEncodedFormat) +{ + TRACE("AVCodecEncoder::SetFormat()\n"); + + return B_NOT_SUPPORTED; +} + + +status_t +AVCodecEncoder::AddTrackInfo(uint32 code, const void* data, size_t size, + uint32 flags) +{ + TRACE("AVCodecEncoder::AddTrackInfo(%lu, %p, %ld, %lu)\n", code, data, + size, flags); + + return B_NOT_SUPPORTED; +} + + +status_t +AVCodecEncoder::GetEncodeParameters(encode_parameters* parameters) const +{ + TRACE("AVCodecEncoder::GetEncodeParameters(%p)\n", parameters); + + return B_NOT_SUPPORTED; +} + + +status_t +AVCodecEncoder::SetEncodeParameters(encode_parameters* parameters) const +{ + TRACE("AVCodecEncoder::SetEncodeParameters(%p)\n", parameters); + + return B_NOT_SUPPORTED; +} + + +status_t +AVCodecEncoder::Encode(const void* buffer, int64 frameCount, + media_encode_info* info) +{ + TRACE("AVCodecEncoder::Encode(%p, %lld, %p)\n", buffer, frameCount, info); + + return B_NOT_SUPPORTED; +} diff --git a/src/add-ons/media/plugins/ffmpeg/AVCodecEncoder.h b/src/add-ons/media/plugins/ffmpeg/AVCodecEncoder.h new file mode 100644 index 0000000000..f5a710df6a --- /dev/null +++ b/src/add-ons/media/plugins/ffmpeg/AVCodecEncoder.h @@ -0,0 +1,37 @@ +/* + * Copyright 2009, Stephan Aßmus . + * All rights reserved. Distributed under the terms of the MIT license. + */ +#ifndef AVCODEC_ENCODER_H +#define AVCODEC_ENCODER_H + + +#include + +#include "EncoderPlugin.h" + + +class AVCodecEncoder : public Encoder { +public: + AVCodecEncoder(const char* shortName); + + virtual ~AVCodecEncoder(); + + virtual status_t SetFormat(const media_file_format& fileFormat, + media_format* _inOutEncodedFormat); + + virtual status_t AddTrackInfo(uint32 code, const void* data, + size_t size, uint32 flags = 0); + + virtual status_t GetEncodeParameters( + encode_parameters* parameters) const; + virtual status_t SetEncodeParameters( + encode_parameters* parameters) const; + + virtual status_t Encode(const void* buffer, int64 frameCount, + media_encode_info* info); + +private: +}; + +#endif // AVCODEC_ENCODER_H diff --git a/src/add-ons/media/plugins/ffmpeg/EncoderTable.cpp b/src/add-ons/media/plugins/ffmpeg/EncoderTable.cpp new file mode 100644 index 0000000000..bf03bb5844 --- /dev/null +++ b/src/add-ons/media/plugins/ffmpeg/EncoderTable.cpp @@ -0,0 +1,28 @@ +/* + * Copyright 2009 Stephan Aßmus + * All rights reserved. Distributed under the terms of the MIT license. + */ + + +#include "EncoderTable.h" + + +const media_codec_info gEncoderTable[] = { + { + "MPEG2 Video", + "mpeg2video", + 0, + 0, + { 0 } + }, + { + "WAV", + "wav", + 0, + 0, + { 0 } + }, +}; + +const size_t gEncoderCount = sizeof(gEncoderTable) / sizeof(media_codec_info); + diff --git a/src/add-ons/media/plugins/ffmpeg/EncoderTable.h b/src/add-ons/media/plugins/ffmpeg/EncoderTable.h new file mode 100644 index 0000000000..476f09488d --- /dev/null +++ b/src/add-ons/media/plugins/ffmpeg/EncoderTable.h @@ -0,0 +1,16 @@ +/* + * Copyright 2009 Stephan Aßmus + * All rights reserved. Distributed under the terms of the MIT license. + */ +#ifndef ENCODER_TABLE_H +#define ENCODER_TABLE_H + + +#include + + +extern const media_codec_info gEncoderTable[]; +extern const size_t gEncoderCount; + + +#endif // ENCODER_TABLE_H diff --git a/src/add-ons/media/plugins/ffmpeg/FFmpegPlugin.cpp b/src/add-ons/media/plugins/ffmpeg/FFmpegPlugin.cpp index 09a8a16de7..a1632e5c73 100644 --- a/src/add-ons/media/plugins/ffmpeg/FFmpegPlugin.cpp +++ b/src/add-ons/media/plugins/ffmpeg/FFmpegPlugin.cpp @@ -21,9 +21,11 @@ extern "C" { } #include "AVCodecDecoder.h" +#include "AVCodecEncoder.h" #include "AVFormatReader.h" #include "AVFormatWriter.h" #include "CodecTable.h" +#include "EncoderTable.h" #include "MuxerTable.h" @@ -129,6 +131,26 @@ FFmpegPlugin::GetSupportedFileFormats(const media_file_format** _fileFormats, } +Encoder* +FFmpegPlugin::NewEncoder(const media_codec_info& codecInfo) +{ + return new(std::nothrow)AVCodecEncoder(codecInfo.short_name); +} + + +status_t +FFmpegPlugin::GetSupportedCodecs(const media_codec_info** _codecInfos, + size_t* _count) +{ + *_codecInfos = gEncoderTable; + *_count = gEncoderCount; + return B_OK; +} + + +// #pragma mark - + + MediaPlugin* instantiate_plugin() { diff --git a/src/add-ons/media/plugins/ffmpeg/FFmpegPlugin.h b/src/add-ons/media/plugins/ffmpeg/FFmpegPlugin.h index d205dbcbb0..b770f70a67 100644 --- a/src/add-ons/media/plugins/ffmpeg/FFmpegPlugin.h +++ b/src/add-ons/media/plugins/ffmpeg/FFmpegPlugin.h @@ -6,20 +6,20 @@ * * Distributed under the terms of the MIT License. */ - -//! libavcodec based decoder for Haiku - #ifndef FFMPEG_PLUGIN_H #define FFMPEG_PLUGIN_H + #include #include "DecoderPlugin.h" +#include "EncoderPlugin.h" #include "ReaderPlugin.h" #include "WriterPlugin.h" + class FFmpegPlugin : public ReaderPlugin, public DecoderPlugin, - public WriterPlugin { + public WriterPlugin, public EncoderPlugin { public: virtual Reader* NewReader(); @@ -32,6 +32,12 @@ public: const media_file_format** _fileFormats, size_t* _count); + virtual Encoder* NewEncoder( + const media_codec_info& codecInfo); + virtual status_t GetSupportedCodecs( + const media_codec_info** codecInfos, + size_t* count); + private: class GlobalInitilizer { public: diff --git a/src/add-ons/media/plugins/ffmpeg/Jamfile b/src/add-ons/media/plugins/ffmpeg/Jamfile index 38caf33f38..844f9d4d24 100644 --- a/src/add-ons/media/plugins/ffmpeg/Jamfile +++ b/src/add-ons/media/plugins/ffmpeg/Jamfile @@ -11,10 +11,12 @@ SubDirHdrs [ FDirName $(SUBDIR) libswscale ] ; Addon ffmpeg : AVCodecDecoder.cpp + AVCodecEncoder.cpp AVFormatReader.cpp AVFormatWriter.cpp CodecTable.cpp DemuxerTable.cpp + EncoderTable.cpp FFmpegPlugin.cpp MuxerTable.cpp