History log of /haiku/src/add-ons/media/plugins/ffmpeg/EncoderTable.cpp
Revision Date Author Comments
# 334b8f3f 03-Aug-2018 Barrett17 <b.vitruvio@gmail.com>

ffmpeg: Remove obsolete code


# f97f2394 19-Feb-2016 Jérôme Duval <jerome.duval@gmail.com>

ffmpeg: update build with version 3.0.

* untested.


# c0c891c5 23-Dec-2014 Adrien Destugues <pulkomandy@gmail.com>

Move the "raw audio" format to the WAV format family.

It doesn't work well in AVI and MPEG.


# 5e0e1689 23-Dec-2014 Adrien Destugues <pulkomandy@gmail.com>

ffmpeg plugin: improve encoding format negociation

The ffmpeg encoders are restricted on which raw formats they accept
(each with different constraints). When asked to encode something, the
ffmpeg encoder now checks the codec capabilities and if the suggested
input format does not match, modifies it to something the codec can
actually handle.

Enable "experimental" codecs, as this is needed for AAC support in ffmpeg 0.10.

This allows format negociation to work properly, and as a result we can
enable several new audio formats: AAC (for MPEG family only), AC3, and
raw audio. Declare MKV as B_ANY_FORMAT_FAMILY since it is designed to be
a generic container (so it is possible to put AAC in MKV). Also remove
duplicate entries for AC3.


# 920be207 29-Oct-2014 Adrien Destugues <pulkomandy@gmail.com>

Re-enable raw audio ffmpeg output.


# 37daf936 18-Oct-2014 Adrien Destugues <pulkomandy@gmail.com>

Update ffmpeg supported encoders list

* Add FLAC, which works
* Remove raw audio, ogg and AC3, as they are crashing the current ffmpeg
version.

Now it's possible to use MediaConvert to convert to FLAC, at least. For
other formats we will need to either fix ffmpeg, or write encoders using
the respective libraries (musepack, libvorbis, ...) for each format we
want to support.

Note that there are also some problems at the reading side, so using
MediaConvert, the output will be truncated and about 2 seconds of audio
will be missing at the end of the file in several cases. When this
happens, the input file is not removed from the list. Watch out for this
and don't delete the source files until you're very sure the output is
correct!


# 6e544b05 20-Oct-2010 Stephan Aßmus <superstippi@gmx.de>

Enable the MJPEG encoder.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39034 a95241bf-73f2-0310-859d-f6bbb57e9c96


# eca9668a 15-Oct-2010 Stephan Aßmus <superstippi@gmx.de>

Enable DV format (muxer) and DV encoder. It works, but only for
certain video sizes (720x576 for example) and with 48 kHz raw
audio. Clockwerk actually uses a mechanism which worked on BeOS
to check if an encoder would accept a certain media_format, but
this does not yet work on Haiku and thus the format is available
even when trying to render later will fail.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38978 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 73e5249c 13-Sep-2010 Stephan Aßmus <superstippi@gmx.de>

* Enabled libvorbis and libtheora encoders in FFmpeg
* Enabled ogg muxer in MuxerTable.

ogg/vorbis creation successfully tested with MediaConverter.
ogg/theora needs more testing, it seems to work, but I need
to switch from the other vorbis/theora/ogg plugins to the
FFmpeg built-in support, otherwise the current theora stream
is not supported by the old plugin.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38641 a95241bf-73f2-0310-859d-f6bbb57e9c96


# eb01f516 30-Aug-2010 Stephan Aßmus <superstippi@gmx.de>

The CodecID for raw-audio actually depends on the sample format
and can't be hard-coded in the EncoderTable.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38464 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 6780c24d 05-Aug-2009 Stephan Aßmus <superstippi@gmx.de>

Encoder:
* Fleshed out the Encoder API to support parameter setters/getters and returning
a BView for configuration. (Not yet sure if this is a good idea.)

