diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/player.c | 13 | 
1 files changed, 6 insertions, 7 deletions
| diff --git a/src/player.c b/src/player.c index beccc37..fd56b0a 100644 --- a/src/player.c +++ b/src/player.c @@ -310,13 +310,6 @@ char BarPlayerMp3Cb (void *ptr, size_t size, void *stream) {  		return 0;  	} -	/* initialize song length */ -	if (player->mode < PLAYER_SAMPLESIZE_INITIALIZED) { -		player->songDuration = (float) player->waith.contentLength / -				((float) MP3_BITRATE * 1024.0 / -				(float) BAR_PLAYER_MS_TO_S_FACTOR / 8.0); -	} -  	/* some "prebuffering" */  	if (player->mode < PLAYER_RECV_DATA &&  			player->bufferFilled < sizeof (player->buffer) / 2) { @@ -363,6 +356,12 @@ char BarPlayerMp3Cb (void *ptr, size_t size, void *stream) {  			format.byte_format = AO_FMT_LITTLE;  			player->audioOutDevice = ao_open_live (audioOutDriver,  					&format, NULL); + +			/* calc song length using the framerate of the first decoded frame */ +			player->songDuration = (float) player->waith.contentLength / +					((float) player->mp3Frame.header.bitrate / +					(float) BAR_PLAYER_MS_TO_S_FACTOR / 8.0); +  			/* must be > PLAYER_SAMPLESIZE_INITIALIZED, otherwise time won't  			 * be visible to user (ugly, but mp3 decoding != aac decoding) */  			player->mode = PLAYER_RECV_DATA; | 
