Files
haiku-beta6/src/add-ons/media/plugins/ffmpeg/EncoderTable.cpp
T
Adrien Destugues 37daf9367a 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!
2014-10-18 18:27:29 +02:00

297 lines
4.4 KiB
C++

/*
* Copyright 2009-2010 Stephan Aßmus <[email protected]>
* All rights reserved. Distributed under the terms of the MIT license.
*/
#include "EncoderTable.h"
const EncoderDescription gEncoderTable[] = {
// Video codecs
{
{
"MPEG-4 video",
"mpeg4",
0,
CODEC_ID_MPEG4,
{ 0 }
},
B_ANY_FORMAT_FAMILY, // TODO: Hm, actually not really /any/ family...
B_MEDIA_RAW_VIDEO,
B_MEDIA_ENCODED_VIDEO,
23
},
{
{
"MPEG-1 video",
"mpeg1video",
0,
CODEC_ID_MPEG1VIDEO,
{ 0 }
},
B_MPEG_FORMAT_FAMILY,
B_MEDIA_RAW_VIDEO,
B_MEDIA_ENCODED_VIDEO,
10
},
{
{
"MPEG-2 video",
"mpeg2video",
0,
CODEC_ID_MPEG2VIDEO,
{ 0 }
},
B_MPEG_FORMAT_FAMILY,
B_MEDIA_RAW_VIDEO,
B_MEDIA_ENCODED_VIDEO,
15
},
{
{
"Theora video",
"theora",
0,
CODEC_ID_THEORA,
{ 0 }
},
B_ANY_FORMAT_FAMILY,
B_MEDIA_RAW_VIDEO,
B_MEDIA_ENCODED_VIDEO,
18
},
{
{
"DV (Digital Video)",
"dvvideo",
0,
CODEC_ID_DVVIDEO,
{ 0 }
},
B_MISC_FORMAT_FAMILY,
B_MEDIA_RAW_VIDEO,
B_MEDIA_ENCODED_VIDEO,
5
},
{
{
"MJPEG (Motion JPEG)",
"mjpeg",
0,
CODEC_ID_MJPEG,
{ 0 }
},
B_ANY_FORMAT_FAMILY,
B_MEDIA_RAW_VIDEO,
B_MEDIA_ENCODED_VIDEO,
5
},
// Audio codecs
{
{
"Free Lossless Audio Codec (FLAC)",
"flac",
0,
CODEC_ID_FLAC,
{ 0 }
},
B_ANY_FORMAT_FAMILY,
B_MEDIA_RAW_AUDIO,
B_MEDIA_ENCODED_AUDIO,
10
},
// All of those crash ffmpeg in one way or another...
#if 0
{
{
"Advanced Audio Coding (AAC)",
"aac",
0,
CODEC_ID_AAC,
{ 0 }
},
B_ANY_FORMAT_FAMILY,
B_MEDIA_RAW_AUDIO,
B_MEDIA_ENCODED_AUDIO,
10
},
{
{
"Dolby AC-3",
"ac3",
0,
CODEC_ID_AC3,
{ 0 }
},
B_ANY_FORMAT_FAMILY,
B_MEDIA_RAW_AUDIO,
B_MEDIA_ENCODED_AUDIO,
10
},
{
{
"Apple Lossless Audio Codec",
"alac",
0,
CODEC_ID_ALAC,
{ 0 }
},
B_ANY_FORMAT_FAMILY,
B_MEDIA_RAW_AUDIO,
B_MEDIA_ENCODED_AUDIO,
10
},
{
{
"Adaptive Transform Acoustic Coding",
"atrac",
0,
CODEC_ID_ATRAC3,
{ 0 }
},
B_ANY_FORMAT_FAMILY,
B_MEDIA_RAW_AUDIO,
B_MEDIA_ENCODED_AUDIO,
10
},
{
{
"MPEG Layer III (MP3)",
"mp3",
0,
CODEC_ID_MP3,
{ 0 }
},
B_ANY_FORMAT_FAMILY,
B_MEDIA_RAW_AUDIO,
B_MEDIA_ENCODED_AUDIO,
10
},
{
{
"Monkey's Audio",
"ape",
0,
CODEC_ID_APE,
{ 0 }
},
B_ANY_FORMAT_FAMILY,
B_MEDIA_RAW_AUDIO,
B_MEDIA_ENCODED_AUDIO,
10
},
{
{
"Musepack",
"mpc",
0,
CODEC_ID_MUSEPACK8,
{ 0 }
},
B_ANY_FORMAT_FAMILY,
B_MEDIA_RAW_AUDIO,
B_MEDIA_ENCODED_AUDIO,
10
},
{
{
"Windows Media Audio (WMA)",
"wma",
0,
CODEC_ID_WMAV2,
{ 0 }
},
B_ANY_FORMAT_FAMILY,
B_MEDIA_RAW_AUDIO,
B_MEDIA_ENCODED_AUDIO,
10
},
{
{
"Raw audio",
"pcm",
0,
0,
{ 0 }
},
B_ANY_FORMAT_FAMILY,
B_MEDIA_RAW_AUDIO,
B_MEDIA_ENCODED_AUDIO,
1
},
{
{
"Dolby Digital (AC-3)",
"ac3",
0,
CODEC_ID_AC3,
{ 0 }
},
B_ANY_FORMAT_FAMILY,
B_MEDIA_RAW_AUDIO,
B_MEDIA_ENCODED_AUDIO,
10
},
{
{
"Vorbis audio",
"vorbis",
0,
CODEC_ID_VORBIS,
{ 0 }
},
B_ANY_FORMAT_FAMILY,
B_MEDIA_RAW_AUDIO,
B_MEDIA_ENCODED_AUDIO,
10
}
#endif
};
const size_t gEncoderCount = sizeof(gEncoderTable) / sizeof(EncoderDescription);
/*static*/ CodecID
raw_audio_codec_id_for(const media_format& format)
{
if (format.type != B_MEDIA_RAW_AUDIO)
return CODEC_ID_NONE;
if (format.u.raw_audio.byte_order == B_MEDIA_LITTLE_ENDIAN) {
switch (format.u.raw_audio.format) {
case media_raw_audio_format::B_AUDIO_FLOAT:
return CODEC_ID_PCM_F32LE;
case media_raw_audio_format::B_AUDIO_DOUBLE:
return CODEC_ID_PCM_F64LE;
case media_raw_audio_format::B_AUDIO_INT:
return CODEC_ID_PCM_S32LE;
case media_raw_audio_format::B_AUDIO_SHORT:
return CODEC_ID_PCM_S16LE;
case media_raw_audio_format::B_AUDIO_UCHAR:
return CODEC_ID_PCM_U8;
default:
return CODEC_ID_NONE;
}
} else {
switch (format.u.raw_audio.format) {
case media_raw_audio_format::B_AUDIO_FLOAT:
return CODEC_ID_PCM_F32BE;
case media_raw_audio_format::B_AUDIO_DOUBLE:
return CODEC_ID_PCM_F64BE;
case media_raw_audio_format::B_AUDIO_INT:
return CODEC_ID_PCM_S32BE;
case media_raw_audio_format::B_AUDIO_SHORT:
return CODEC_ID_PCM_S16BE;
case media_raw_audio_format::B_AUDIO_UCHAR:
return CODEC_ID_PCM_U8;
default:
return CODEC_ID_NONE;
}
}
}