History log of /haiku/src/add-ons/media/plugins/ffmpeg/MuxerTable.cpp
Revision Date Author Comments
# a1d14e4d 25-Feb-2021 Zoltán Mizsei <zmizsei@extrowerk.com>

WavPack support

Change-Id: Id731621f39defd8f065b5460a9a5fb8c5b868c98
Reviewed-on: https://review.haiku-os.org/c/haiku/+/3752
Reviewed-by: Adrien Destugues <pulkomandy@gmail.com>


# 805d7a77 24-Aug-2019 Zoltán Mizsei <zmizsei@extrowerk.com>

Add various module formats to the ffmpeg plugin

Change-Id: Ibc8cd6a21edc9f94f5c7cd51227868eb8bcbab01
Reviewed-on: https://review.haiku-os.org/c/haiku/+/1736
Reviewed-by: waddlesplash <waddlesplash@gmail.com>


# 66e077c6 22-Apr-2019 Zoltán Mizsei <zmizsei@extrowerk.com>

Add MPTM to the MediaPlayer known mediatype list

Change-Id: I44140272a6cc8515f5583680cd4d182064192ca8
Reviewed-on: https://review.haiku-os.org/c/1411
Reviewed-by: waddlesplash <waddlesplash@gmail.com>


# b480a593 30-Dec-2016 Adrien Destugues <pulkomandy@pulkomandy.tk>

ffmpeg: declare support for AIFF files in the MuxerTable.

There used to be endianness problems, but they have been fixed long ago.
It is important for some legacy apps, that these are properly recognized
as B_AIFF_FORMAT_TYPE.


# e7f7c4b2 11-Nov-2015 Adrien Destugues <pulkomandy@pulkomandy.tk>

ffmpeg: add some alternate MIME types to the known demuxers

* These are the standard types used in HTML5 media, tell everyone that
we can handle them.
* A few more green items in html5test.com, no extra points since none of
the formats are mandatory however.


# 0f7e19ce 30-Aug-2015 Adrien Destugues <pulkomandy@gmail.com>

ffmpeg plugin: add support for MOD and other "tracked music"

* ffmpeg can handle these through ModPlug
* By default, ffmpoeg will not try these formats because the way to
detect them are a bit unsafe (4 bytes at a particular offset in the file
serve as an identifier). So, hint the sniffing by giving it a filename
of ".mod" to get modplug to be used. This does not affect sniffing in
the regular way for other formats.
* Add some common tracked music formats to the muxer table.
* Fix some tracing to use current (as of ffmpeg 0.10) function names and
because some variables were renamed.


# 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.


# d946ade0 09-Apr-2014 Adrien Destugues <pulkomandy@pulkomandy.tk>

ffmpeg: declare support for webm and 3gpp.

* Decoding works on the videos I tested with.
* Some videos on Youtube use these formats.


# 626d341c 28-Mar-2014 Adrien Destugues <pulkomandy@pulkomandy.tk>

ffmpeg media plugin: merge muxer and demuxer tables

* The media_file_format struct has B_READABLE and B_WRITABLE flags,
allowing us to tell which formats we support decoding and encoding
* This allows application to query for the supported decoding formats.
* Also adjust some of the MIME types to match what's actually used (eg.
in HTML5 audio).

This makes html5test.com detect which formats we declare we can decode.


# 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


# ead61989 06-Jan-2010 Stephan Aßmus <superstippi@gmx.de>

Enable Matroska container for testing purposes.


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


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

* Disabled GPL H.264 ASM code
* Enabled WAV muxer.
* Updated configure line in config.h to be closer to what it could have been
to produce the current config.h, but a lot of encoders and muxers are enabled
manually at the moment, so this line wouldn't produce the config.h as is.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32188 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


# 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


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

* Tweaked the Writer API. Basically, we need an Init() method that takes the
media_file_format as input, so that the Writer knows what kind of file is
needed.
* Also, since information about the stream format is going to be needed at the
Writer level as well, the AllocateCookie() method gets the stream
media_format.
* Fleshed out some aspects of AVFormatWriter, many TODOs are left.


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


# 6ac391b3 29-Jul-2009 Stephan Aßmus <superstippi@gmx.de>

Stubbed out Writer and WriterPlugin implementation. So far, Clockwerk shows
"AVI (Audio Video Interleave)" in the available output formats popup... :-)


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


# 0f7e19ce7ec4dfe4d0a4e0b21eb22c4392637568 30-Aug-2015 Adrien Destugues <pulkomandy@gmail.com>

ffmpeg plugin: add support for MOD and other "tracked music"

* ffmpeg can handle these through ModPlug
* By default, ffmpoeg will not try these formats because the way to
detect them are a bit unsafe (4 bytes at a particular offset in the file
serve as an identifier). So, hint the sniffing by giving it a filename
of ".mod" to get modplug to be used. This does not affect sniffing in
the regular way for other formats.
* Add some common tracked music formats to the muxer table.
* Fix some tracing to use current (as of ffmpeg 0.10) function names and
because some variables were renamed.


# 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.


# d946ade0255692fc6c014f2292d75ff34e1834fb 09-Apr-2014 Adrien Destugues <pulkomandy@pulkomandy.tk>

ffmpeg: declare support for webm and 3gpp.

* Decoding works on the videos I tested with.
* Some videos on Youtube use these formats.


# 626d341c24c92e58a4143ec615e12d20b28e2091 28-Mar-2014 Adrien Destugues <pulkomandy@pulkomandy.tk>

ffmpeg media plugin: merge muxer and demuxer tables

* The media_file_format struct has B_READABLE and B_WRITABLE flags,
allowing us to tell which formats we support decoding and encoding
* This allows application to query for the supported decoding formats.
* Also adjust some of the MIME types to match what's actually used (eg.
in HTML5 audio).

This makes html5test.com detect which formats we declare we can decode.


# 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


# ead61989722a675027cdcb10e9adce20a5a2e3d4 06-Jan-2010 Stephan Aßmus <superstippi@gmx.de>

Enable Matroska container for testing purposes.


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


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

* Disabled GPL H.264 ASM code
* Enabled WAV muxer.
* Updated configure line in config.h to be closer to what it could have been
to produce the current config.h, but a lot of encoders and muxers are enabled
manually at the moment, so this line wouldn't produce the config.h as is.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32188 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


# 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


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

* Tweaked the Writer API. Basically, we need an Init() method that takes the
media_file_format as input, so that the Writer knows what kind of file is
needed.
* Also, since information about the stream format is going to be needed at the
Writer level as well, the AllocateCookie() method gets the stream
media_format.
* Fleshed out some aspects of AVFormatWriter, many TODOs are left.


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


# 6ac391b3eaaeb2cd188ad7e47b3b9f74299857cc 29-Jul-2009 Stephan Aßmus <superstippi@gmx.de>

Stubbed out Writer and WriterPlugin implementation. So far, Clockwerk shows
"AVI (Audio Video Interleave)" in the available output formats popup... :-)


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