BMediaTrack:
* Implemented all but one of the unimplemented methods in BMediaTrack. It should
be working as far as that class is concerned, unless I missed some of the
vision. ReplaceFrames() remains a stub, added a comment on why it probably
stays that way.
* Release the Encoder reference in the destructor.

FFmpeg plugin:
* Refactoring to delay opening the AVCodec until encoding the first chunk,
so that we can still adjust parameters.
* Support adjusting parameters via [Set|Get]EncodeParameters(). Currently,
only quality is supported, added TODOs about supporting the bit_rate setup
versus the automatically calculated bit_rate.
* Extended EncoderDescription by a bit_rate scale. The Encoder calculates the
raw bitrate needed by the current media format, and then divides that
number by the specific codec's bit_rate_scale, while taking into account the
desired quality. This seems to work very well already (tested with MPEG4),
although a lot more parameters could be specified for libavcodec, depending
on the desired quality.
* Enabled the ogg muxer in libavformat, although it is currently still disabled
in MuxerTable.cpp, because it rejects unknown codecs. Added TODO to this
effect.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32124 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 6e567425 03-Aug-2009 Stephan Aßmus <superstippi@gmx.de>

Now supports encoded audio. Added Dolby Digital (AC-3) encoding to test this.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32105 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 3ca4a7b1 03-Aug-2009 Stephan Aßmus <superstippi@gmx.de>

Implemented audio track encoding. There is something wrong with the PTS
generation for the packets and how I set the time_base in the AVStream and
AVStream->codec structures. This results in the audio streams of the written
files to report a much too long duration.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32064 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 54897d5c 31-Jul-2009 Stephan Aßmus <superstippi@gmx.de>

* Also pass the media_codec_info to the Writer::AllocateCookie(), since that
info is not part of the media_format otherwise.
* Finished enough in the AVFormatWriter and AVCodecEncoder that we can now
actually create AVIs and MPGs and encode MPEG1, MPEG2 and MPEG4 video.
But no audio as of yet. Also, there is no bit-rate/quality setup, so it seems
libavformat is using the least possible bit-rate/quality.
* Enable some more muxers and encoders in the FFmpeg libs.
* Uses pixel format conversion from libswsscale, need to read the documentation
again, but I think it makes the plugin GPL.
* Fixed includes in libswscale/swscale.h, this is now an unmodified FFmpeg 0.5
header again (AFAICT).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32043 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 313fedac 31-Jul-2009 Stephan Aßmus <superstippi@gmx.de>

* Let the Encoders use the media_codec_info.sub_id field for their own purposes.
* Implemented some of AVCodecEncoder. Maybe video encoding already works, but
we don't know until the AVFormatWriter is more than just stubs... but I doubt
it. :-)


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32016 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 6033e52a 30-Jul-2009 Stephan Aßmus <superstippi@gmx.de>

Implemented support for get_next_encoder() variations from MediaFormats.h.
The AddOnManager in the media_server registers one encoder entry per
successful EncoderPlugin::RegisterNextEncoder(). This gives us a first idea
what media_format_family and input/output media_type is supported. The
mechanism may have to be extended, or the Encoder needs an API to specialize
a format further. In that case, the get_next_encoder() version that takes
optional _acceptedInput/OutputFormat needs to instantiate the plugin and
needs to ask the Encoder. But AFAIK, no app uses it like that anyway.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32005 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 0876f8d0 30-Jul-2009 Stephan Aßmus <superstippi@gmx.de>

Stubbed out implementation of an Encoder and EncoderPlugin. This will probably
need to work differently, such that supported media_formats come into play,
I will know soon when I implement some of the stuff from MediaFormats.h.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31994 a95241bf-73f2-0310-859d-f6bbb57e9c96


# c0c891c5b774ee75354d1de75e7b12c1ef48d742 23-Dec-2014 Adrien Destugues <pulkomandy@gmail.com>

Move the "raw audio" format to the WAV format family.

