1 // MediaHandler.cpp: Default MediaHandler implementation, for Gnash.
3 // Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
5 // This program is free software; you can redistribute it and/or modify
6 // it under the terms of the GNU General Public License as published by
7 // the Free Software Foundation; either version 3 of the License, or
8 // (at your option) any later version.
10 // This program is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 // GNU General Public License for more details.
15 // You should have received a copy of the GNU General Public License
16 // along with this program; if not, write to the Free Software
17 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
22 #include "gnashconfig.h"
25 #include "MediaHandler.h"
26 #include "FLVParser.h"
27 #include "IOChannel.h"
28 #include "AudioDecoderSimple.h"
32 # include "AudioDecoderSpeex.h"
39 MediaHandler::isFLV(IOChannel
& stream
) throw (IOException
)
41 char head
[4] = {0, 0, 0, 0};
43 size_t actuallyRead
= stream
.read(head
, 3);
48 throw IOException(_("MediaHandler::isFLV: Could not read 3 bytes "
49 "from input stream"));
52 if (!std::equal(head
, head
+ 3, "FLV")) return false;
56 std::auto_ptr
<MediaParser
>
57 MediaHandler::createMediaParser(std::auto_ptr
<IOChannel
> stream
)
59 std::auto_ptr
<MediaParser
> parser
;
64 log_error(_("MediaHandler::createMediaParser: only FLV input is "
65 "supported by this MediaHandler"));
69 catch (IOException
& m
) {
70 log_error(_("Exception while reading from stream: %s"), m
.what());
74 parser
.reset( new FLVParser(stream
) );
75 assert(!stream
.get()); // TODO: when ownership will be transferred...
80 std::auto_ptr
<AudioDecoder
>
81 MediaHandler::createFlashAudioDecoder(const AudioInfo
& info
)
83 assert (info
.type
== CODEC_TYPE_FLASH
);
85 audioCodecType codec
= static_cast<audioCodecType
>(info
.codec
);
88 case media::AUDIO_CODEC_ADPCM
:
89 case media::AUDIO_CODEC_RAW
:
91 std::auto_ptr
<AudioDecoder
> ret(new AudioDecoderSimple(info
));
96 case AUDIO_CODEC_SPEEX
:
98 std::auto_ptr
<AudioDecoder
> ret(new AudioDecoderSpeex
);
105 boost::format err
= boost::format(
106 _("MediaHandler::createFlashAudioDecoder:"
107 " no available flash decoders for codec %d (%s)")) %
109 throw MediaException(err
.str());
117 /// Here follows handler registration code.
119 #ifdef ENABLE_FFMPEG_MEDIA
120 #include "ffmpeg/MediaHandlerFfmpeg.h"
122 #ifdef ENABLE_GST_MEDIA
123 #include "gst/MediaHandlerGst.h"
125 #ifdef ENABLE_HAIKU_MEDIA
126 #include "haiku/MediaHandlerHaiku.h"
132 RegisterAllHandlers::RegisterAllHandlers()
134 #ifdef ENABLE_FFMPEG_MEDIA
135 static const MediaFactory::RegisterHandler
<ffmpeg::MediaHandlerFfmpeg
>
138 #ifdef ENABLE_GST_MEDIA
139 static const MediaFactory::RegisterHandler
<gst::MediaHandlerGst
> gst("gst");
141 #ifdef ENABLE_HAIKU_MEDIA
142 static const MediaFactory::RegisterHandler
<haiku::MediaHandlerHaiku
>