summaryrefslogtreecommitdiff
path: root/firmware/mp3data.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/mp3data.c')
-rw-r--r--firmware/mp3data.c22
1 files changed, 18 insertions, 4 deletions
diff --git a/firmware/mp3data.c b/firmware/mp3data.c
index 21f01ea19e..f38b51c8f4 100644
--- a/firmware/mp3data.c
+++ b/firmware/mp3data.c
@@ -555,9 +555,9 @@ int count_mp3_frames(int fd, int startpos, int filesize,
555 int cnt; 555 int cnt;
556 int progress_chunk = filesize / 50; /* Max is 50%, in 1% increments */ 556 int progress_chunk = filesize / 50; /* Max is 50%, in 1% increments */
557 int progress_cnt = 0; 557 int progress_cnt = 0;
558 bool is_vbr = false;
559 int last_bitrate = 0;
558 560
559 /* Nasty stuff to avoid passing the file handle around */
560
561 if(lseek(fd, startpos, SEEK_SET) < 0) 561 if(lseek(fd, startpos, SEEK_SET) < 0)
562 return -1; 562 return -1;
563 563
@@ -569,6 +569,14 @@ int count_mp3_frames(int fd, int startpos, int filesize,
569 569
570 while((header = buf_find_next_frame(fd, &bytes, -1, header))) { 570 while((header = buf_find_next_frame(fd, &bytes, -1, header))) {
571 mp3headerinfo(&info, header); 571 mp3headerinfo(&info, header);
572
573 /* See if this really is a VBR file */
574 if(last_bitrate && info.bitrate != last_bitrate)
575 {
576 is_vbr = true;
577 }
578 last_bitrate = info.bitrate;
579
572 buf_seek(fd, info.frame_size-4); 580 buf_seek(fd, info.frame_size-4);
573 num_frames++; 581 num_frames++;
574 if(progressfunc) 582 if(progressfunc)
@@ -583,8 +591,14 @@ int count_mp3_frames(int fd, int startpos, int filesize,
583 } 591 }
584 } 592 }
585 DEBUGF("Total number of frames: %d\n", num_frames); 593 DEBUGF("Total number of frames: %d\n", num_frames);
586 594
587 return num_frames; 595 if(is_vbr)
596 return num_frames;
597 else
598 {
599 DEBUGF("Not a VBR file\n");
600 return 0;
601 }
588} 602}
589 603
590int create_xing_header(int fd, int startpos, int filesize, 604int create_xing_header(int fd, int startpos, int filesize,