It doesn't work well in AVI and MPEG.


# 5e0e16894d67e220b4684809b154b85db4229381 23-Dec-2014 Adrien Destugues <pulkomandy@gmail.com>

ffmpeg plugin: improve encoding format negociation

The ffmpeg encoders are restricted on which raw formats they accept
(each with different constraints). When asked to encode something, the
ffmpeg encoder now checks the codec capabilities and if the suggested
input format does not match, modifies it to something the codec can
actually handle.

Enable "experimental" codecs, as this is needed for AAC support in ffmpeg 0.10.

This allows format negociation to work properly, and as a result we can
enable several new audio formats: AAC (for MPEG family only), AC3, and
raw audio. Declare MKV as B_ANY_FORMAT_FAMILY since it is designed to be
a generic container (so it is possible to put AAC in MKV). Also remove
duplicate entries for AC3.


# 920be2076f84c943fcbcf8bd63960d22b1964c4a 29-Oct-2014 Adrien Destugues <pulkomandy@gmail.com>

Re-enable raw audio ffmpeg output.


# 37daf9367a246f1e6086ee9c90cbbceaee869f68 18-Oct-2014 Adrien Destugues <pulkomandy@gmail.com>

Update ffmpeg supported encoders list

* Add FLAC, which works
* Remove raw audio, ogg and AC3, as they are crashing the current ffmpeg
version.

Now it's possible to use MediaConvert to convert to FLAC, at least. For
other formats we will need to either fix ffmpeg, or write encoders using
the respective libraries (musepack, libvorbis, ...) for each format we
want to support.

Note that there are also some problems at the reading side, so using
MediaConvert, the output will be truncated and about 2 seconds of audio
will be missing at the end of the file in several cases. When this
happens, the input file is not removed from the list. Watch out for this
and don't delete the source files until you're very sure the output is
correct!


# 6e544b050e50ca59bfc1e81cc53be841fcb211c2 20-Oct-2010 Stephan Aßmus <superstippi@gmx.de>

Enable the MJPEG encoder.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39034 a95241bf-73f2-0310-859d-f6bbb57e9c96


# eca9668a4a8697d5fe91d07caefa4c6b0310ab0d 15-Oct-2010 Stephan Aßmus <superstippi@gmx.de>

Enable DV format (muxer) and DV encoder. It works, but only for
certain video sizes (720x576 for example) and with 48 kHz raw
audio. Clockwerk actually uses a mechanism which worked on BeOS
to check if an encoder would accept a certain media_format, but
this does not yet work on Haiku and thus the format is available
even when trying to render later will fail.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38978 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 73e5249c797223236908f855d3710709d7fd85fb 13-Sep-2010 Stephan Aßmus <superstippi@gmx.de>

* Enabled libvorbis and libtheora encoders in FFmpeg
* Enabled ogg muxer in MuxerTable.

ogg/vorbis creation successfully tested with MediaConverter.
ogg/theora needs more testing, it seems to work, but I need
to switch from the other vorbis/theora/ogg plugins to the
FFmpeg built-in support, otherwise the current theora stream
is not supported by the old plugin.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38641 a95241bf-73f2-0310-859d-f6bbb57e9c96


# eb01f516a3b44adfda231e814b65ddb79fe11d64 30-Aug-2010 Stephan Aßmus <superstippi@gmx.de>

The CodecID for raw-audio actually depends on the sample format
and can't be hard-coded in the EncoderTable.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38464 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 6780c24d36ada936c1d3a1095d2ed9730ef1e0c7 05-Aug-2009 Stephan Aßmus <superstippi@gmx.de>

Encoder:
* Fleshed out the Encoder API to support parameter setters/getters and returning
a BView for configuration. (Not yet sure if this is a good idea.)

BMediaTrack:
* Implemented all but one of the unimplemented methods in BMediaTrack. It should
be working as far as that class is concerned, unless I missed some of the
vision. ReplaceFrames() remains a stub, added a comment on why it probably
stays that way.
* Release the Encoder reference in the destructor.

