Exemplo n.º 1
0
int mp_get_aac_header(unsigned char *hdr, int bufsize, AAC_INFO *AacInfo)
{
	int nRet = -1;
	BitData bf;
	int ii;

	memset((void *)AacInfo, 0, sizeof(AAC_INFO));
	for (ii=0; ii<bufsize - 12; ii++)
	{
		// AAC Header
		if(!strncmp((char *)(hdr + ii), "ADIF", 4)) 
		{
			// ADIF 
			InitGetBits(&bf, &hdr[ii], bufsize - ii);
			nRet = get_adif_header(&bf, &(AacInfo->adifHeader));
			if ( nRet == 0 ) 
				return -1;

			AacInfo->nAACFormat = AAC_ADIF;

			AacInfo->nChannels		= AacInfo->adifHeader.prog_config.nChannels;
			AacInfo->nSamplingFreq	= SampleRate[AacInfo->adifHeader.prog_config.sampling_rate_idx];

			AacInfo->nBitRate		= (AacInfo->adifHeader.bitrate + 512) / 1024;
			nRet = 1;
		}
		else if( hdr[ii] == 0xFF && ( (unsigned char)(hdr[ii+1] & 0xF6) == (unsigned char)0xF0 ) )
		{
			// ADTS 		
			// need 4 bytes
			InitGetBits(&bf, &hdr[ii], bufsize - ii);
			nRet = get_adts_header(&bf, &(AacInfo->adtsHeader));
			if ( nRet == 0 ) 
				return -1;

			AacInfo->nAACFormat = AAC_ADTS;

			AacInfo->nChannels = AacInfo->adtsHeader.channel_config;
			AacInfo->nSamplingFreq = SampleRate[AacInfo->adtsHeader.sampling_freq_idx];		
			nRet = 1;
		}
		if (nRet == 1)
		{
			nRet = ii;
			break;
		}
	}

	return nRet;
}
Exemplo n.º 2
0
Arquivo: alert.c Projeto: grpascal/GEO
//uac call-back
static void audio_cb(unsigned char *buffer, unsigned int size,
		int format, uint64_t ts, void *user_data, audio_params_t *param)
{
	audio_format_t fmt = (audio_format_t) format;
	unsigned char adtsHeader[7];

	switch(fmt) {
	case AUD_FORMAT_AAC_RAW: //TBD
		if(fd_aud == NULL){
			fd_aud = fopen("out.audio.aac", "w");
			//calculate required sampling interval
			//(1024/sam_freq)*90  //90 is resampler freq
			sam_interval = (uint64_t)(((float)(1024*1000/SAMP_FREQ))*90);
			uint64_t percent = (uint64_t)(sam_interval*permissible_range)/100;
			upper_sam_interval = (uint64_t)(sam_interval + percent);
			lower_sam_interval = (uint64_t)(sam_interval - percent);
			printf("sam_interval %lld upper_limit %lld low_limit %lld\n",
					sam_interval,upper_sam_interval,lower_sam_interval);
		}

		if((((ts-prev_ts) > upper_sam_interval) || ((ts-prev_ts) < lower_sam_interval)) && (prev_ts))
			printf("out of range: %lld, last ts %lld preset ts %lld\n",(ts-prev_ts),prev_ts, ts);

		prev_ts = ts;
			
		if(param->samplefreq != SAMP_FREQ)	
			printf("Wrong sampling freq, expected %fhz received pkt with %dhz\n",SAMP_FREQ,param->samplefreq);

		get_adts_header(param, adtsHeader);
		fwrite(adtsHeader, ADTS_HEADER_LEN, 1, fd_aud);
		break;
	case AUD_FORMAT_PCM_RAW:
		if(fd_aud == NULL)
			fd_aud = fopen("out.audio.pcm", "w");
		break;
	default:
		printf("Audio format not supported\n");
		return;
	}

	fwrite(buffer, size, 1, fd_aud);
}