moved the initial buffering code into the big loop
Eliminating some duplicated and. This also decreases the number of lines calling processDecodeInput(). git-svn-id: https://svn.musicpd.org/mpd/trunk@7260 09075e82-0dd4-0310-85a5-a0d7c8717e4f
This commit is contained in:
		 Max Kellermann
					Max Kellermann
				
			
				
					committed by
					
						 Eric Wong
						Eric Wong
					
				
			
			
				
	
			
			
			 Eric Wong
						Eric Wong
					
				
			
						parent
						
							aaebd9ef2b
						
					
				
				
					commit
					b89b019723
				
			
							
								
								
									
										25
									
								
								src/decode.c
									
									
									
									
									
								
							
							
						
						
									
										25
									
								
								src/decode.c
									
									
									
									
									
								
							| @@ -365,6 +365,7 @@ static void decodeParent(PlayerControl * pc, DecoderControl * dc, OutputBuffer * | ||||
| { | ||||
| 	int pause = 0; | ||||
| 	int quit = 0; | ||||
| 	int buffering = 1; | ||||
| 	unsigned int bbp = buffered_before_play; | ||||
| 	/** cross fading enabled for the current song? 0=must check; | ||||
| 	    1=enabled; -1=disabled */ | ||||
| @@ -390,20 +391,6 @@ static void decodeParent(PlayerControl * pc, DecoderControl * dc, OutputBuffer * | ||||
| 	pc->play = 0; | ||||
| 	wakeup_main_task(); | ||||
|  | ||||
| 	while (availableOutputBuffer(cb) < bbp && | ||||
| 	       dc->state != DECODE_STATE_STOP) { | ||||
| 		processDecodeInput(pc, dc, cb, | ||||
| 				   &pause, &bbp, &doCrossFade, | ||||
| 				   &nextChunk, &decodeWaitedOn, &next); | ||||
| 		if (pc->stop) { | ||||
| 			dropBufferedAudio(); | ||||
| 			quitDecode(pc,dc); | ||||
| 			return; | ||||
| 		} | ||||
|  | ||||
| 		player_sleep(); | ||||
| 	} | ||||
|  | ||||
| 	while (!quit) { | ||||
| 		processDecodeInput(pc, dc, cb, | ||||
| 				   &pause, &bbp, &doCrossFade, | ||||
| @@ -414,6 +401,16 @@ static void decodeParent(PlayerControl * pc, DecoderControl * dc, OutputBuffer * | ||||
| 			return; | ||||
| 		} | ||||
|  | ||||
| 		if (buffering) { | ||||
| 			if (availableOutputBuffer(cb) < bbp) { | ||||
| 				/* not enough decoded buffer space yet */ | ||||
| 				player_sleep(); | ||||
| 				continue; | ||||
| 			} else | ||||
| 				/* buffering is complete */ | ||||
| 				buffering = 0; | ||||
| 		} | ||||
|  | ||||
| 		if (decodeWaitedOn) { | ||||
| 			if(dc->state!=DECODE_STATE_START && | ||||
| 			   dc->error==DECODE_ERROR_NOERROR) { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user