Exemple #1
0
static int cap_fit(mpg123_handle *fr, struct audioformat *nf, int f0, int f2)
{
	int i;
	int c  = nf->channels-1;
	int rn = rate2num(&fr->p, nf->rate);
	if(rn >= 0)	for(i=f0;i<f2;i++)
	{
		if(fr->p.audio_caps[c][rn][i])
		{
			nf->encoding = my_encodings[i];
			return 1;
		}
	}
	return 0;
}
Exemple #2
0
/*
 * c=num of channels of stream
 * r=rate of stream
 * return 0 on error
 */
int audio_fit_capabilities(struct audio_info_struct *ai,int c,int r)
{
	int rn;
	int f0=0;
	
	if(param.force_8bit) f0 = 2; /* skip the 16bit encodings */

	c--; /* stereo=1 ,mono=0 */

	/* force stereo is stronger */
	if(param.force_mono) c = 0;
	if(param.force_stereo) c = 1;

	if(param.force_rate) {
		rn = rate2num(param.force_rate);
		/* 16bit encodings */
		if(audio_fit_cap_helper(ai,rn,f0,2,c)) return 1;
		/* 8bit encodings */
		if(audio_fit_cap_helper(ai,rn,2,NUM_ENCODINGS,c)) return 1;

		/* try again with different stereoness */
		if(c == 1 && !param.force_stereo)	c = 0;
		else if(c == 0 && !param.force_mono) c = 1;

		/* 16bit encodings */
		if(audio_fit_cap_helper(ai,rn,f0,2,c)) return 1;
		/* 8bit encodings */
		if(audio_fit_cap_helper(ai,rn,2,NUM_ENCODINGS,c)) return 1;

		error3("Unable to set up output device! Constraints: %s%s%liHz.",
		      (param.force_stereo ? "stereo, " :
		       (param.force_mono ? "mono, " : "")),
		      (param.force_8bit ? "8bit, " : ""),
		      param.force_rate);
		if(param.verbose <= 1) print_capabilities(ai);
		return 0;
	}

	/* try different rates with 16bit */
	rn = rate2num(r>>0);
	if(audio_fit_cap_helper(ai,rn,f0,2,c))
		return 1;
	rn = rate2num(r>>1);
	if(audio_fit_cap_helper(ai,rn,f0,2,c))
		return 1;
	rn = rate2num(r>>2);
	if(audio_fit_cap_helper(ai,rn,f0,2,c))
		return 1;

	/* try different rates with 8bit */
	rn = rate2num(r>>0);
	if(audio_fit_cap_helper(ai,rn,2,NUM_ENCODINGS,c))
		return 1;
	rn = rate2num(r>>1);
	if(audio_fit_cap_helper(ai,rn,2,NUM_ENCODINGS,c))
		return 1;
	rn = rate2num(r>>2);
	if(audio_fit_cap_helper(ai,rn,2,NUM_ENCODINGS,c))
		return 1;

	/* try again with different stereoness */
	if(c == 1 && !param.force_stereo)	c = 0;
	else if(c == 0 && !param.force_mono) c = 1;

	/* 16bit */
	rn = rate2num(r>>0);
	if(audio_fit_cap_helper(ai,rn,f0,2,c)) return 1;
	rn = rate2num(r>>1);
	if(audio_fit_cap_helper(ai,rn,f0,2,c)) return 1;
	rn = rate2num(r>>2);
	if(audio_fit_cap_helper(ai,rn,f0,2,c)) return 1;

	/* 8bit */
	rn = rate2num(r>>0);
	if(audio_fit_cap_helper(ai,rn,2,NUM_ENCODINGS,c)) return 1;
	rn = rate2num(r>>1);
	if(audio_fit_cap_helper(ai,rn,2,NUM_ENCODINGS,c)) return 1;
	rn = rate2num(r>>2);
	if(audio_fit_cap_helper(ai,rn,2,NUM_ENCODINGS,c)) return 1;

	error5("Unable to set up output device! Constraints: %s%s%i, %i or %iHz.",
	      (param.force_stereo ? "stereo, " :
	       (param.force_mono ? "mono, " : "")),
	      (param.force_8bit ? "8bit, " : ""),
	      r, r>>1, r>>2);
	if(param.verbose <= 1) print_capabilities(ai);
	return 0;
}
Exemple #3
0
/*
 * c=num of channels of stream
 * r=rate of stream
 */
