diff --git a/src/add-ons/media/plugins/ogg/OggSpeexFormats.h b/src/add-ons/media/plugins/ogg/OggSpeexFormats.h new file mode 100644 index 0000000000..8b826ab4de --- /dev/null +++ b/src/add-ons/media/plugins/ogg/OggSpeexFormats.h @@ -0,0 +1,45 @@ +#ifndef _OGG_SPEEX_FORMATS_H +#define _OGG_SPEEX_FORMATS_H + +#include +#include +#include + +/* + * speex descriptions/formats + */ + + +static media_format_description +speex_description() +{ + media_format_description description; + description.family = B_MISC_FORMAT_FAMILY; + description.u.misc.file_format = 'OggS'; + description.u.misc.codec = 'Spee'; + return description; +} + + +static void +init_speex_media_raw_audio_format(media_raw_audio_format * output) +{ + output->format = media_raw_audio_format::B_AUDIO_FLOAT; + output->byte_order = B_MEDIA_HOST_ENDIAN; +} + + +static media_format +speex_encoded_media_format() +{ + media_format format; + format.type = B_MEDIA_ENCODED_AUDIO; + format.user_data_type = B_CODEC_TYPE_INFO; + strncpy((char*)format.user_data, "Spee", 4); + format.u.encoded_audio.frame_size = sizeof(ogg_packet); + init_speex_media_raw_audio_format(&format.u.encoded_audio.output); + return format; +} + + +#endif _OGG_SPEEX_FORMATS_H diff --git a/src/add-ons/media/plugins/ogg/OggSpeexStream.cpp b/src/add-ons/media/plugins/ogg/OggSpeexStream.cpp index 9f073212ca..b31b359668 100644 --- a/src/add-ons/media/plugins/ogg/OggSpeexStream.cpp +++ b/src/add-ons/media/plugins/ogg/OggSpeexStream.cpp @@ -1,3 +1,4 @@ +#include "OggSpeexFormats.h" #include "OggSpeexStream.h" #include @@ -89,10 +90,7 @@ OggSpeexStream::GetStreamInfo(int64 *frameCount, bigtime_t *duration, SpeexHeader * header = (SpeexHeader *)data; // get the format for the description - media_format_description description; - description.family = B_MISC_FORMAT_FAMILY; - description.u.misc.file_format = 'OggS'; - description.u.misc.codec = 'Spee'; + media_format_description description = speex_description(); BMediaFormats formats; result = formats.InitCheck(); if (result != B_OK) { @@ -104,7 +102,8 @@ OggSpeexStream::GetStreamInfo(int64 *frameCount, bigtime_t *duration, result = formats.GetFormatFor(description, format); formats.Unlock(); if (result != B_OK) { - return result; + *format = speex_encoded_media_format(); + // ignore error, allow user to use ReadChunk interface } // fill out format from header packet diff --git a/src/add-ons/media/plugins/ogg/OggTobiasFormats.h b/src/add-ons/media/plugins/ogg/OggTobiasFormats.h new file mode 100644 index 0000000000..28fb5c3909 --- /dev/null +++ b/src/add-ons/media/plugins/ogg/OggTobiasFormats.h @@ -0,0 +1,38 @@ +#ifndef _OGG_TOBIAS_FORMATS_H +#define _OGG_TOBIAS_FORMATS_H + +#include +#include + +/* + * tobias descriptions/formats + */ + + +static media_format_description +tobias_description() +{ + media_format_description description; + description.family = B_AVI_FORMAT_FAMILY; + return description; +} + + +static void +init_tobias_media_raw_video_format(media_raw_video_format * output) +{ +} + + +static media_format +tobias_encoded_media_format() +{ + media_format format; + format.type = B_MEDIA_ENCODED_VIDEO; + format.u.encoded_audio.frame_size = sizeof(ogg_packet); + init_tobias_media_raw_video_format(&format.u.encoded_video.output); + return format; +} + + +#endif _OGG_TOBIAS_FORMATS_H diff --git a/src/add-ons/media/plugins/ogg/OggTobiasStream.cpp b/src/add-ons/media/plugins/ogg/OggTobiasStream.cpp index 8a9a7c039d..6231117b10 100644 --- a/src/add-ons/media/plugins/ogg/OggTobiasStream.cpp +++ b/src/add-ons/media/plugins/ogg/OggTobiasStream.cpp @@ -1,3 +1,4 @@ +#include "OggTobiasFormats.h" #include "OggTobiasStream.h" #include @@ -104,8 +105,7 @@ OggTobiasStream::GetStreamInfo(int64 *frameCount, bigtime_t *duration, tobias_stream_header * header = (tobias_stream_header *)data; // get the format for the description - media_format_description description; - description.family = B_AVI_FORMAT_FAMILY; + media_format_description description = tobias_description(); description.u.avi.codec = header->subtype[0] << 24 | header->subtype[1] << 16 | header->subtype[2] << 8 | header->subtype[3]; BMediaFormats formats; @@ -119,11 +119,11 @@ OggTobiasStream::GetStreamInfo(int64 *frameCount, bigtime_t *duration, result = formats.GetFormatFor(description, format); formats.Unlock(); if (result != B_OK) { - return result; + *format = tobias_encoded_media_format(); + // ignore error, allow user to use ReadChunk interface } // fill out format from header packet - format->type = B_MEDIA_ENCODED_VIDEO; format->user_data_type = B_CODEC_TYPE_INFO; strncpy((char*)format->user_data, header->subtype, 4); format->u.encoded_video.frame_size diff --git a/src/add-ons/media/plugins/ogg/OggVorbisFormats.h b/src/add-ons/media/plugins/ogg/OggVorbisFormats.h new file mode 100644 index 0000000000..88d1747f56 --- /dev/null +++ b/src/add-ons/media/plugins/ogg/OggVorbisFormats.h @@ -0,0 +1,45 @@ +#ifndef _OGG_VORBIS_FORMATS_H +#define _OGG_VORBIS_FORMATS_H + +#include +#include +#include + +/* + * vorbis descriptions/formats + */ + + +static media_format_description +vorbis_description() +{ + media_format_description description; + description.family = B_MISC_FORMAT_FAMILY; + description.u.misc.file_format = 'OggS'; + description.u.misc.codec = 'vorb'; + return description; +} + + +static void +init_vorbis_media_raw_audio_format(media_raw_audio_format * output) +{ + output->format = media_raw_audio_format::B_AUDIO_FLOAT; + output->byte_order = B_MEDIA_HOST_ENDIAN; +} + + +static media_format +vorbis_encoded_media_format() +{ + media_format format; + format.type = B_MEDIA_ENCODED_AUDIO; + format.user_data_type = B_CODEC_TYPE_INFO; + strncpy((char*)format.user_data, "vorb", 4); + format.u.encoded_audio.frame_size = sizeof(ogg_packet); + init_vorbis_media_raw_audio_format(&format.u.encoded_audio.output); + return format; +} + + +#endif _OGG_VORBIS_FORMATS_H diff --git a/src/add-ons/media/plugins/ogg/OggVorbisStream.cpp b/src/add-ons/media/plugins/ogg/OggVorbisStream.cpp index 1c4a8b22bd..406b52c974 100644 --- a/src/add-ons/media/plugins/ogg/OggVorbisStream.cpp +++ b/src/add-ons/media/plugins/ogg/OggVorbisStream.cpp @@ -1,3 +1,4 @@ +#include "OggVorbisFormats.h" #include "OggVorbisStream.h" #include @@ -132,10 +133,7 @@ OggVorbisStream::GetStreamInfo(int64 *frameCount, bigtime_t *duration, } // get the format for the description - media_format_description description; - description.family = B_MISC_FORMAT_FAMILY; - description.u.misc.file_format = 'OggS'; - description.u.misc.codec = 'vorb'; + media_format_description description = vorbis_description(); BMediaFormats formats; result = formats.InitCheck(); if (result != B_OK) { @@ -147,7 +145,8 @@ OggVorbisStream::GetStreamInfo(int64 *frameCount, bigtime_t *duration, result = formats.GetFormatFor(description, format); formats.Unlock(); if (result != B_OK) { - return result; + *format = vorbis_encoded_media_format(); + // ignore error, allow user to use ReadChunk interface } // fill out format from header packet diff --git a/src/add-ons/media/plugins/speex/Jamfile b/src/add-ons/media/plugins/speex/Jamfile index eb27bd300b..9c14646e92 100644 --- a/src/add-ons/media/plugins/speex/Jamfile +++ b/src/add-ons/media/plugins/speex/Jamfile @@ -2,6 +2,7 @@ SubDir OBOS_TOP src add-ons media plugins speex ; UsePrivateHeaders media ; +SubDirHdrs $(SUBDIR) .. ogg ; SubDirHdrs $(SUBDIR) .. ogg libogg ; SubDirHdrs $(SUBDIR) libspeex ; diff --git a/src/add-ons/media/plugins/speex/speexCodecPlugin.cpp b/src/add-ons/media/plugins/speex/speexCodecPlugin.cpp index f7e23e8e69..4ae25c048c 100644 --- a/src/add-ons/media/plugins/speex/speexCodecPlugin.cpp +++ b/src/add-ons/media/plugins/speex/speexCodecPlugin.cpp @@ -8,6 +8,7 @@ #include "ogg/ogg.h" #include "speexCodecPlugin.h" #include "speexCodecDefaults.h" +#include "OggSpeexFormats.h" #define TRACE_THIS 1 #if TRACE_THIS @@ -27,43 +28,6 @@ AudioBufferSize(media_raw_audio_format * raf, bigtime_t buffer_duration = 50000 } -/* - * speex descriptions/formats - */ - - -static media_format_description -speex_description() -{ - media_format_description description; - description.family = B_MISC_FORMAT_FAMILY; - description.u.misc.file_format = 'OggS'; - description.u.misc.codec = 'Spee'; - return description; -} - - -static void -init_speex_media_raw_audio_format(media_raw_audio_format * output) -{ - output->format = media_raw_audio_format::B_AUDIO_FLOAT; - output->byte_order = B_MEDIA_HOST_ENDIAN; -} - - -static media_format -speex_encoded_media_format() -{ - media_format format; - format.type = B_MEDIA_ENCODED_AUDIO; - format.user_data_type = B_CODEC_TYPE_INFO; - strncpy((char*)format.user_data, "Spee", 4); - format.u.encoded_audio.frame_size = sizeof(ogg_packet); - init_speex_media_raw_audio_format(&format.u.encoded_audio.output); - return format; -} - - static media_format speex_decoded_media_format() { @@ -106,8 +70,8 @@ SpeexDecoder::~SpeexDecoder() void SpeexDecoder::GetCodecInfo(media_codec_info &info) { - strncpy(info.short_name, "speex", sizeof(info.short_name)); - strncpy(info.pretty_name, "speex decoder, by Andrew Bachmann, based on libspeex", sizeof(info.pretty_name)); + strncpy(info.short_name, "speex-libspeex", sizeof(info.short_name)); + strncpy(info.pretty_name, "speex decoder [libspeex], by Andrew Bachmann", sizeof(info.pretty_name)); } diff --git a/src/add-ons/media/plugins/vorbis/Jamfile b/src/add-ons/media/plugins/vorbis/Jamfile index 00da183bf7..5107272edd 100644 --- a/src/add-ons/media/plugins/vorbis/Jamfile +++ b/src/add-ons/media/plugins/vorbis/Jamfile @@ -2,6 +2,7 @@ SubDir OBOS_TOP src add-ons media plugins vorbis ; UsePrivateHeaders media ; +SubDirHdrs $(SUBDIR) .. ogg ; SubDirHdrs $(SUBDIR) .. ogg libogg ; SubDirHdrs $(SUBDIR) libvorbis vorbis ; diff --git a/src/add-ons/media/plugins/vorbis/vorbisCodecPlugin.cpp b/src/add-ons/media/plugins/vorbis/vorbisCodecPlugin.cpp index 30f1d550f0..5df9df421d 100644 --- a/src/add-ons/media/plugins/vorbis/vorbisCodecPlugin.cpp +++ b/src/add-ons/media/plugins/vorbis/vorbisCodecPlugin.cpp @@ -6,6 +6,7 @@ #include #include #include "vorbisCodecPlugin.h" +#include "OggVorbisFormats.h" #define TRACE_THIS 1 #if TRACE_THIS @@ -25,43 +26,6 @@ AudioBufferSize(media_raw_audio_format * raf, bigtime_t buffer_duration = 50000 } -/* - * vorbis descriptions/formats - */ - - -static media_format_description -vorbis_description() -{ - media_format_description description; - description.family = B_MISC_FORMAT_FAMILY; - description.u.misc.file_format = 'OggS'; - description.u.misc.codec = 'vorb'; - return description; -} - - -static void -init_vorbis_media_raw_audio_format(media_raw_audio_format * output) -{ - output->format = media_raw_audio_format::B_AUDIO_FLOAT; - output->byte_order = B_MEDIA_HOST_ENDIAN; -} - - -static media_format -vorbis_encoded_media_format() -{ - media_format format; - format.type = B_MEDIA_ENCODED_AUDIO; - format.user_data_type = B_CODEC_TYPE_INFO; - strncpy((char*)format.user_data, "vorb", 4); - format.u.encoded_audio.frame_size = sizeof(ogg_packet); - init_vorbis_media_raw_audio_format(&format.u.encoded_audio.output); - return format; -} - - static media_format vorbis_decoded_media_format() { @@ -98,8 +62,8 @@ VorbisDecoder::~VorbisDecoder() void VorbisDecoder::GetCodecInfo(media_codec_info &info) { - strncpy(info.short_name, "vorbis", sizeof(info.short_name)); - strncpy(info.pretty_name, "vorbis decoder, by Andrew Bachmann, based on libvorbis", sizeof(info.pretty_name)); + strncpy(info.short_name, "vorbis-libvorbis", sizeof(info.short_name)); + strncpy(info.pretty_name, "vorbis decoder [libvorbis], by Andrew Bachmann", sizeof(info.pretty_name)); }