Пример #1
0
char *mp4_read_get_audio(struct mp4_read_struct *p, unsigned int packet, unsigned int audio_stream, struct mp4_audio_read_output_struct *output){
	char *result = 0;
	if (p->interleaving.output_video_frame_number > packet) {
		time_math_interleaving_constructor(&p->interleaving, 
			p->file.video_rate, 
			p->file.video_scale, 
			p->file.audio_rate, 
			p->file.audio_resample_scale);
		time_math_interleaving_get(&p->interleaving);
	}

	while (p->interleaving.output_video_frame_number != packet) {
		time_math_interleaving_get(&p->interleaving);
	}
	mp4info_track_t* track;
	
	unsigned int first_audio_frame, last_audio_frame;
	
	first_audio_frame = p->interleaving.output_audio_frame_number;
	last_audio_frame = p->interleaving.output_audio_frame_number + p->interleaving.output_number_of_audio_frames - 1;
	output->number_of_audio_frames = p->interleaving.output_number_of_audio_frames;
	
	track = p->file.info->tracks[p->file.audio_track_ids[audio_stream]];
	int i;
	void *audio_buffer;
	void *audio_output_buffer = p->audio_output_buffer;
	memset(audio_output_buffer, 0, p->file.maximum_audio_sample_size * p->file.maximun_audio_sample_number);
	for( i = 0; i < output->number_of_audio_frames; i++ ) {
		if ( first_audio_frame+i >= track->stts_sample_count[0] )
			break; 
		p->audio_output_length[i] = track->stsz_sample_size ? track->stsz_sample_size : track->stsz_sample_size_table[first_audio_frame+i];
		result = get_audio_sample(p, audio_stream, first_audio_frame+i, &audio_buffer);
		if (result != 0) {
			return(result);
		}
		memcpy(audio_output_buffer, audio_buffer, p->audio_output_length[i]);
		audio_output_buffer += p->audio_output_length[i];
	}
	
	output->first_delay  = p->interleaving.output_first_delay;
	output->last_delay   = p->interleaving.output_last_delay;
	output->audio_length = p->audio_output_length;
	output->audio_buffer = p->audio_output_buffer;

	return(0);
}
Пример #2
0
int demodulador(ZAP *zap, float *retval)
{
	float x,xS,xM;

	if (get_audio_sample(zap,&x)) return(-1);
	zap->fskd.cola_in[zap->fskd.pcola]=x;
	
	xS=filtroS(zap,x);
	xM=filtroM(zap,x);

	zap->fskd.cola_filtro[zap->fskd.pcola]=xM-xS;

	x=filtroL(zap,xM*xM - xS*xS);
	
	zap->fskd.cola_demod[zap->fskd.pcola++]=x;
	zap->fskd.pcola &= (NCOLA-1);

	*retval = x;
	return(0);
}
Пример #3
0
int write_audio_frames()
{
	int ret = 0;
	
	n_audio_source_sample = n_audio_source_sample_size;
	ret = get_audio_sample(p_audio_source,p_audio_source_sample,&n_audio_source_sample);
	if(ret < 0)
	{		 
		fprintf(stderr ,"avencoder: get_audio_sample fail..\n");		 
		return -1;	  
	}
	else if(ret == 0)
	{
		//fprintf(stderr ,"avencoder: get_audio_sample no audio sample..\n");
		n_audio_source_sample = 4608;
		memset(p_audio_source_sample,0,n_audio_source_sample);
	}
	//else if(ret > 0)
	//	fprintf(stderr ,"avencoder: get_audio_sample yes audio sample..\n");

	//printf("n_audio_source_sample = %d\n",n_audio_source_sample);

	n_audio_encode_sample = n_audio_encode_sample_size;
	ret = encode_audio_sample(p_audio_encoder,p_audio_source_sample,n_audio_source_sample,p_audio_encode_sample,&n_audio_encode_sample);
	if(ret < 0)
	{		 
		fprintf(stderr ,"avencoder: encode_audio_sample fail..\n");		 
		return -2;	  
	}

	//printf("n_audio_encode_sample = %d\n",n_audio_encode_sample);


	ret = write_audio_frame(p_avmuxer,p_audio_encode_sample,n_audio_encode_sample);
	if(ret < 0)
	{		 
		fprintf(stderr ,"avencoder: write_audio_frame fail..\n");		 
		return -3;	  
	}
	return 0;
}