DavidNorgren

Untitled

Jan 25th, 2016
177
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.07 KB | None | 0 0
  1. while (av_read_frame(formatContext, &inPacket) >= 0) {
  2.  
  3.     if (inPacket.stream_index != streamId)
  4.         continue;
  5.  
  6.     if (avcodec_decode_audio4(codecContext, frameDecoded, &gotFrame, &inPacket) < 0)
  7.         throw -18;
  8.  
  9.     if (!gotFrame)
  10.         continue;
  11.  
  12.     // Begin conversion
  13.     //if (swr_convert(swrContext, NULL, 0, (const uint8_t **)frameDecoded->data, frameDecoded->nb_samples) < 0)
  14.     //  throw -19;
  15.  
  16.     //while (swr_get_out_samples(swrContext, 0) >= RAW_AUDIO_FRAME_SIZE) {
  17.                
  18.         // Allocate data
  19.         uint8_t **convertedData = NULL;
  20.         if (av_samples_alloc_array_and_samples(&convertedData, NULL, STREAM_AUDIO_CHANNELS, RAW_AUDIO_FRAME_SIZE, STREAM_AUDIO_SAMPLE_FORMAT_GM, 0) < 0)
  21.             throw -20;
  22.  
  23.         // Convert
  24.         int outSamples = swr_convert(swrContext, convertedData, RAW_AUDIO_FRAME_SIZE, (const uint8_t **)frameDecoded->data, frameDecoded->nb_samples);
  25.         if (outSamples < 0)
  26.             throw -21;
  27.  
  28.         // Calculate buffer size
  29.         //size_t bufferSize = av_samples_get_buffer_size(NULL, STREAM_AUDIO_CHANNELS, RAW_AUDIO_FRAME_SIZE, STREAM_AUDIO_SAMPLE_FORMAT_GM, 0);
  30.         //if (bufferSize < 0)
  31.         //  throw -22;
  32.  
  33.         fwrite(convertedData[0], 1, outSamples * sizeof(STREAM_AUDIO_SAMPLE_TYPE) * STREAM_AUDIO_CHANNELS, outStream);
  34.         av_freep(convertedData);
  35.     //}
  36. }
  37.  
  38. // Flush
  39. cout << "flushing.." << endl;
  40. while (1) {
  41.    
  42.     // Allocate data
  43.     uint8_t **convertedData = NULL;
  44.     if (av_samples_alloc_array_and_samples(&convertedData, NULL, STREAM_AUDIO_CHANNELS, RAW_AUDIO_FRAME_SIZE, STREAM_AUDIO_SAMPLE_FORMAT_GM, 0) < 0)
  45.         throw -20;
  46.  
  47.     // Convert
  48.     int outSamples = swr_convert(swrContext, convertedData, RAW_AUDIO_FRAME_SIZE, NULL, 0);
  49.     if (outSamples < 0)
  50.         throw -21;
  51.  
  52.     cout << "Flushed " << outSamples << endl;
  53.     //cout << ret << endl;
  54.     if (outSamples==0)
  55.         break;
  56.  
  57.     // Calculate buffer size
  58.     //size_t bufferSize = av_samples_get_buffer_size(NULL, STREAM_AUDIO_CHANNELS, RAW_AUDIO_FRAME_SIZE, STREAM_AUDIO_SAMPLE_FORMAT_GM, 0);
  59.     //if (bufferSize < 0)
  60.     //  throw -22;
  61.  
  62.     fwrite(convertedData[0], 1, outSamples * sizeof(STREAM_AUDIO_SAMPLE_TYPE) * STREAM_AUDIO_CHANNELS, outStream);
  63.     av_freep(convertedData);
  64. }
Advertisement
Add Comment
Please, Sign In to add comment