xref: /reactos/sdk/lib/3rdparty/libmpg123/parse.c (revision 1734f297)
1 /*
2 	parse: spawned from common; clustering around stream/frame parsing
3 
4 	copyright ?-2020 by the mpg123 project - free software under the terms of the LGPL 2.1
5 	see COPYING and AUTHORS files in distribution or http://mpg123.org
6 	initially written by Michael Hipp & Thomas Orgis
7 */
8 
9 #include "mpg123lib_intern.h"
10 
11 #include <sys/stat.h>
12 #include <fcntl.h>
13 
14 #ifndef __REACTOS__
15 #include "getbits.h"
16 #endif
17 
18 #if defined (WANT_WIN32_SOCKETS)
19 #include <winsock2.h>
20 #include <ws2tcpip.h>
21 #endif
22 
23 #ifdef __REACTOS__
24 #include "getbits.h"
25 #endif
26 
27 /* a limit for number of frames in a track; beyond that unsigned long may not be enough to hold byte addresses */
28 #ifdef HAVE_LIMITS_H
29 #include <limits.h>
30 #endif
31 #ifndef ULONG_MAX
32 /* hm, is this portable across preprocessors? */
33 #define ULONG_MAX ((unsigned long)-1)
34 #endif
35 #define TRACK_MAX_FRAMES ULONG_MAX/4/1152
36 
37 #include "mpeghead.h"
38 
39 #include "debug.h"
40 
41 #define bsbufid(fr) (fr)->bsbuf==(fr)->bsspace[0] ? 0 : ((fr)->bsbuf==fr->bsspace[1] ? 1 : ( (fr)->bsbuf==(fr)->bsspace[0]+512 ? 2 : ((fr)->bsbuf==fr->bsspace[1]+512 ? 3 : -1) ) )
42 
43 /* PARSE_GOOD and PARSE_BAD have to be 1 and 0 (TRUE and FALSE), others can vary. */
44 enum parse_codes
45 {
46 	 PARSE_MORE = MPG123_NEED_MORE
47 	,PARSE_ERR  = MPG123_ERR
48 	,PARSE_END  = 10 /* No more audio data to find. */
49 	,PARSE_GOOD = 1 /* Everything's fine. */
50 	,PARSE_BAD  = 0 /* Not fine (invalid data). */
51 	,PARSE_RESYNC = 2 /* Header not good, go into resync. */
52 	,PARSE_AGAIN  = 3 /* Really start over, throw away and read a new header, again. */
53 };
54 
55 /* bitrates for [mpeg1/2][layer] */
56 static const int tabsel_123[2][3][16] =
57 {
58 	{
59 		{0,32,64,96,128,160,192,224,256,288,320,352,384,416,448,},
60 		{0,32,48,56, 64, 80, 96,112,128,160,192,224,256,320,384,},
61 		{0,32,40,48, 56, 64, 80, 96,112,128,160,192,224,256,320,}
62 	},
63 	{
64 		{0,32,48,56,64,80,96,112,128,144,160,176,192,224,256,},
65 		{0,8,16,24,32,40,48,56,64,80,96,112,128,144,160,},
66 		{0,8,16,24,32,40,48,56,64,80,96,112,128,144,160,}
67 	}
68 };
69 
70 static const long freqs[9] = { 44100, 48000, 32000, 22050, 24000, 16000 , 11025 , 12000 , 8000 };
71 
72 static int decode_header(mpg123_handle *fr,unsigned long newhead, int *freeformat_count);
73 static int skip_junk(mpg123_handle *fr, unsigned long *newheadp, long *headcount);
74 static int do_readahead(mpg123_handle *fr, unsigned long newhead);
75 static int wetwork(mpg123_handle *fr, unsigned long *newheadp);
76 
77 /* These two are to be replaced by one function that gives all the frame parameters (for outsiders).*/
78 /* Those functions are unsafe regarding bad arguments (inside the mpg123_handle), but just returning anything would also be unsafe, the caller code has to be trusted. */
79 
80 int frame_bitrate(mpg123_handle *fr)
81 {
82 	return tabsel_123[fr->lsf][fr->lay-1][fr->bitrate_index];
83 }
84 
85 long frame_freq(mpg123_handle *fr)
86 {
87 	return freqs[fr->sampling_frequency];
88 }
89 
90 /* compiler is smart enought to inline this one or should I really do it as macro...? */
91 static int head_check(unsigned long head)
92 {
93 	if
94 	(
95 		((head & HDR_SYNC) != HDR_SYNC)
96 		||
97 		/* layer: 01,10,11 is 1,2,3; 00 is reserved */
98 		(!(HDR_LAYER_VAL(head)))
99 		||
100 		/* 1111 means bad bitrate */
101 		(HDR_BITRATE_VAL(head) == 0xf)
102 		||
103 		/* sampling freq: 11 is reserved */
104 		(HDR_SAMPLERATE_VAL(head) == 0x3)
105 		/* here used to be a mpeg 2.5 check... re-enabled 2.5 decoding due to lack of evidence that it is really not good */
106 	)
107 	{
108 		return FALSE;
109 	}
110 	/* if no check failed, the header is valid (hopefully)*/
111 	else
112 	{
113 		return TRUE;
114 	}
115 }
116 
117 /* This is moderately sized buffers. Int offset is enough. */
118 static unsigned long bit_read_long(unsigned char *buf, int *offset)
119 {
120 	unsigned long val =  /* 32 bit value */
121 		(((unsigned long) buf[*offset])   << 24)
122 	|	(((unsigned long) buf[*offset+1]) << 16)
123 	|	(((unsigned long) buf[*offset+2]) << 8)
124 	|	 ((unsigned long) buf[*offset+3]);
125 	*offset += 4;
126 	return val;
127 }
128 
129 static unsigned short bit_read_short(unsigned char *buf, int *offset)
130 {
131 	unsigned short val = /* 16 bit value */
132 		(((unsigned short) buf[*offset]  ) << 8)
133 	|	 ((unsigned short) buf[*offset+1]);
134 	*offset += 2;
135 	return val;
136 }
137 
138 static int check_lame_tag(mpg123_handle *fr)
139 {
140 	int i;
141 	unsigned long xing_flags;
142 	unsigned long long_tmp;
143 	/*
144 		going to look for Xing or Info at some position after the header
145 		                                   MPEG 1  MPEG 2/2.5 (LSF)
146 		Stereo, Joint Stereo, Dual Channel  32      17
147 		Mono                                17       9
148 	*/
149 	int lame_offset = (fr->stereo == 2)
150 	? (fr->lsf ? 17 : 32)
151 	: (fr->lsf ? 9  : 17);
152 
153 	if(fr->p.flags & MPG123_IGNORE_INFOFRAME) goto check_lame_tag_no;
154 
155 	debug("do we have lame tag?");
156 	/*
157 		Note: CRC or not, that does not matter here.
158 		But, there is any combination of Xing flags in the wild. There are headers
159 		without the search index table! I cannot assume a reasonable minimal size
160 		for the actual data, have to check if each byte of information is present.
161 		But: 4 B Info/Xing + 4 B flags is bare minimum.
162 	*/
163 	if(fr->framesize < lame_offset+8) goto check_lame_tag_no;
164 
165 	/* only search for tag when all zero before it (apart from checksum) */
166 	for(i=2; i < lame_offset; ++i) if(fr->bsbuf[i] != 0) goto check_lame_tag_no;
167 
168 	debug("possibly...");
169 	if
170 	(
171 		   (fr->bsbuf[lame_offset]   == 'I')
172 		&& (fr->bsbuf[lame_offset+1] == 'n')
173 		&& (fr->bsbuf[lame_offset+2] == 'f')
174 		&& (fr->bsbuf[lame_offset+3] == 'o')
175 	)
176 	{
177 		/* We still have to see what there is */
178 	}
179 	else if
180 	(
181 		   (fr->bsbuf[lame_offset]   == 'X')
182 		&& (fr->bsbuf[lame_offset+1] == 'i')
183 		&& (fr->bsbuf[lame_offset+2] == 'n')
184 		&& (fr->bsbuf[lame_offset+3] == 'g')
185 	)
186 	{
187 		fr->vbr = MPG123_VBR; /* Xing header means always VBR */
188 	}
189 	else goto check_lame_tag_no;
190 
191 	/* we have one of these headers... */
192 	if(VERBOSE2) fprintf(stderr, "Note: Xing/Lame/Info header detected\n");
193 	lame_offset += 4;
194 	xing_flags = bit_read_long(fr->bsbuf, &lame_offset);
195 	debug1("Xing: flags 0x%08lx", xing_flags);
196 
197 	/* From now on, I have to carefully check if the announced data is actually
198 	   there! I'm always returning 'yes', though.  */
199 	#define check_bytes_left(n) if(fr->framesize < lame_offset+n) \
200 		goto check_lame_tag_yes
201 	if(xing_flags & 1) /* total bitstream frames */
202 	{
203 		check_bytes_left(4); long_tmp = bit_read_long(fr->bsbuf, &lame_offset);
204 		if(fr->p.flags & MPG123_IGNORE_STREAMLENGTH)
205 		{
206 			if(VERBOSE3) fprintf(stderr
207 			,	"Note: Ignoring Xing frames because of MPG123_IGNORE_STREAMLENGTH\n");
208 		}
209 		else
210 		{
211 			/* Check for endless stream, but: TRACK_MAX_FRAMES sensible at all? */
212 			fr->track_frames = long_tmp > TRACK_MAX_FRAMES ? 0 : (off_t) long_tmp;
213 #ifdef GAPLESS
214 			/* All or nothing: Only if encoder delay/padding is known, we'll cut
215 			   samples for gapless. */
216 			if(fr->p.flags & MPG123_GAPLESS)
217 			frame_gapless_init(fr, fr->track_frames, 0, 0);
218 #endif
219 			if(VERBOSE3) fprintf(stderr, "Note: Xing: %lu frames\n", long_tmp);
220 		}
221 	}
222 	if(xing_flags & 0x2) /* total bitstream bytes */
223 	{
224 		check_bytes_left(4); long_tmp = bit_read_long(fr->bsbuf, &lame_offset);
225 		if(fr->p.flags & MPG123_IGNORE_STREAMLENGTH)
226 		{
227 			if(VERBOSE3) fprintf(stderr
228 			,	"Note: Ignoring Xing bytes because of MPG123_IGNORE_STREAMLENGTH\n");
229 		}
230 		else
231 		{
232 			/* The Xing bitstream length, at least as interpreted by the Lame
233 			   encoder, encompasses all data from the Xing header frame on,
234 			   ignoring leading ID3v2 data. Trailing tags (ID3v1) seem to be
235 			   included, though. */
236 			if(fr->rdat.filelen < 1)
237 			fr->rdat.filelen = (off_t) long_tmp + fr->audio_start; /* Overflow? */
238 			else
239 			{
240 				if((off_t)long_tmp != fr->rdat.filelen - fr->audio_start && NOQUIET)
241 				{ /* 1/filelen instead of 1/(filelen-start), my decision */
242 					double diff = 100.0/fr->rdat.filelen
243 					            * ( fr->rdat.filelen - fr->audio_start
244 					                - (off_t)long_tmp );
245 					if(diff < 0.) diff = -diff;
246 
247 					if(VERBOSE3) fprintf(stderr
248 					,	"Note: Xing stream size %lu differs by %f%% from determined/given file size!\n"
249 					,	long_tmp, diff);
250 
251 					if(diff > 1. && NOQUIET) fprintf(stderr
252 					,	"Warning: Xing stream size off by more than 1%%, fuzzy seeking may be even more fuzzy than by design!\n");
253 				}
254 			}
255 
256 			if(VERBOSE3) fprintf(stderr, "Note: Xing: %lu bytes\n", long_tmp);
257 		}
258 	}
259 	if(xing_flags & 0x4) /* TOC */
260 	{
261 		check_bytes_left(100);
262 		frame_fill_toc(fr, fr->bsbuf+lame_offset);
263 		lame_offset += 100;
264 	}
265 	if(xing_flags & 0x8) /* VBR quality */
266 	{
267 		check_bytes_left(4); long_tmp = bit_read_long(fr->bsbuf, &lame_offset);
268 		if(VERBOSE3) fprintf(stderr, "Note: Xing: quality = %lu\n", long_tmp);
269 	}
270 	/*
271 		Either zeros/nothing, or:
272 			0-8: LAME3.90a
273 			9: revision/VBR method
274 			10: lowpass
275 			11-18: ReplayGain
276 			19: encoder flags
277 			20: ABR
278 			21-23: encoder delays
279 	*/
280 	check_bytes_left(24); /* I'm interested in 24 B of extra info. */
281 	if(fr->bsbuf[lame_offset] != 0)
282 	{
283 		unsigned char lame_vbr;
284 		float replay_gain[2] = {0,0};
285 		float peak = 0;
286 		float gain_offset = 0; /* going to be +6 for old lame that used 83dB */
287 		char nb[10];
288 		off_t pad_in;
289 		off_t pad_out;
290 		memcpy(nb, fr->bsbuf+lame_offset, 9);
291 		nb[9] = 0;
292 		if(VERBOSE3) fprintf(stderr, "Note: Info: Encoder: %s\n", nb);
293 		if(!strncmp("LAME", nb, 4))
294 		{
295 			/* Lame versions before 3.95.1 used 83 dB reference level, later
296 			   versions 89 dB. We stick with 89 dB as being "normal", adding
297 			   6 dB. */
298 			unsigned int major, minor;
299 			char rest[6];
300 			rest[0] = 0;
301 			if(sscanf(nb+4, "%u.%u%s", &major, &minor, rest) >= 2)
302 			{
303 				debug3("LAME: %u/%u/%s", major, minor, rest);
304 				/* We cannot detect LAME 3.95 reliably (same version string as
305 				   3.95.1), so this is a blind spot. Everything < 3.95 is safe,
306 				   though. */
307 				if(major < 3 || (major == 3 && minor < 95))
308 				{
309 					gain_offset = 6;
310 					if(VERBOSE3) fprintf(stderr
311 					,	"Note: Info: Old LAME detected, using ReplayGain preamp of %f dB.\n"
312 					,	gain_offset);
313 				}
314 			}
315 			else if(VERBOSE3) fprintf(stderr
316 			,	"Note: Info: Cannot determine LAME version.\n");
317 		}
318 		lame_offset += 9; /* 9 in */
319 
320 		/* The 4 big bits are tag revision, the small bits vbr method. */
321 		lame_vbr = fr->bsbuf[lame_offset] & 15;
322 		lame_offset += 1; /* 10 in */
323 		if(VERBOSE3)
324 		{
325 			fprintf(stderr, "Note: Info: rev %u\n", fr->bsbuf[lame_offset] >> 4);
326 			fprintf(stderr, "Note: Info: vbr mode %u\n", lame_vbr);
327 		}
328 		switch(lame_vbr)
329 		{
330 			/* from rev1 proposal... not sure if all good in practice */
331 			case 1:
332 			case 8: fr->vbr = MPG123_CBR; break;
333 			case 2:
334 			case 9: fr->vbr = MPG123_ABR; break;
335 			default: fr->vbr = MPG123_VBR; /* 00==unknown is taken as VBR */
336 		}
337 		lame_offset += 1; /* 11 in, skipping lowpass filter value */
338 
339 		/* ReplayGain peak ampitude, 32 bit float -- why did I parse it as int
340 		   before??	Ah, yes, Lame seems to store it as int since some day in 2003;
341 		   I've only seen zeros anyway until now, bah! */
342 		if
343 		(
344 			   (fr->bsbuf[lame_offset]   != 0)
345 			|| (fr->bsbuf[lame_offset+1] != 0)
346 			|| (fr->bsbuf[lame_offset+2] != 0)
347 			|| (fr->bsbuf[lame_offset+3] != 0)
348 		)
349 		{
350 			debug("Wow! Is there _really_ a non-zero peak value? Now is it stored as float or int - how should I know?");
351 			/* byte*peak_bytes = (byte*) &peak;
352 			... endianess ... just copy bytes to avoid floating point operation on unaligned memory?
353 			peak_bytes[0] = ...
354 			peak = *(float*) (fr->bsbuf+lame_offset); */
355 		}
356 		if(VERBOSE3) fprintf(stderr
357 		,	"Note: Info: peak = %f (I won't use this)\n", peak);
358 		peak = 0; /* until better times arrived */
359 		lame_offset += 4; /* 15 in */
360 
361 		/* ReplayGain values - lame only writes radio mode gain...
362 		   16bit gain, 3 bits name, 3 bits originator, sign (1=-, 0=+),
363 		   dB value*10 in 9 bits (fixed point) ignore the setting if name or
364 		   originator == 000!
365 		   radio      0 0 1 0 1 1 1 0 0 1 1 1 1 1 0 1
366 		   audiophile 0 1 0 0 1 0 0 0 0 0 0 1 0 1 0 0 */
367 		for(i =0; i < 2; ++i)
368 		{
369 			unsigned char gt     =  fr->bsbuf[lame_offset] >> 5;
370 			unsigned char origin = (fr->bsbuf[lame_offset] >> 2) & 0x7;
371 			float factor         = (fr->bsbuf[lame_offset] & 0x2) ? -0.1f : 0.1f;
372 			unsigned short gain  = bit_read_short(fr->bsbuf, &lame_offset) & 0x1ff; /* 19 in (2 cycles) */
373 			if(origin == 0 || gt < 1 || gt > 2) continue;
374 
375 			--gt;
376 			replay_gain[gt] = factor * (float) gain;
377 			/* Apply gain offset for automatic origin. */
378 			if(origin == 3) replay_gain[gt] += gain_offset;
379 		}
380 		if(VERBOSE3)
381 		{
382 			fprintf(stderr, "Note: Info: Radio Gain = %03.1fdB\n"
383 			,	replay_gain[0]);
384 			fprintf(stderr, "Note: Info: Audiophile Gain = %03.1fdB\n"
385 			,	replay_gain[1]);
386 		}
387 		for(i=0; i < 2; ++i)
388 		{
389 			if(fr->rva.level[i] <= 0)
390 			{
391 				fr->rva.peak[i] = 0; /* TODO: use parsed peak? */
392 				fr->rva.gain[i] = replay_gain[i];
393 				fr->rva.level[i] = 0;
394 			}
395 		}
396 
397 		lame_offset += 1; /* 20 in, skipping encoding flags byte */
398 
399 		/* ABR rate */
400 		if(fr->vbr == MPG123_ABR)
401 		{
402 			fr->abr_rate = fr->bsbuf[lame_offset];
403 			if(VERBOSE3) fprintf(stderr, "Note: Info: ABR rate = %u\n"
404 			,	fr->abr_rate);
405 		}
406 		lame_offset += 1; /* 21 in */
407 
408 		/* Encoder delay and padding, two 12 bit values
409 		   ... lame does write them from int. */
410 		pad_in  = ( (((int) fr->bsbuf[lame_offset])   << 4)
411 		          | (((int) fr->bsbuf[lame_offset+1]) >> 4) );
412 		pad_out = ( (((int) fr->bsbuf[lame_offset+1]) << 8)
413 		          |  ((int) fr->bsbuf[lame_offset+2])       ) & 0xfff;
414 		lame_offset += 3; /* 24 in */
415 		if(VERBOSE3) fprintf(stderr, "Note: Encoder delay = %i; padding = %i\n"
416 		,	(int)pad_in, (int)pad_out);
417 		/* Store even if libmpg123 does not do gapless decoding itself. */
418 		fr->enc_delay   = (int)pad_in;
419 		fr->enc_padding = (int)pad_out;
420 		#ifdef GAPLESS
421 		if(fr->p.flags & MPG123_GAPLESS)
422 		frame_gapless_init(fr, fr->track_frames, pad_in, pad_out);
423 		#endif
424 		/* final: 24 B LAME data */
425 	}
426 
427 check_lame_tag_yes:
428 	/* switch buffer back ... */
429 	fr->bsbuf = fr->bsspace[fr->bsnum]+512;
430 	fr->bsnum = (fr->bsnum + 1) & 1;
431 	return 1;
432 check_lame_tag_no:
433 	return 0;
434 }
435 
436 /* Just tell if the header is some mono. */
437 static int header_mono(unsigned long newhead)
438 {
439 	return HDR_CHANNEL_VAL(newhead) == MPG_MD_MONO ? TRUE : FALSE;
440 }
441 
442 /* true if the two headers will work with the same decoding routines */
443 static int head_compatible(unsigned long fred, unsigned long bret)
444 {
445 	return ( (fred & HDR_CMPMASK) == (bret & HDR_CMPMASK)
446 		&&       header_mono(fred) == header_mono(bret)    );
447 }
448 
449 static void halfspeed_prepare(mpg123_handle *fr)
450 {
451 	/* save for repetition */
452 	if(fr->p.halfspeed && fr->lay == 3)
453 	{
454 		debug("halfspeed - reusing old bsbuf ");
455 		memcpy (fr->ssave, fr->bsbuf, fr->ssize);
456 	}
457 }
458 
459 /* If this returns 1, the next frame is the repetition. */
460 static int halfspeed_do(mpg123_handle *fr)
461 {
462 	/* Speed-down hack: Play it again, Sam (the frame, I mean). */
463 	if (fr->p.halfspeed)
464 	{
465 		if(fr->halfphase) /* repeat last frame */
466 		{
467 			debug("repeat!");
468 			fr->to_decode = fr->to_ignore = TRUE;
469 			--fr->halfphase;
470 			set_pointer(fr, 0, 0);
471 			if(fr->lay == 3) memcpy (fr->bsbuf, fr->ssave, fr->ssize);
472 			if(fr->error_protection) fr->crc = getbits(fr, 16); /* skip crc */
473 			return 1;
474 		}
475 		else
476 		{
477 			fr->halfphase = fr->p.halfspeed - 1;
478 		}
479 	}
480 	return 0;
481 }
482 
483 /*
484 	Temporary macro until we got this worked out.
485 	Idea is to filter out special return values that shall trigger direct jumps to end / resync / read again.
486 	Particularily, the generic ret==PARSE_BAD==0 and ret==PARSE_GOOD==1 are not affected.
487 */
488 #define JUMP_CONCLUSION(ret) \
489 { \
490 if(ret < 0){ debug1("%s", ret == MPG123_NEED_MORE ? "need more" : "read error"); goto read_frame_bad; } \
491 else if(ret == PARSE_AGAIN) goto read_again; \
492 else if(ret == PARSE_RESYNC) goto init_resync; \
493 else if(ret == PARSE_END){ ret=0; goto read_frame_bad; } \
494 }
495 
496 /*
497 	That's a big one: read the next frame. 1 is success, <= 0 is some error
498 	Special error READER_MORE means: Please feed more data and try again.
499 */
500 int read_frame(mpg123_handle *fr)
501 {
502 	/* TODO: rework this thing */
503 	int freeformat_count = 0;
504 	unsigned long newhead;
505 	off_t framepos;
506 	int ret;
507 	/* stuff that needs resetting if complete frame reading fails */
508 	int oldsize  = fr->framesize;
509 	int oldphase = fr->halfphase;
510 
511 	/* The counter for the search-first-header loop.
512 	   It is persistent outside the loop to prevent seemingly endless loops
513 	   when repeatedly headers are found that do not have valid followup headers. */
514 	long headcount = 0;
515 
516 	fr->fsizeold=fr->framesize;       /* for Layer3 */
517 
518 	if(halfspeed_do(fr) == 1) return 1;
519 
520 	/* From now on, old frame data is tainted by parsing attempts. */
521 	fr->to_decode = fr->to_ignore = FALSE;
522 
523 	if( fr->p.flags & MPG123_NO_FRANKENSTEIN &&
524 		( (fr->track_frames > 0 && fr->num >= fr->track_frames-1)
525 #ifdef GAPLESS
526 		|| (fr->gapless_frames > 0 && fr->num >= fr->gapless_frames-1)
527 #endif
528 		) )
529 	{
530 		mdebug( "stopping parsing at %"OFF_P
531 			" frames as indicated fixed track length"
532 		,	(off_p)fr->num+1 );
533 		return 0;
534 	}
535 
536 read_again:
537 	/* In case we are looping to find a valid frame, discard any buffered data before the current position.
538 	   This is essential to prevent endless looping, always going back to the beginning when feeder buffer is exhausted. */
539 	if(fr->rd->forget != NULL) fr->rd->forget(fr);
540 
541 	debug2("trying to get frame %"OFF_P" at %"OFF_P, (off_p)fr->num+1, (off_p)fr->rd->tell(fr));
542 	if((ret = fr->rd->head_read(fr,&newhead)) <= 0){ debug1("need more? (%i)", ret); goto read_frame_bad;}
543 
544 init_resync:
545 
546 #ifdef SKIP_JUNK
547 	if(!fr->firsthead && !head_check(newhead))
548 	{
549 		ret = skip_junk(fr, &newhead, &headcount);
550 		JUMP_CONCLUSION(ret);
551 	}
552 #endif
553 
554 	ret = head_check(newhead);
555 	if(ret) ret = decode_header(fr, newhead, &freeformat_count);
556 
557 	JUMP_CONCLUSION(ret); /* That only continues for ret == PARSE_BAD or PARSE_GOOD. */
558 	if(ret == PARSE_BAD)
559 	{ /* Header was not good. */
560 		ret = wetwork(fr, &newhead); /* Messy stuff, handle junk, resync ... */
561 		JUMP_CONCLUSION(ret);
562 		/* Normally, we jumped already. If for some reason everything's fine to continue, do continue. */
563 		if(ret != PARSE_GOOD) goto read_frame_bad;
564 	}
565 
566 	if(!fr->firsthead)
567 	{
568 		ret = fr->p.flags & MPG123_NO_READAHEAD
569 		?	PARSE_GOOD
570 		:	do_readahead(fr, newhead);
571 		/* readahead can fail mit NEED_MORE, in which case we must also make the just read header available again for next go */
572 		if(ret < 0) fr->rd->back_bytes(fr, 4);
573 		JUMP_CONCLUSION(ret);
574 	}
575 
576 	/* Now we should have our valid header and proceed to reading the frame. */
577 
578 	if(fr->p.flags & MPG123_NO_FRANKENSTEIN)
579 	{
580 		if(fr->firsthead && !head_compatible(fr->firsthead, newhead))
581 		{
582 			mdebug( "stopping before reading frame %"OFF_P
583 				" as its header indicates Frankenstein coming for you", (off_p)fr->num );
584 			return 0;
585 		}
586 	}
587 
588 	/* if filepos is invalid, so is framepos */
589 	framepos = fr->rd->tell(fr) - 4;
590 	/* flip/init buffer for Layer 3 */
591 	{
592 		unsigned char *newbuf = fr->bsspace[fr->bsnum]+512;
593 		/* read main data into memory */
594 		debug2("read frame body of %i at %"OFF_P, fr->framesize, framepos+4);
595 		if((ret=fr->rd->read_frame_body(fr,newbuf,fr->framesize))<0)
596 		{
597 			/* if failed: flip back */
598 			debug1("%s", ret == MPG123_NEED_MORE ? "need more" : "read error");
599 			goto read_frame_bad;
600 		}
601 		fr->bsbufold = fr->bsbuf;
602 		fr->bsbuf = newbuf;
603 	}
604 	fr->bsnum = (fr->bsnum + 1) & 1;
605 
606 	if(!fr->firsthead)
607 	{
608 		fr->firsthead = newhead; /* _now_ it's time to store it... the first real header */
609 		/* This is the first header of our current stream segment.
610 		   It is only the actual first header of the whole stream when fr->num is still below zero!
611 		   Think of resyncs where firsthead has been reset for format flexibility. */
612 		if(fr->num < 0)
613 		{
614 			fr->audio_start = framepos;
615 			/* Only check for LAME  tag at beginning of whole stream
616 			   ... when there indeed is one in between, it's the user's problem. */
617 			if(fr->lay == 3 && check_lame_tag(fr) == 1)
618 			{ /* ...in practice, Xing/LAME tags are layer 3 only. */
619 				if(fr->rd->forget != NULL) fr->rd->forget(fr);
620 
621 				fr->oldhead = 0;
622 				goto read_again;
623 			}
624 			/* now adjust volume */
625 			do_rva(fr);
626 		}
627 
628 		debug2("fr->firsthead: %08lx, audio_start: %li", fr->firsthead, (long int)fr->audio_start);
629 	}
630 
631 	set_pointer(fr, 0, 0);
632 
633 	/* Question: How bad does the floating point value get with repeated recomputation?
634 	   Also, considering that we can play the file or parts of many times. */
635 	if(++fr->mean_frames != 0)
636 	{
637 		fr->mean_framesize = ((fr->mean_frames-1)*fr->mean_framesize+compute_bpf(fr)) / fr->mean_frames ;
638 	}
639 	++fr->num; /* 0 for first frame! */
640 	debug4("Frame %"OFF_P" %08lx %i, next filepos=%"OFF_P,
641 	(off_p)fr->num, newhead, fr->framesize, (off_p)fr->rd->tell(fr));
642 	if(!(fr->state_flags & FRAME_FRANKENSTEIN) && (
643 		(fr->track_frames > 0 && fr->num >= fr->track_frames)
644 #ifdef GAPLESS
645 		|| (fr->gapless_frames > 0 && fr->num >= fr->gapless_frames)
646 #endif
647 	))
648 	{
649 		fr->state_flags |= FRAME_FRANKENSTEIN;
650 		if(NOQUIET) fprintf(stderr, "\nWarning: Encountered more data after announced end of track (frame %"OFF_P"/%"OFF_P"). Frankenstein!\n", (off_p)fr->num,
651 #ifdef GAPLESS
652 		fr->gapless_frames > 0 ? (off_p)fr->gapless_frames :
653 #endif
654 		(off_p)fr->track_frames);
655 	}
656 
657 	halfspeed_prepare(fr);
658 
659 	/* index the position */
660 	fr->input_offset = framepos;
661 #ifdef FRAME_INDEX
662 	/* Keep track of true frame positions in our frame index.
663 	   but only do so when we are sure that the frame number is accurate... */
664 	if((fr->state_flags & FRAME_ACCURATE) && FI_NEXT(fr->index, fr->num))
665 	fi_add(&fr->index, framepos);
666 #endif
667 
668 	if(fr->silent_resync > 0) --fr->silent_resync;
669 
670 	if(fr->rd->forget != NULL) fr->rd->forget(fr);
671 
672 	fr->to_decode = fr->to_ignore = TRUE;
673 	if(fr->error_protection) fr->crc = getbits(fr, 16); /* skip crc */
674 
675 	/*
676 		Let's check for header change after deciding that the new one is good
677 		and actually having read a frame.
678 
679 		header_change > 1: decoder structure has to be updated
680 		Preserve header_change value from previous runs if it is serious.
681 		If we still have a big change pending, it should be dealt with outside,
682 		fr->header_change set to zero afterwards.
683 	*/
684 	if(fr->header_change < 2)
685 	{
686 		fr->header_change = 2; /* output format change is possible... */
687 		if(fr->oldhead)        /* check a following header for change */
688 		{
689 			if(fr->oldhead == newhead) fr->header_change = 0;
690 			else
691 			/* Headers that match in this test behave the same for the outside world.
692 			   namely: same decoding routines, same amount of decoded data. */
693 			if(head_compatible(fr->oldhead, newhead))
694 			fr->header_change = 1;
695 			else
696 			{
697 				fr->state_flags |= FRAME_FRANKENSTEIN;
698 				if(NOQUIET)
699 				fprintf(stderr, "\nWarning: Big change (MPEG version, layer, rate). Frankenstein stream?\n");
700 			}
701 		}
702 		else if(fr->firsthead && !head_compatible(fr->firsthead, newhead))
703 		{
704 			fr->state_flags |= FRAME_FRANKENSTEIN;
705 			if(NOQUIET)
706 			fprintf(stderr, "\nWarning: Big change from first (MPEG version, layer, rate). Frankenstein stream?\n");
707 		}
708 	}
709 
710 	fr->oldhead = newhead;
711 
712 	return 1;
713 read_frame_bad:
714 	/* Also if we searched for valid data in vein, we can forget skipped data.
715 	   Otherwise, the feeder would hold every dead old byte in memory until the first valid frame! */
716 	if(fr->rd->forget != NULL) fr->rd->forget(fr);
717 
718 	fr->silent_resync = 0;
719 	if(fr->err == MPG123_OK) fr->err = MPG123_ERR_READER;
720 	fr->framesize = oldsize;
721 	fr->halfphase = oldphase;
722 	/* That return code might be inherited from some feeder action, or reader error. */
723 	return ret;
724 }
725 
726 
727 /*
728  * read ahead and find the next MPEG header, to guess framesize
729  * return value: success code
730  *  PARSE_GOOD: found a valid frame size (stored in the handle).
731  * <0: error codes, possibly from feeder buffer (NEED_MORE)
732  *  PARSE_BAD: cannot get the framesize for some reason and shall silentry try the next possible header (if this is no free format stream after all...)
733  */
734 static int guess_freeformat_framesize(mpg123_handle *fr, unsigned long oldhead)
735 {
736 	long i;
737 	int ret;
738 	unsigned long head;
739 	if(!(fr->rdat.flags & (READER_SEEKABLE|READER_BUFFERED)))
740 	{
741 		if(NOQUIET) error("Cannot look for freeformat frame size with non-seekable and non-buffered stream!");
742 
743 		return PARSE_BAD;
744 	}
745 	if((ret=fr->rd->head_read(fr,&head))<=0)
746 	return ret;
747 
748 	/* We are already 4 bytes into it */
749 	for(i=4;i<MAXFRAMESIZE+4;i++)
750 	{
751 		if((ret=fr->rd->head_shift(fr,&head))<=0) return ret;
752 
753 		/* No head_check needed, the mask contains all relevant bits. */
754 		if((head & HDR_SAMEMASK) == (oldhead & HDR_SAMEMASK))
755 		{
756 			fr->rd->back_bytes(fr,i+1);
757 			fr->framesize = i-3;
758 			return PARSE_GOOD; /* Success! */
759 		}
760 	}
761 	fr->rd->back_bytes(fr,i);
762 	return PARSE_BAD;
763 }
764 
765 
766 /*
767  * decode a header and write the information
768  * into the frame structure
769  * Return values are compatible with those of read_frame, namely:
770  *  1: success
771  *  0: no valid header
772  * <0: some error
773  * You are required to do a head_check() before calling!
774  */
775 static int decode_header(mpg123_handle *fr,unsigned long newhead, int *freeformat_count)
776 {
777 #ifdef DEBUG /* Do not waste cycles checking the header twice all the time. */
778 	if(!head_check(newhead))
779 	{
780 		error1("trying to decode obviously invalid header 0x%08lx", newhead);
781 	}
782 #endif
783 	/* For some reason, the layer and sampling freq settings used to be wrapped
784 	   in a weird conditional including MPG123_NO_RESYNC. What was I thinking?
785 	   This information has to be consistent. */
786 	fr->lay = 4 - HDR_LAYER_VAL(newhead);
787 
788 	if(HDR_VERSION_VAL(newhead) & 0x2)
789 	{
790 		fr->lsf = (HDR_VERSION_VAL(newhead) & 0x1) ? 0 : 1;
791 		fr->mpeg25 = 0;
792 		fr->sampling_frequency = HDR_SAMPLERATE_VAL(newhead) + (fr->lsf*3);
793 	}
794 	else
795 	{
796 		fr->lsf = 1;
797 		fr->mpeg25 = 1;
798 		fr->sampling_frequency = 6 + HDR_SAMPLERATE_VAL(newhead);
799 	}
800 
801 	#ifdef DEBUG
802 	/* seen a file where this varies (old lame tag without crc, track with crc) */
803 	if((HDR_CRC_VAL(newhead)^0x1) != fr->error_protection) debug("changed crc bit!");
804 	#endif
805 	fr->error_protection = HDR_CRC_VAL(newhead)^0x1;
806 	fr->bitrate_index    = HDR_BITRATE_VAL(newhead);
807 	fr->padding          = HDR_PADDING_VAL(newhead);
808 	fr->extension        = HDR_PRIVATE_VAL(newhead);
809 	fr->mode             = HDR_CHANNEL_VAL(newhead);
810 	fr->mode_ext         = HDR_CHANEX_VAL(newhead);
811 	fr->copyright        = HDR_COPYRIGHT_VAL(newhead);
812 	fr->original         = HDR_ORIGINAL_VAL(newhead);
813 	fr->emphasis         = HDR_EMPHASIS_VAL(newhead);
814 	fr->freeformat       = !(newhead & HDR_BITRATE);
815 
816 	fr->stereo = (fr->mode == MPG_MD_MONO) ? 1 : 2;
817 
818 	/* we can't use tabsel_123 for freeformat, so trying to guess framesize... */
819 	if(fr->freeformat)
820 	{
821 		/* when we first encounter the frame with freeformat, guess framesize */
822 		if(fr->freeformat_framesize < 0)
823 		{
824 			int ret;
825 			if(fr->p.flags & MPG123_NO_READAHEAD)
826 			{
827 				if(VERBOSE3)
828 					error("Got no free-format frame size and am not allowed to read ahead.");
829 				return PARSE_BAD;
830 			}
831 			*freeformat_count += 1;
832 			if(*freeformat_count > 5)
833 			{
834 				if(VERBOSE3) error("You fooled me too often. Refusing to guess free format frame size _again_.");
835 				return PARSE_BAD;
836 			}
837 			ret = guess_freeformat_framesize(fr, newhead);
838 			if(ret == PARSE_GOOD)
839 			{
840 				fr->freeformat_framesize = fr->framesize - fr->padding;
841 				if(VERBOSE2)
842 				fprintf(stderr, "Note: free format frame size %li\n", fr->freeformat_framesize);
843 			}
844 			else
845 			{
846 				if(ret == MPG123_NEED_MORE)
847 				debug("Need more data to guess free format frame size.");
848 				else if(VERBOSE3)
849 				error("Encountered free format header, but failed to guess frame size.");
850 
851 				return ret;
852 			}
853 		}
854 		/* freeformat should be CBR, so the same framesize can be used at the 2nd reading or later */
855 		else
856 		{
857 			fr->framesize = fr->freeformat_framesize + fr->padding;
858 		}
859 	}
860 
861 	switch(fr->lay)
862 	{
863 #ifndef NO_LAYER1
864 		case 1:
865 			fr->spf = 384;
866 			fr->do_layer = do_layer1;
867 			if(!fr->freeformat)
868 			{
869 				long fs = (long) tabsel_123[fr->lsf][0][fr->bitrate_index] * 12000;
870 				fs /= freqs[fr->sampling_frequency];
871 				fs = ((fs+fr->padding)<<2)-4;
872 				fr->framesize = (int)fs;
873 			}
874 		break;
875 #endif
876 #ifndef NO_LAYER2
877 		case 2:
878 			fr->spf = 1152;
879 			fr->do_layer = do_layer2;
880 			if(!fr->freeformat)
881 			{
882 				debug2("bitrate index: %i (%i)", fr->bitrate_index, tabsel_123[fr->lsf][1][fr->bitrate_index] );
883 				long fs = (long) tabsel_123[fr->lsf][1][fr->bitrate_index] * 144000;
884 				fs /= freqs[fr->sampling_frequency];
885 				fs += fr->padding - 4;
886 				fr->framesize = (int)fs;
887 			}
888 		break;
889 #endif
890 #ifndef NO_LAYER3
891 		case 3:
892 			fr->spf = fr->lsf ? 576 : 1152; /* MPEG 2.5 implies LSF.*/
893 			fr->do_layer = do_layer3;
894 			if(fr->lsf)
895 			fr->ssize = (fr->stereo == 1) ? 9 : 17;
896 			else
897 			fr->ssize = (fr->stereo == 1) ? 17 : 32;
898 
899 			if(fr->error_protection)
900 			fr->ssize += 2;
901 
902 			if(!fr->freeformat)
903 			{
904 				long fs = (long) tabsel_123[fr->lsf][2][fr->bitrate_index] * 144000;
905 				fs /= freqs[fr->sampling_frequency]<<(fr->lsf);
906 				fs += fr->padding - 4;
907 				fr->framesize = fs;
908 			}
909 			if(fr->framesize < fr->ssize)
910 			{
911 				if(NOQUIET)
912 					error2( "Frame smaller than mandatory side info (%i < %i)!"
913 					,	fr->framesize, fr->ssize );
914 				return PARSE_BAD;
915 			}
916 		break;
917 #endif
918 		default:
919 			if(NOQUIET) error1("Layer type %i not supported in this build!", fr->lay);
920 
921 			return PARSE_BAD;
922 	}
923 	if (fr->framesize > MAXFRAMESIZE)
924 	{
925 		if(NOQUIET) error1("Frame size too big: %d", fr->framesize+4-fr->padding);
926 
927 		return PARSE_BAD;
928 	}
929 	return PARSE_GOOD;
930 }
931 
932 /* Prepare for bit reading. Two stages:
933   0. Layers 1 and 2, side info for layer 3
934   1. Second call for possible bit reservoir for layer 3 part 2,3.
935      This overwrites side info needed for stage 0.
936 
937   Continuing to read bits after layer 3 side info shall fail unless
938   set_pointer() is called to refresh things.
939 */
940 void set_pointer(mpg123_handle *fr, int part2, long backstep)
941 {
942 	fr->bitindex = 0;
943 	if(fr->lay == 3)
944 	{
945 		if(part2)
946 		{
947 			fr->wordpointer = fr->bsbuf + fr->ssize - backstep;
948 			if(backstep)
949 				memcpy( fr->wordpointer, fr->bsbufold+fr->fsizeold-backstep
950 				,	backstep );
951 			fr->bits_avail = (long)(fr->framesize - fr->ssize + backstep)*8;
952 		}
953 		else
954 		{
955 			fr->wordpointer = fr->bsbuf;
956 			fr->bits_avail  = fr->ssize*8;
957 		}
958 	}
959 	else
960 	{
961 		fr->wordpointer = fr->bsbuf;
962 		fr->bits_avail  = fr->framesize*8;
963 	}
964 }
965 
966 /********************************/
967 
968 double compute_bpf(mpg123_handle *fr)
969 {
970 	return (fr->framesize > 0) ? fr->framesize + 4.0 : 1.0;
971 }
972 
973 int attribute_align_arg mpg123_spf(mpg123_handle *mh)
974 {
975 	if(mh == NULL) return MPG123_ERR;
976 
977 	return mh->firsthead ? mh->spf : MPG123_ERR;
978 }
979 
980 double attribute_align_arg mpg123_tpf(mpg123_handle *fr)
981 {
982 	static int bs[4] = { 0,384,1152,1152 };
983 	double tpf;
984 	if(fr == NULL || !fr->firsthead) return MPG123_ERR;
985 
986 	tpf = (double) bs[fr->lay];
987 	tpf /= freqs[fr->sampling_frequency] << (fr->lsf);
988 	return tpf;
989 }
990 
991 int attribute_align_arg mpg123_position(mpg123_handle *fr, off_t no, off_t buffsize,
992 	off_t  *current_frame,   off_t  *frames_left,
993 	double *current_seconds, double *seconds_left)
994 {
995 	double tpf;
996 	double dt = 0.0;
997 	off_t cur, left;
998 	double curs, lefts;
999 
1000 	if(!fr || !fr->rd) return MPG123_ERR;
1001 
1002 	no += fr->num; /* no starts out as offset */
1003 	cur = no;
1004 	tpf = mpg123_tpf(fr);
1005 	if(buffsize > 0 && fr->af.rate > 0 && fr->af.channels > 0)
1006 	{
1007 		dt = (double) buffsize / fr->af.rate / fr->af.channels;
1008 		if(fr->af.encoding & MPG123_ENC_16) dt *= 0.5;
1009 	}
1010 
1011 	left = 0;
1012 
1013 	if((fr->track_frames != 0) && (fr->track_frames >= fr->num)) left = no < fr->track_frames ? fr->track_frames - no : 0;
1014 	else
1015 	if(fr->rdat.filelen >= 0)
1016 	{
1017 		double bpf;
1018 		off_t t = fr->rd->tell(fr);
1019 		bpf = fr->mean_framesize ? fr->mean_framesize : compute_bpf(fr);
1020 		left = (off_t)((double)(fr->rdat.filelen-t)/bpf);
1021 		/* no can be different for prophetic purposes, file pointer is always associated with fr->num! */
1022 		if(fr->num != no)
1023 		{
1024 			if(fr->num > no) left += fr->num - no;
1025 			else
1026 			{
1027 				if(left >= (no - fr->num)) left -= no - fr->num;
1028 				else left = 0; /* uh, oh! */
1029 			}
1030 		}
1031 		/* I totally don't understand why we should re-estimate the given correct(?) value */
1032 		/* fr->num = (unsigned long)((double)t/bpf); */
1033 	}
1034 
1035 	/* beginning with 0 or 1?*/
1036 	curs = (double) no*tpf-dt;
1037 	lefts = (double)left*tpf+dt;
1038 #if 0
1039 	curs = curs < 0 ? 0.0 : curs;
1040 #endif
1041 	if(left < 0 || lefts < 0)
1042 	{ /* That is the case for non-seekable streams. */
1043 		left  = 0;
1044 		lefts = 0.0;
1045 	}
1046 	if(current_frame != NULL) *current_frame = cur;
1047 	if(frames_left   != NULL) *frames_left   = left;
1048 	if(current_seconds != NULL) *current_seconds = curs;
1049 	if(seconds_left    != NULL) *seconds_left   = lefts;
1050 	return MPG123_OK;
1051 }
1052 
1053 int get_songlen(mpg123_handle *fr,int no)
1054 {
1055 	double tpf;
1056 
1057 	if(!fr)
1058 		return 0;
1059 
1060 	if(no < 0) {
1061 		if(!fr->rd || fr->rdat.filelen < 0)
1062 			return 0;
1063 		no = (int) ((double) fr->rdat.filelen / compute_bpf(fr));
1064 	}
1065 
1066 	tpf = mpg123_tpf(fr);
1067 	return (int) (no*tpf);
1068 }
1069 
1070 /* first attempt of read ahead check to find the real first header; cannot believe what junk is out there! */
1071 static int do_readahead(mpg123_handle *fr, unsigned long newhead)
1072 {
1073 	unsigned long nexthead = 0;
1074 	int hd = 0;
1075 	off_t start, oret;
1076 	int ret;
1077 
1078 	if( ! (!fr->firsthead && fr->rdat.flags & (READER_SEEKABLE|READER_BUFFERED)) )
1079 	return PARSE_GOOD;
1080 
1081 	start = fr->rd->tell(fr);
1082 
1083 	debug2("doing ahead check with BPF %d at %"OFF_P, fr->framesize+4, (off_p)start);
1084 	/* step framesize bytes forward and read next possible header*/
1085 	if((oret=fr->rd->skip_bytes(fr, fr->framesize))<0)
1086 	{
1087 		if(oret==READER_ERROR && NOQUIET) error("cannot seek!");
1088 
1089 		return oret == MPG123_NEED_MORE ? PARSE_MORE : PARSE_ERR;
1090 	}
1091 
1092 	/* Read header, seek back. */
1093 	hd = fr->rd->head_read(fr,&nexthead);
1094 	if( fr->rd->back_bytes(fr, fr->rd->tell(fr)-start) < 0 )
1095 	{
1096 		if(NOQUIET) error("Cannot seek back!");
1097 
1098 		return PARSE_ERR;
1099 	}
1100 	if(hd == MPG123_NEED_MORE) return PARSE_MORE;
1101 
1102 	debug1("After fetching next header, at %"OFF_P, (off_p)fr->rd->tell(fr));
1103 	if(!hd)
1104 	{
1105 		if(NOQUIET) warning("Cannot read next header, a one-frame stream? Duh...");
1106 		return PARSE_END;
1107 	}
1108 
1109 	debug2("does next header 0x%08lx match first 0x%08lx?", nexthead, newhead);
1110 	if(!head_check(nexthead) || !head_compatible(newhead, nexthead))
1111 	{
1112 		debug("No, the header was not valid, start from beginning...");
1113 		fr->oldhead = 0; /* start over */
1114 		/* try next byte for valid header */
1115 		if((ret=fr->rd->back_bytes(fr, 3))<0)
1116 		{
1117 			if(NOQUIET) error("Cannot seek 3 bytes back!");
1118 
1119 			return PARSE_ERR;
1120 		}
1121 		return PARSE_AGAIN;
1122 	}
1123 	else return PARSE_GOOD;
1124 }
1125 
1126 static int handle_id3v2(mpg123_handle *fr, unsigned long newhead)
1127 {
1128 	int ret;
1129 	fr->oldhead = 0; /* Think about that. Used to be present only for skipping of junk, not resync-style wetwork. */
1130 	ret = parse_new_id3(fr, newhead);
1131 	if     (ret < 0) return ret;
1132 #ifndef NO_ID3V2
1133 	else if(ret > 0){ debug("got ID3v2"); fr->metaflags  |= MPG123_NEW_ID3|MPG123_ID3; }
1134 	else debug("no useful ID3v2");
1135 #endif
1136 	return PARSE_AGAIN;
1137 }
1138 
1139 static int handle_apetag(mpg123_handle *fr, unsigned long newhead)
1140 {
1141 	unsigned char apebuf[28];
1142 	unsigned long val;
1143 	int i, ret;
1144 	/* How many bytes to backpedal to get back to just after the first byte of */
1145 	/* the supposed header. */
1146 	int back_bytes = 3;
1147 	fr->oldhead = 0;
1148 
1149 	debug1("trying to read remaining APE header at %"OFF_P, (off_p)fr->rd->tell(fr));
1150 	/* Apetag headers are 32 bytes, newhead contains 4, read the rest */
1151 	if((ret=fr->rd->fullread(fr,apebuf,28)) < 0)
1152 		return ret;
1153 	back_bytes += ret;
1154 	if(ret < 28)
1155 		goto apetag_bad;
1156 
1157 	debug1("trying to parse APE header at %"OFF_P, (off_p)fr->rd->tell(fr));
1158 	/* Apetags start with "APETAGEX", "APET" is already tested. */
1159 	if(strncmp((char *)apebuf,"AGEX",4) != 0)
1160 		goto apetag_bad;
1161 
1162 	/* Version must be 2.000 / 2000 */
1163 	val = ((unsigned long)apebuf[7]<<24)
1164 	|	((unsigned long)apebuf[6]<<16)
1165 	|	((unsigned long)apebuf[5]<<8)
1166 	|	apebuf[4];
1167 	if(val != 2000)
1168 		goto apetag_bad;
1169 
1170 	/* Last 8 bytes must be 0 */
1171 	for(i=20; i<28; i++)
1172 		if(apebuf[i])
1173 			goto apetag_bad;
1174 
1175 	/* Looks good, skip the rest. */
1176 	val = ((unsigned long)apebuf[11]<<24)
1177 	|	((unsigned long)apebuf[10]<<16)
1178 	|	((unsigned long)apebuf[9]<<8)
1179 	|	apebuf[8];
1180 	debug2( "skipping %lu bytes of APE data at %"OFF_P
1181 	,	val, (off_p)fr->rd->tell(fr) );
1182 	/* If encountering EOF here, things are just at an end. */
1183 	if((ret=fr->rd->skip_bytes(fr,val)) < 0)
1184 		return ret;
1185 
1186 	return PARSE_AGAIN;
1187 
1188 apetag_bad:
1189 	debug("no proper APE tag found, seeking back");
1190 	if(fr->rd->back_bytes(fr,back_bytes) < 0 && NOQUIET)
1191 		error1("Cannot seek %d bytes back!", back_bytes);
1192 
1193 	return PARSE_AGAIN; /* Give the resync code a chance to fix things */
1194 }
1195 
1196 /* Advance a byte in stream to get next possible header and forget
1197    buffered data if possible (for feed reader). */
1198 #define FORGET_INTERVAL 1024 /* Used by callers to set forget flag each <n> bytes. */
1199 static int forget_head_shift(mpg123_handle *fr, unsigned long *newheadp, int forget)
1200 {
1201 	int ret;
1202 	if((ret=fr->rd->head_shift(fr,newheadp))<=0) return ret;
1203 	/* Try to forget buffered data as early as possible to speed up parsing where
1204 	   new data needs to be added for resync (and things would be re-parsed again
1205 	   and again because of the start from beginning after hitting end). */
1206 	if(forget && fr->rd->forget != NULL)
1207 	{
1208 		/* Ensure that the last 4 bytes stay in buffers for reading the header
1209 		   anew. */
1210 		if(!fr->rd->back_bytes(fr, 4))
1211 		{
1212 			fr->rd->forget(fr);
1213 			fr->rd->back_bytes(fr, -4);
1214 		}
1215 	}
1216 	return ret; /* No surprise here, error already triggered early return. */
1217 }
1218 
1219 /* watch out for junk/tags on beginning of stream by invalid header */
1220 static int skip_junk(mpg123_handle *fr, unsigned long *newheadp, long *headcount)
1221 {
1222 	int ret;
1223 	int freeformat_count = 0;
1224 	long limit = 65536;
1225 	unsigned long newhead = *newheadp;
1226 	unsigned int forgetcount = 0;
1227 	/* check for id3v2; first three bytes (of 4) are "ID3" */
1228 	if((newhead & (unsigned long) 0xffffff00) == (unsigned long) 0x49443300)
1229 	{
1230 		return handle_id3v2(fr, newhead);
1231 	}
1232 	else if(VERBOSE2 && fr->silent_resync == 0) fprintf(stderr,"Note: Junk at the beginning (0x%08lx)\n",newhead);
1233 
1234 	/* I even saw RIFF headers at the beginning of MPEG streams ;( */
1235 	if(newhead == ('R'<<24)+('I'<<16)+('F'<<8)+'F')
1236 	{
1237 		if(VERBOSE2 && fr->silent_resync == 0) fprintf(stderr, "Note: Looks like a RIFF header.\n");
1238 
1239 		if((ret=fr->rd->head_read(fr,&newhead))<=0) return ret;
1240 
1241 		while(newhead != ('d'<<24)+('a'<<16)+('t'<<8)+'a')
1242 		{
1243 			if(++forgetcount > FORGET_INTERVAL) forgetcount = 0;
1244 			if((ret=forget_head_shift(fr,&newhead,!forgetcount))<=0) return ret;
1245 		}
1246 		if((ret=fr->rd->head_read(fr,&newhead))<=0) return ret;
1247 
1248 		if(VERBOSE2 && fr->silent_resync == 0) fprintf(stderr,"Note: Skipped RIFF header!\n");
1249 
1250 		fr->oldhead = 0;
1251 		*newheadp = newhead;
1252 		return PARSE_AGAIN;
1253 	}
1254 
1255 	/*
1256 		Unhandled junk... just continue search for a header, stepping in single bytes through next 64K.
1257 		This is rather identical to the resync loop.
1258 	*/
1259 	debug("searching for header...");
1260 	*newheadp = 0; /* Invalidate the external value. */
1261 	ret = 0; /* We will check the value after the loop. */
1262 
1263 	/* We prepare for at least the 64K bytes as usual, unless
1264 	   user explicitly wanted more (even infinity). Never less. */
1265 	if(fr->p.resync_limit < 0 || fr->p.resync_limit > limit)
1266 	limit = fr->p.resync_limit;
1267 
1268 	do
1269 	{
1270 		++(*headcount);
1271 		if(limit >= 0 && *headcount >= limit) break;
1272 
1273 		if(++forgetcount > FORGET_INTERVAL) forgetcount = 0;
1274 		if((ret=forget_head_shift(fr, &newhead, !forgetcount))<=0) return ret;
1275 
1276 		if(head_check(newhead) && (ret=decode_header(fr, newhead, &freeformat_count))) break;
1277 	} while(1);
1278 	if(ret<0) return ret;
1279 
1280 	if(limit >= 0 && *headcount >= limit)
1281 	{
1282 		if(NOQUIET) error1("Giving up searching valid MPEG header after %li bytes of junk.", *headcount);
1283 		fr->err = MPG123_RESYNC_FAIL;
1284 		return PARSE_ERR;
1285 	}
1286 	else debug1("hopefully found one at %"OFF_P, (off_p)fr->rd->tell(fr));
1287 
1288 	/* If the new header ist good, it is already decoded. */
1289 	*newheadp = newhead;
1290 	return PARSE_GOOD;
1291 }
1292 
1293 /* The newhead is bad, so let's check if it is something special, otherwise just resync. */
1294 static int wetwork(mpg123_handle *fr, unsigned long *newheadp)
1295 {
1296 	int ret = PARSE_ERR;
1297 	unsigned long newhead = *newheadp;
1298 	*newheadp = 0;
1299 
1300 	/* Classic ID3 tags. Read, then start parsing again. */
1301 	if((newhead & 0xffffff00) == ('T'<<24)+('A'<<16)+('G'<<8))
1302 	{
1303 		fr->id3buf[0] = (unsigned char) ((newhead >> 24) & 0xff);
1304 		fr->id3buf[1] = (unsigned char) ((newhead >> 16) & 0xff);
1305 		fr->id3buf[2] = (unsigned char) ((newhead >> 8)  & 0xff);
1306 		fr->id3buf[3] = (unsigned char) ( newhead        & 0xff);
1307 
1308 		if((ret=fr->rd->fullread(fr,fr->id3buf+4,124)) < 0) return ret;
1309 
1310 		fr->metaflags  |= MPG123_NEW_ID3|MPG123_ID3;
1311 		fr->rdat.flags |= READER_ID3TAG; /* that marks id3v1 */
1312 		if(VERBOSE3) fprintf(stderr,"Note: Skipped ID3v1 tag.\n");
1313 
1314 		return PARSE_AGAIN;
1315 	}
1316 	/* This is similar to initial junk skipping code... */
1317 	/* Check for id3v2; first three bytes (of 4) are "ID3" */
1318 	if((newhead & (unsigned long) 0xffffff00) == (unsigned long) 0x49443300)
1319 	{
1320 		return handle_id3v2(fr, newhead);
1321 	}
1322 	/* Check for an apetag header */
1323 	if(newhead == ('A'<<24)+('P'<<16)+('E'<<8)+'T')
1324 	{
1325 		return handle_apetag(fr, newhead);
1326 	}
1327 	else if(NOQUIET && fr->silent_resync == 0)
1328 	{
1329 		fprintf(stderr,"Note: Illegal Audio-MPEG-Header 0x%08lx at offset %"OFF_P".\n",
1330 			newhead, (off_p)fr->rd->tell(fr)-4);
1331 	}
1332 
1333 	/* Now we got something bad at hand, try to recover. */
1334 
1335 	if(NOQUIET && (newhead & 0xffffff00) == ('b'<<24)+('m'<<16)+('p'<<8)) fprintf(stderr,"Note: Could be a BMP album art.\n");
1336 
1337 	if( !(fr->p.flags & MPG123_NO_RESYNC) )
1338 	{
1339 		long try = 0;
1340 		long limit = fr->p.resync_limit;
1341 		unsigned int forgetcount = 0;
1342 
1343 		/* If a resync is needed the bitreservoir of previous frames is no longer valid */
1344 		fr->bitreservoir = 0;
1345 
1346 		if(NOQUIET && fr->silent_resync == 0) fprintf(stderr, "Note: Trying to resync...\n");
1347 
1348 		do /* ... shift the header with additional single bytes until be found something that could be a header. */
1349 		{
1350 			++try;
1351 			if(limit >= 0 && try >= limit) break;
1352 
1353 			if(++forgetcount > FORGET_INTERVAL) forgetcount = 0;
1354 			if((ret=forget_head_shift(fr,&newhead,!forgetcount)) <= 0)
1355 			{
1356 				*newheadp = newhead;
1357 				if(NOQUIET) fprintf (stderr, "Note: Hit end of (available) data during resync.\n");
1358 
1359 				return ret ? ret : PARSE_END;
1360 			}
1361 			if(VERBOSE3) debug3("resync try %li at %"OFF_P", got newhead 0x%08lx", try, (off_p)fr->rd->tell(fr),  newhead);
1362 		} while(!head_check(newhead));
1363 
1364 		*newheadp = newhead;
1365 		if(NOQUIET && fr->silent_resync == 0) fprintf (stderr, "Note: Skipped %li bytes in input.\n", try);
1366 
1367 		/* Now we either got something that could be a header, or we gave up. */
1368 		if(limit >= 0 && try >= limit)
1369 		{
1370 			if(NOQUIET)
1371 			error1("Giving up resync after %li bytes - your stream is not nice... (maybe increasing resync limit could help).", try);
1372 
1373 			fr->err = MPG123_RESYNC_FAIL;
1374 			return PARSE_ERR;
1375 		}
1376 		else
1377 		{
1378 			debug1("Found possibly valid header 0x%lx... unsetting oldhead to reinit stream.", newhead);
1379 			fr->oldhead = 0;
1380 			return PARSE_RESYNC;
1381 		}
1382 	}
1383 	else
1384 	{
1385 		if(NOQUIET) error("not attempting to resync...");
1386 
1387 		fr->err = MPG123_OUT_OF_SYNC;
1388 		return PARSE_ERR;
1389 	}
1390 	/* Control never goes here... we return before that. */
1391 }
1392