void audio_fit_capabilities(struct audio_info_struct *ai,int c,int r)
{
	int rn;
	int f0=0;
	int save_channels = c;
	int save_rate = r;
	
	if(param.force_8bit) {
		f0 = 2;
	}

	c--; /* stereo=1 ,mono=0 */

	if(param.force_mono >= 0)
		c = 0;
	if(param.force_stereo)
		c = 1;

	if(param.force_rate) {
		rn = rate2num(param.force_rate);
		if(audio_fit_cap_helper(ai,rn,f0,2,c))
			return;
		if(audio_fit_cap_helper(ai,rn,2,NUM_ENCODINGS,c))
			return;

		if(c == 1 && !param.force_stereo)
			c = 0;
		else if(c == 0 && !param.force_mono)
			c = 1;

		if(audio_fit_cap_helper(ai,rn,f0,2,c))
			return;
		if(audio_fit_cap_helper(ai,rn,2,NUM_ENCODINGS,c))
			return;
	}
        else {

	rn = rate2num(r>>0);
	if(audio_fit_cap_helper(ai,rn,f0,2,c))
		return;
        rn = rate2num(r<<1);
        if(audio_fit_cap_helper(ai,rn,f0,2,c))
                return;
        rn = rate2num(r<<2);
        if(audio_fit_cap_helper(ai,rn,f0,2,c))
                return;
	rn = rate2num(r>>1);
	if(audio_fit_cap_helper(ai,rn,f0,2,c))
		return;
	rn = rate2num(r>>2);
	if(audio_fit_cap_helper(ai,rn,f0,2,c))
		return;

	rn = rate2num(r>>0);
	if(audio_fit_cap_helper(ai,rn,2,NUM_ENCODINGS,c))
		return;
        rn = rate2num(r<<1);
        if(audio_fit_cap_helper(ai,rn,2,NUM_ENCODINGS,c))
                return;
        rn = rate2num(r<<2);
        if(audio_fit_cap_helper(ai,rn,2,NUM_ENCODINGS,c))
                return;
	rn = rate2num(r>>1);
	if(audio_fit_cap_helper(ai,rn,2,NUM_ENCODINGS,c))
		return;
	rn = rate2num(r>>2);
	if(audio_fit_cap_helper(ai,rn,2,NUM_ENCODINGS,c))
		return;


        if(c == 1 && !param.force_stereo)
		c = 0;
        else if(c == 0 && !param.force_mono)
                c = 1;

        rn = rate2num(r>>0);
        if(audio_fit_cap_helper(ai,rn,f0,2,c))
                return;
        rn = rate2num(r<<1);
        if(audio_fit_cap_helper(ai,rn,f0,2,c))
                return;
        rn = rate2num(r<<2);
        if(audio_fit_cap_helper(ai,rn,f0,2,c))
                return;
        rn = rate2num(r>>1);
        if(audio_fit_cap_helper(ai,rn,f0,2,c))
                return;
        rn = rate2num(r>>2);
        if(audio_fit_cap_helper(ai,rn,f0,2,c))
                return;

        rn = rate2num(r>>0);
        if(audio_fit_cap_helper(ai,rn,2,NUM_ENCODINGS,c))
                return;
        rn = rate2num(r<<1);
        if(audio_fit_cap_helper(ai,rn,2,NUM_ENCODINGS,c))
                return;
        rn = rate2num(r<<2);
        if(audio_fit_cap_helper(ai,rn,2,NUM_ENCODINGS,c))
                return;
        rn = rate2num(r>>1);
        if(audio_fit_cap_helper(ai,rn,2,NUM_ENCODINGS,c))
                return;
        rn = rate2num(r>>2);
        if(audio_fit_cap_helper(ai,rn,2,NUM_ENCODINGS,c))
                return;
        }

        fprintf(stderr,"\nAudiodevice: No supported audio rate found for %d Hz and %d channels !\n",save_rate,save_channels);
        fprintf(stderr,"Use '-vv' to list all possible audio rates and\n");
        fprintf(stderr,"choose a supported rate with the '-r <rate>' option.\n");

	exit(1);
}