FFmpeg plugin:
* Refactoring to delay opening the AVCodec until encoding the first chunk,
so that we can still adjust parameters.
* Support adjusting parameters via [Set|Get]EncodeParameters(). Currently,
only quality is supported, added TODOs about supporting the bit_rate setup
versus the automatically calculated bit_rate.
* Extended EncoderDescription by a bit_rate scale. The Encoder calculates the
raw bitrate needed by the current media format, and then divides that
number by the specific codec's bit_rate_scale, while taking into account the
desired quality. This seems to work very well already (tested with MPEG4),
although a lot more parameters could be specified for libavcodec, depending
on the desired quality.
* Enabled the ogg muxer in libavformat, although it is currently still disabled
in MuxerTable.cpp, because it rejects unknown codecs. Added TODO to this
effect.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32124 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 6e567425c6a93bcaa7dc7f6c8afa8a497007d142 03-Aug-2009 Stephan Aßmus <superstippi@gmx.de>

Now supports encoded audio. Added Dolby Digital (AC-3) encoding to test this.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32105 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 3ca4a7b1beb866ba584816103f66031d22b7c003 03-Aug-2009 Stephan Aßmus <superstippi@gmx.de>

Implemented audio track encoding. There is something wrong with the PTS
generation for the packets and how I set the time_base in the AVStream and
AVStream->codec structures. This results in the audio streams of the written
files to report a much too long duration.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32064 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 54897d5c06df0e0384e0b59b23a1d926762cc078 31-Jul-2009 Stephan Aßmus <superstippi@gmx.de>

* Also pass the media_codec_info to the Writer::AllocateCookie(), since that
info is not part of the media_format otherwise.
* Finished enough in the AVFormatWriter and AVCodecEncoder that we can now
actually create AVIs and MPGs and encode MPEG1, MPEG2 and MPEG4 video.
But no audio as of yet. Also, there is no bit-rate/quality setup, so it seems
libavformat is using the least possible bit-rate/quality.
* Enable some more muxers and encoders in the FFmpeg libs.
* Uses pixel format conversion from libswsscale, need to read the documentation
again, but I think it makes the plugin GPL.
* Fixed includes in libswscale/swscale.h, this is now an unmodified FFmpeg 0.5
header again (AFAICT).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32043 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 313fedacc1eb748844a7434f6c3d900fdba5b919 31-Jul-2009 Stephan Aßmus <superstippi@gmx.de>

* Let the Encoders use the media_codec_info.sub_id field for their own purposes.
* Implemented some of AVCodecEncoder. Maybe video encoding already works, but
we don't know until the AVFormatWriter is more than just stubs... but I doubt
it. :-)


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32016 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 6033e52a8318c9f9b1a6945709fe89b0d070471b 30-Jul-2009 Stephan Aßmus <superstippi@gmx.de>

Implemented support for get_next_encoder() variations from MediaFormats.h.
The AddOnManager in the media_server registers one encoder entry per
successful EncoderPlugin::RegisterNextEncoder(). This gives us a first idea
what media_format_family and input/output media_type is supported. The
mechanism may have to be extended, or the Encoder needs an API to specialize
a format further. In that case, the get_next_encoder() version that takes
optional _acceptedInput/OutputFormat needs to instantiate the plugin and
needs to ask the Encoder. But AFAIK, no app uses it like that anyway.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32005 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 0876f8d08e7d0011c4f130bf121ba0de9e94b6e9 30-Jul-2009 Stephan Aßmus <superstippi@gmx.de>

Stubbed out implementation of an Encoder and EncoderPlugin. This will probably
need to work differently, such that supported media_formats come into play,
I will know soon when I implement some of the stuff from MediaFormats.h.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31994 a95241bf-73f2-0310-859d-f6bbb57e9c96