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); }
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); }
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; }