Advertisement
Guest User

Untitled

a guest
Oct 21st, 2015
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.27 KB | None | 0 0
  1. ReSampleContext * Sctx = av_audio_resample_init(ff_output[i].codecCtx->channels, ff_output[i].codecCtx->channels,
  2.                                                     ff_output[i].codecCtx->sample_rate,ff_output[i].codecCtx->sample_rate, AV_SAMPLE_FMT_FLTP,
  3.                                                     ff_input.audiocodecCtx->sample_fmt,16,10,0,0.8);
  4.  
  5.     printf("Generating video streams...\n");
  6.     while(av_read_frame (ff_input.formatCtx, &ff_input.packet) >= 0 && _keepEncoder) {
  7.  
  8.         if (ff_input.packet.stream_index == audioStreamIndex) {
  9.             ff_input.frame = av_frame_alloc();
  10.             avcodec_decode_audio4 (ff_input.audiocodecCtx, ff_input.frame, &frameFinished, &ff_input.packet);
  11.  
  12.             if (frameFinished) {
  13.                 if (av_audio_fifo_realloc(fifo, av_audio_fifo_size(fifo) + ff_input.frame->nb_samples) < 0) {
  14.                    printf("Could not reallocate FIFO\n");
  15.                    return -1;
  16.                 }
  17.  
  18.                 /** Store the new samples in the FIFO buffer. */
  19.                 if (av_audio_fifo_write(fifo, (void **)ff_input.frame->extended_data, ff_input.frame->nb_samples) < ff_input.frame->nb_samples) {
  20.                    printf("Could not write data to FIFO\n");
  21.                    return -1;
  22.                 }
  23.                
  24.                 output_frame_size = ff_output[audio_output_index].codecCtx->frame_size;
  25.                 if (av_audio_fifo_size(fifo) < output_frame_size) {
  26.                     av_frame_free (&ff_input.frame);
  27.                     continue;
  28.                 }
  29.  
  30.                 // Encode
  31.                 ff_output[audio_output_index].frame = av_frame_alloc();
  32.  
  33.                 ff_output[audio_output_index].frame->nb_samples     = output_frame_size;
  34.                 ff_output[audio_output_index].frame->channel_layout = ff_output[audio_output_index].codecCtx->channel_layout;
  35.                 ff_output[audio_output_index].frame->format         = ff_output[audio_output_index].codecCtx->sample_fmt;
  36.                 ff_output[audio_output_index].frame->sample_rate    = ff_output[audio_output_index].codecCtx->sample_rate;
  37.  
  38.                 if (av_frame_get_buffer(ff_output[audio_output_index].frame, 0) < 0) {
  39.                     printf ("could not allocate buffer for audio frame\n");
  40.                     return -1;
  41.                 }
  42.  
  43.                 if (av_audio_fifo_read(fifo, (void **)ff_output[audio_output_index].frame->data, output_frame_size) < output_frame_size) {
  44.                     printf ("could not read from fifo\n");
  45.                     return -1;
  46.                 }
  47.  
  48.                 ff_output[audio_output_index].frame->pts = pts;
  49.                 pts += output_frame_size;  
  50.  
  51.                 av_init_packet (&ff_output[audio_output_index].packet);
  52.                 ff_output[audio_output_index].packet.data = NULL;
  53.                 ff_output[audio_output_index].packet.size = 0;
  54.  
  55.                 avcodec_encode_audio2   (   ff_output[audio_output_index].codecCtx,
  56.                                             &ff_output[audio_output_index].packet,
  57.                                             ff_output[audio_output_index].frame, &gotPacket );
  58.  
  59.                 if (gotPacket) {
  60.                     ff_output[audio_output_index].packet.stream_index = audio_output_index;
  61.  
  62.                     av_packet_rescale_ts (&ff_output[audio_output_index].packet,
  63.                                                         ff_output[audio_output_index].codecCtx->time_base,
  64.                                                         ff_output[audio_output_index].outStream->time_base );
  65.  
  66.                     if (av_interleaved_write_frame(formatCtx, &ff_output[audio_output_index].packet) < 0) {
  67.                         printf ("Unable to write to output stream..\n");
  68.                         pthread_exit(NULL);
  69.                     }
  70.                     av_frame_free (&ff_output[audio_output_index].frame);
  71.                 }
  72.             }
  73.             av_frame_free (&ff_input.frame);           
  74.         }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement