diff --git a/apps/codecs/libcook/main.c b/apps/codecs/libcook/main.c index 3557b15524..f12e586352 100644 --- a/apps/codecs/libcook/main.c +++ b/apps/codecs/libcook/main.c @@ -121,7 +121,7 @@ void close_wav(int fd, RMContext *rmctx) { int main(int argc, char *argv[]) { int fd, fd_dec; - int res, datasize,x,i; + int res, datasize,i; int nb_frames = 0; #ifdef DUMP_RAW_FRAMES char filename[15]; @@ -167,12 +167,6 @@ int main(int argc, char *argv[]) h = rmctx.sub_packet_h; cook_decode_init(&rmctx,&q); DEBUGF("nb_frames = %d\n",nb_frames); - x = 0; - if(packet_count % h) - { - packet_count += h - (packet_count % h); - rmctx.nb_packets = packet_count; - } /* change the buffer pointer to point at the first audio frame */ advance_buffer(&filebuf, rmctx.data_offset+ DATA_HEADER_SIZE); diff --git a/apps/codecs/libcook/rm.c b/apps/codecs/libcook/rm.c index b2ccfc2480..86c4378d56 100644 --- a/apps/codecs/libcook/rm.c +++ b/apps/codecs/libcook/rm.c @@ -434,6 +434,17 @@ int real_parse_header(int fd, RMContext *rmctx) skipped += 4; if (!rmctx->nb_packets && (rmctx->flags & 4)) rmctx->nb_packets = 3600 * 25; + + /*** + * nb_packets correction : + * in some samples, number of packets may not exactly form + * an integer number of scrambling units. This is corrected + * by constructing a partially filled unit out of the few + * remaining samples at the end of decoding. + ***/ + if(rmctx->nb_packets % rmctx->sub_packet_h) + rmctx->nb_packets += rmctx->sub_packet_h - (rmctx->nb_packets % rmctx->sub_packet_h); + printf(" data_nb_packets = %d\n",rmctx->nb_packets); printf(" next DATA offset = %d\n",next_data_off); header_end = 1;