summaryrefslogtreecommitdiff
path: root/audio/amp/files/patch-getbits.c
blob: 65a78b07e73b930ad2f8a4a628149f7943e8a5b7 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
--- getbits.c	Wed Aug 20 10:30:21 1997
+++ getbits.c	Wed Apr 13 00:21:47 2005
@@ -91,6 +91,7 @@
  */
 static inline void parse_header(struct AUDIO_HEADER *header) 
 {
+        header->IDex=_getbits(1);
         header->ID=_getbits(1);
         header->layer=_getbits(2);
         header->protection_bit=_getbits(1);
@@ -112,11 +113,17 @@
 		header->bitrate_index==15 ||
 		header->sampling_frequency==3) return -1;
 
+        /* Rule out invalid MPEG 2.5 headers */
+	if (header->IDex==0 && 
+		(header->ID==1 || header->layer!=1 || 
+		 header->bitrate_index > 8)) return -1;
+
 	/* an additional check to make shure that stuffing never gets mistaken
  	 * for a syncword. This rules out some legal layer1 streams, but who
  	 * cares about layer1 anyway :-). I must get this right sometime.
 	 */
 	if ( header->ID==1 && header->layer==3 && header->protection_bit==1) return -1;
+
 	return 0;
 }
 
@@ -132,11 +139,7 @@
 	if ((retval=_fillbfr(4))!=0) return retval;
 
 	for(;;) {
-		while ((s=_getbits(12)) != 0xfff) {
-			if (s==0xffe) {
-				parse_header(&tmp);
-				if (header_sanity_check(&tmp)==0) return GETHDR_NS;
-			}
+		while (_getbits(11) != 0x7ff) {
 			if ((retval=readsync())!=0) return retval;
 		}