[Freeswitch-svn] [commit] r9173 - freeswitch/trunk/src/mod/formats/mod_shout

Freeswitch SVN anthm at freeswitch.org
Thu Jul 24 19:15:08 EDT 2008


Author: anthm
Date: Thu Jul 24 19:15:07 2008
New Revision: 9173

Modified:
   freeswitch/trunk/src/mod/formats/mod_shout/layer3.c
   freeswitch/trunk/src/mod/formats/mod_shout/mod_shout.c

Log:
omfg

Modified: freeswitch/trunk/src/mod/formats/mod_shout/layer3.c
==============================================================================
--- freeswitch/trunk/src/mod/formats/mod_shout/layer3.c	(original)
+++ freeswitch/trunk/src/mod/formats/mod_shout/layer3.c	Thu Jul 24 19:15:07 2008
@@ -985,12 +985,15 @@
 		getbits(mp, 16);		/* Dismiss stuffing Bits */
 		part2remain -= 16;
 	}
+
 	if (part2remain > 0)
 		getbits(mp, part2remain);
+#if 0
 	else if (part2remain < 0) {
 		debug_printf("mpg123: %d Can't rewind stream by %d bits!\n", -part2remain, __LINE__);
 		return 1;				/* -> error */
 	}
+#endif
 	return 0;
 }
 

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	Thu Jul 24 19:15:07 2008
@@ -66,6 +66,7 @@
 	uint8_t shout_init;
 	uint32_t prebuf;
 	int lame_ready;
+	int eof;
 };
 
 typedef struct shout_context shout_context_t;
@@ -232,11 +233,12 @@
 	size_t used;
 	size_t lp;
 	size_t rb = 0;
-
-	while (switch_buffer_inuse(context->audio_buffer) < bytes) {
+	
+	while (!context->eof && switch_buffer_inuse(context->audio_buffer) < bytes) {
 		lp = sizeof(inbuf);
 		if ((switch_file_read(context->fd, inbuf, &lp) != SWITCH_STATUS_SUCCESS) || lp == 0) {
-			goto error;
+			context->eof++;
+			goto end;
 		}
 
 		inlen = (int) lp;
@@ -253,7 +255,7 @@
 		
 		do {
 			decode_status = decodeMP3(&context->mp, in, inlen, out, outlen, &dlen);
-
+			
 			if (context->err) {
 				goto error;
 			}
@@ -274,22 +276,20 @@
 				out = context->decode_buf;
 				outlen = sizeof(context->decode_buf);
 				usedlen = 0;
+				
 				continue;
-
-			}
-
-			if (decode_status == MP3_ERR) {
+				
+			} else if (decode_status == MP3_ERR) {
 				if (++context->mp3err >= 5) {
 					switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Decoder Error!\n");
-					goto error;
+					context->eof++;
+					goto end;
 				}
-
-				dlen = 0;
 				continue;
 			}
 
 			context->mp3err = 0;
-
+			
 			usedlen += dlen;
 			out += dlen;
 			outlen -= dlen;
@@ -309,16 +309,20 @@
 		}
 	}
 
+ end:
+	
 	used = switch_buffer_inuse(context->audio_buffer);
 	
-	if (done || used >= bytes) {
-		rb = switch_buffer_read(context->audio_buffer, data, used);
+	if (context->eof || done || used >= bytes) {
+		if (!(rb = switch_buffer_read(context->audio_buffer, data, bytes))) {
+			goto error;
+		}
 		return rb;
 	}
 
 	return 0;
 
-  error:
+ error:
 	switch_mutex_lock(context->audio_mutex);
 	context->err++;
 	switch_mutex_unlock(context->audio_mutex);



More information about the Freeswitch-svn mailing list