[commit] r9675 - freeswitch/trunk/src/mod/formats/mod_shout
Author: anthm Date: Fri Sep 26 19:14:19 2008 New Revision: 9675 Removed: freeswitch/trunk/src/mod/formats/mod_shout/common.c freeswitch/trunk/src/mod/formats/mod_shout/dct64_i386.c freeswitch/trunk/src/mod/formats/mod_shout/decode_i386.c freeswitch/trunk/src/mod/formats/mod_shout/decode_ntom.c freeswitch/trunk/src/mod/formats/mod_shout/huffman.h freeswitch/trunk/src/mod/formats/mod_shout/interface.c freeswitch/trunk/src/mod/formats/mod_shout/layer3.c freeswitch/trunk/src/mod/formats/mod_shout/mpg123.h freeswitch/trunk/src/mod/formats/mod_shout/mpglib.h freeswitch/trunk/src/mod/formats/mod_shout/tabinit.c Modified: freeswitch/trunk/src/mod/formats/mod_shout/Makefile freeswitch/trunk/src/mod/formats/mod_shout/mod_shout.c Log: break mod_shout Modified: freeswitch/trunk/src/mod/formats/mod_shout/Makefile ============================================================================== --- freeswitch/trunk/src/mod/formats/mod_shout/Makefile (original) +++ freeswitch/trunk/src/mod/formats/mod_shout/Makefile Fri Sep 26 19:14:19 2008 @@ -1,21 +1,22 @@ LAME=lame-3.97 SHOUT=libshout-2.2.2 +MPG123=mpg123 switch_srcdir=../../../.. WANT_CURL=yes LAME_DIR=$(switch_srcdir)/libs/$(LAME) SHOUT_DIR=$(switch_srcdir)/libs/$(SHOUT) +MPG123_DIR=$(switch_srcdir)/libs/$(MPG123) LAMELA=$(LAME_DIR)/libmp3lame/libmp3lame.la SHOUTLA=$(SHOUT_DIR)/src/libshout.la +MPG123LA=$(MPG123_DIR)/src/libmpg123/.libs/libmpg123.la -LOCAL_CFLAGS=-I$(SHOUT_DIR)/include -I$(LAME_DIR)/include -LOCAL_LIBADD=$(LAMELA) $(SHOUTLA) +LOCAL_CFLAGS=-I$(SHOUT_DIR)/include -I$(LAME_DIR)/include -I$(MPG123_DIR)/src +LOCAL_LIBADD=$(LAMELA) $(SHOUTLA) $(MPG123LA) -LOCAL_LDFLAGS=`cat ../../../../libs/libshout-2.2.2/Makefile | grep SPEEX_LIBS | sed -e 's|^SPEEX_LIBS =||'` -MP3SOURCES=common.c dct64_i386.c decode_ntom.c layer3.c tabinit.c interface.c -MP3OBJS=common.o dct64_i386.o decode_ntom.o layer3.o tabinit.o interface.o +LOCAL_LDFLAGS=`cat ../../../../libs/libshout-2.2.2/Makefile | grep SPEEX_LIBS | sed -e 's|^SPEEX_LIBS =||'` LOCAL_OBJS=$(MP3OBJS) LOCAL_SOURCES=$(MP3SOURCES) @@ -25,6 +26,17 @@ $(LOCAL_OBJS): $(LOCAL_SOURCES) +$(MPG123_DIR): + $(GETLIB) $(MPG123).tar.gz + +$(MPG123_DIR)/Makefile: $(MPG123_DIR) + cd $(MPG123_DIR) && ./configure $(DEFAULT_ARGS) --disable-shared + $(TOUCH_TARGET) + +$(MPG123LA): $(MPG123_DIR)/Makefile + cd $(MPG123_DIR) && $(MAKE) + $(TOUCH_TARGET) + $(LAME_DIR): $(GETLIB) $(LAME).tar.gz @@ -40,7 +52,7 @@ $(GETLIB) $(SHOUT).tar.gz $(SHOUT_DIR)/Makefile: $(SHOUT_DIR) - cd $(SHOUT_DIR) && ./configure $(DEFAULT_ARGS) --with-speex=no --without-vorbis + cd $(SHOUT_DIR) && ./configure $(DEFAULT_ARGS) --without-speex --without-vorbis --without-ogg $(TOUCH_TARGET) $(SHOUTLA): $(SHOUT_DIR)/Makefile Modified: freeswitch/trunk/src/mod/formats/mod_shout/mod_shout.c ============================================================================== --- freeswitch/trunk/src/mod/formats/mod_shout/mod_shout.c (original) +++ freeswitch/trunk/src/mod/formats/mod_shout/mod_shout.c Fri Sep 26 19:14:19 2008 @@ -30,8 +30,7 @@ * example filename: shout://user:pass@host.com/mount.mp3 * */ -#include "mpg123.h" -#include "mpglib.h" +#include "libmpg123/mpg123.h" #include <switch.h> #include <shout/shout.h> #include <lame.h> @@ -40,6 +39,7 @@ #define OUTSCALE 8192 * 2 #define MP3_SCACHE 16384 * 2 #define MP3_DCACHE 8192 *2 +#define MP3_TOOSMALL -1234 SWITCH_MODULE_LOAD_FUNCTION(mod_shout_load); SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_shout_shutdown); @@ -54,8 +54,10 @@ switch_mutex_t *audio_mutex; switch_buffer_t *audio_buffer; switch_memory_pool_t *memory_pool; - char decode_buf[MP3_DCACHE]; - struct mpstr mp; + unsigned char decode_buf[MP3_DCACHE]; + //struct mpstr mp; + switch_file_handle_t *handle; + mpg123_handle *mh; int err; int mp3err; int dlen; @@ -141,7 +143,12 @@ } } - ExitMP3(&context->mp); + + } + + if (context->mh) { + mpg123_close(context->mh); + mpg123_delete(context->mh); } } } @@ -227,24 +234,24 @@ static size_t decode_fd(shout_context_t *context, void *data, size_t bytes) { int decode_status = 0; - int dlen = 0; + size_t dlen = 0; int x = 0; - char *in; + unsigned char *in; int inlen = 0; - char *out; + unsigned char *out; int outlen; int usedlen; - char inbuf[MP3_SCACHE]; + unsigned char inbuf[MP3_SCACHE]; int done = 0; size_t used; size_t lp; size_t rb = 0; - while (!context->eof && switch_buffer_inuse(context->audio_buffer) < bytes) { + while (context->eof < 2 && switch_buffer_inuse(context->audio_buffer) < bytes) { lp = sizeof(inbuf); - if ((switch_file_read(context->fd, inbuf, &lp) != SWITCH_STATUS_SUCCESS) || lp == 0) { + if (!context->eof && ((switch_file_read(context->fd, inbuf, &lp) != SWITCH_STATUS_SUCCESS) || lp == 0)) { context->eof++; - goto end; + //goto end; } inlen = (int) lp; @@ -260,8 +267,13 @@ } do { - decode_status = decodeMP3(&context->mp, in, inlen, out, outlen, &dlen); - + if (context->eof) { + decode_status = mpg123_read(context->mh, out, outlen, &dlen); + } else { + decode_status = mpg123_decode(context->mh, in, inlen, out, outlen, &dlen); + } + + if (context->err) { goto error; } @@ -272,7 +284,11 @@ x++; } - if (decode_status == MP3_TOOSMALL) { + if (decode_status == MPG123_NEW_FORMAT) { + continue; + } else if (decode_status == MPG123_OK) { + usedlen = dlen; + break; if (context->audio_buffer) { switch_buffer_write(context->audio_buffer, context->decode_buf, usedlen); } else { @@ -285,7 +301,10 @@ continue; - } else if (decode_status == MP3_ERR) { + } else if (decode_status == MPG123_DONE) { + context->eof++; + goto end; + } else if (decode_status == MPG123_ERR || decode_status > 0) { if (++context->mp3err >= 5) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Decoder Error!\n"); context->eof++; @@ -302,7 +321,7 @@ dlen = 0; - } while (decode_status != MP3_NEED_MORE); + } while (decode_status != MPG123_NEED_MORE); if (context->audio_buffer) { switch_buffer_write(context->audio_buffer, context->decode_buf, usedlen); @@ -318,7 +337,7 @@ end: used = switch_buffer_inuse(context->audio_buffer); - + if (context->eof || done || used >= bytes) { if (!(rb = switch_buffer_read(context->audio_buffer, data, bytes))) { goto error; @@ -342,15 +361,15 @@ register unsigned int realsize = (unsigned int) (size * nmemb); shout_context_t *context = data; int decode_status = 0; - int dlen = 0; + size_t dlen = 0; int x = 0; - char *in; + unsigned char *in; int inlen; - char *out; + unsigned char *out; int outlen; int usedlen; uint32_t used, buf_size = 1024 * 64; - + in = ptr; inlen = realsize; out = context->decode_buf; @@ -387,7 +406,7 @@ error_check(); do { - decode_status = decodeMP3(&context->mp, in, inlen, out, outlen, &dlen); + decode_status = mpg123_decode(context->mh, in, inlen, out, outlen, &dlen); error_check(); @@ -409,16 +428,19 @@ usedlen = 0; switch_mutex_unlock(context->audio_mutex); - } else if (decode_status == MP3_ERR) { + } else if (decode_status == MPG123_ERR) { if (++context->mp3err >= 20) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Decoder Error!\n"); goto error; } - ExitMP3(&context->mp); - InitMP3(&context->mp, OUTSCALE, context->samplerate); - + mpg123_close(context->mh); + //InitMP3(context->mh, OUTSCALE, context->samplerate); + context->mh = mpg123_new(NULL, NULL); + mpg123_open_feed(context->mh); + mpg123_format(context->mh, context->samplerate, MPG123_MONO, 0); + return realsize; } @@ -427,7 +449,7 @@ out += dlen; outlen -= dlen; dlen = 0; - } while (decode_status != MP3_NEED_MORE); + } while (decode_status != MPG123_NEED_MORE); switch_mutex_lock(context->audio_mutex); @@ -598,6 +620,7 @@ context->memory_pool = handle->memory_pool; context->samplerate = handle->samplerate; + context->handle = handle; if (switch_test_flag(handle, SWITCH_FILE_FLAG_READ)) { if (switch_buffer_create_dynamic(&context->audio_buffer, TC_BUFFER_SIZE, TC_BUFFER_SIZE * 2, 0) != SWITCH_STATUS_SUCCESS) { @@ -606,17 +629,23 @@ } switch_mutex_init(&context->audio_mutex, SWITCH_MUTEX_NESTED, context->memory_pool); - InitMP3(&context->mp, OUTSCALE, context->samplerate); + //InitMP3(context->mh, OUTSCALE, context->samplerate); + context->mh = mpg123_new(NULL, NULL); + mpg123_open_feed(context->mh); + mpg123_param(context->mh, MPG123_FORCE_RATE, context->samplerate, 0); + + if (handle->handler) { context->stream_url = switch_core_sprintf(context->memory_pool, "http://%s", path); context->prebuf = handle->prebuf; launch_read_stream_thread(context); } else { - if (switch_file_open(&context->fd, path, SWITCH_FOPEN_READ, SWITCH_FPROT_UREAD | SWITCH_FPROT_UWRITE, handle->memory_pool) != + if (switch_file_open(&context->fd, path, SWITCH_FOPEN_READ, SWITCH_FPROT_UREAD | SWITCH_FPROT_UWRITE, handle->memory_pool) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error opening %s\n", path); goto error; } + } } else if (switch_test_flag(handle, SWITCH_FILE_FLAG_WRITE)) { if (!(context->gfp = lame_init())) { @@ -794,8 +823,11 @@ *cur_sample = fseek(context->fp, *cur_sample, whence); } - ExitMP3(&context->mp); - InitMP3(&context->mp, OUTSCALE, context->samplerate); + mpg123_close(context->mh); + //InitMP3(context->mh, OUTSCALE, context->samplerate); + context->mh = mpg123_new(NULL, NULL); + mpg123_open_feed(context->mh); + mpg123_format(context->mh, context->samplerate, MPG123_MONO, 0); switch_buffer_zero(context->audio_buffer); } else { @@ -1385,7 +1417,8 @@ //*module_interface = &shout_module_interface; shout_init(); - InitMP3Constants(); + //InitMP3Constants(); + mpg123_init(); SWITCH_ADD_API(shout_api_interface, "telecast", "telecast", telecast_api_function, TELECAST_SYNTAX);
participants (1)
-
Freeswitch SVN