| 
																	
																	
																		
																	
																	
																 | 
																@@ -24,6 +24,7 @@ | 
															
														
														
													
														
															
																 | 
																 | 
																 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | 
																 | 
																 | 
																 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | 
															
														
														
													
														
															
																 | 
																 | 
																 */ | 
																 | 
																 | 
																 */ | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																#include "libavcodec/bytestream.h" | 
															
														
														
													
														
															
																 | 
																 | 
																#include "libavcodec/mpeg4audio.h" | 
																 | 
																 | 
																#include "libavcodec/mpeg4audio.h" | 
															
														
														
													
														
															
																 | 
																 | 
																#include "avformat.h" | 
																 | 
																 | 
																#include "avformat.h" | 
															
														
														
													
														
															
																 | 
																 | 
																#include "flv.h" | 
																 | 
																 | 
																#include "flv.h" | 
															
														
														
													
												
													
														
															
																| 
																	
																	
																	
																		
																	
																 | 
																@@ -43,6 +44,32 @@ static int flv_probe(AVProbeData *p) | 
															
														
														
													
														
															
																 | 
																 | 
																    return 0; | 
																 | 
																 | 
																    return 0; | 
															
														
														
													
														
															
																 | 
																 | 
																} | 
																 | 
																 | 
																} | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																/** | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																 * Builds a Speex header. | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																 * This is not needed for the libavcodec libspeex decoder, but is needed for | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																 * stream copy and for decoders which require a header. | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																 */ | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																static void flv_build_speex_header(uint8_t *extradata) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																{ | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    memset(extradata, 0, 80); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    bytestream_put_buffer(&extradata, "Speex   ", 8);   // speex_string | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    bytestream_put_buffer(&extradata, "1.2rc1",   6);   // speex_version | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    extradata += 14;                                    // speex_version padding | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    bytestream_put_le32(&extradata,     1);             // speex_version_id | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    bytestream_put_le32(&extradata,    80);             // header_size | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    bytestream_put_le32(&extradata, 16000);             // rate | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    bytestream_put_le32(&extradata,     1);             // mode | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    bytestream_put_le32(&extradata,     4);             // mode_bitstream_version | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    bytestream_put_le32(&extradata,     1);             // nb_channels | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    bytestream_put_le32(&extradata,    -1);             // bitrate | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    bytestream_put_le32(&extradata,   320);             // frame_size | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                                                        // vbr = 0 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                                                        // frames_per_packet = 0 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                                                        // extra_headers = 0 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                                                        // reserved1 = 0 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                                                        // reserved2 = 0 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																} | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																static void flv_set_audio_codec(AVFormatContext *s, AVStream *astream, int flv_codecid) { | 
																 | 
																 | 
																static void flv_set_audio_codec(AVFormatContext *s, AVStream *astream, int flv_codecid) { | 
															
														
														
													
														
															
																 | 
																 | 
																    AVCodecContext *acodec = astream->codec; | 
																 | 
																 | 
																    AVCodecContext *acodec = astream->codec; | 
															
														
														
													
														
															
																 | 
																 | 
																    switch(flv_codecid) { | 
																 | 
																 | 
																    switch(flv_codecid) { | 
															
														
														
													
												
													
														
															
																| 
																	
																	
																	
																		
																	
																 | 
																@@ -62,6 +89,13 @@ static void flv_set_audio_codec(AVFormatContext *s, AVStream *astream, int flv_c | 
															
														
														
													
														
															
																 | 
																 | 
																        case FLV_CODECID_SPEEX: | 
																 | 
																 | 
																        case FLV_CODECID_SPEEX: | 
															
														
														
													
														
															
																 | 
																 | 
																            acodec->codec_id = CODEC_ID_SPEEX; | 
																 | 
																 | 
																            acodec->codec_id = CODEC_ID_SPEEX; | 
															
														
														
													
														
															
																 | 
																 | 
																            acodec->sample_rate = 16000; | 
																 | 
																 | 
																            acodec->sample_rate = 16000; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																            acodec->extradata = av_mallocz(80 + FF_INPUT_BUFFER_PADDING_SIZE); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																            if (acodec->extradata) { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                acodec->extradata_size = 80; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                flv_build_speex_header(acodec->extradata); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																            } else { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                av_log(s, AV_LOG_WARNING, "Unable to create Speex extradata\n"); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																            } | 
															
														
														
													
														
															
																 | 
																 | 
																            break; | 
																 | 
																 | 
																            break; | 
															
														
														
													
														
															
																 | 
																 | 
																        case FLV_CODECID_MP3  : acodec->codec_id = CODEC_ID_MP3      ; astream->need_parsing = AVSTREAM_PARSE_FULL; break; | 
																 | 
																 | 
																        case FLV_CODECID_MP3  : acodec->codec_id = CODEC_ID_MP3      ; astream->need_parsing = AVSTREAM_PARSE_FULL; break; | 
															
														
														
													
														
															
																 | 
																 | 
																        case FLV_CODECID_NELLYMOSER_8KHZ_MONO: | 
																 | 
																 | 
																        case FLV_CODECID_NELLYMOSER_8KHZ_MONO: | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																	
																	
																	
																 | 
																
  |