DavidNorgren

Untitled

Jan 24th, 2016
246
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.91 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.         if (swr_convert(swrContext, convertedData, RAW_AUDIO_FRAME_SIZE, (const uint8_t **)frameDecoded->data, frameDecoded->nb_samples) < 0)
  25.             throw -21;
  26.  
  27.         // Calculate buffer size
  28.         size_t bufferSize = av_samples_get_buffer_size(NULL, STREAM_AUDIO_CHANNELS, RAW_AUDIO_FRAME_SIZE, STREAM_AUDIO_SAMPLE_FORMAT_GM, 0);
  29.         if (bufferSize < 0)
  30.             throw -22;
  31.  
  32.         fwrite(convertedData[0], 1, bufferSize, outStream);
  33.         av_freep(convertedData);
  34.     //}
  35. }
  36.  
  37. // Flush
  38. cout << "flushing.." << endl;
  39. while (1) {
  40.    
  41.     // Allocate data
  42.     uint8_t **convertedData = NULL;
  43.     if (av_samples_alloc_array_and_samples(&convertedData, NULL, STREAM_AUDIO_CHANNELS, RAW_AUDIO_FRAME_SIZE, STREAM_AUDIO_SAMPLE_FORMAT_GM, 0) < 0)
  44.         throw -20;
  45.  
  46.     // Convert
  47.     int outSamples = swr_convert(swrContext, convertedData, RAW_AUDIO_FRAME_SIZE, NULL, 0);
  48.     if (outSamples < 0)
  49.         throw -21;
  50.  
  51.     cout << "Flushed " << outSamples << endl;
  52.     //cout << ret << endl;
  53.     if (outSamples==0)
  54.         break;
  55.  
  56.     // Calculate buffer size
  57.     size_t bufferSize = av_samples_get_buffer_size(NULL, STREAM_AUDIO_CHANNELS, RAW_AUDIO_FRAME_SIZE, STREAM_AUDIO_SAMPLE_FORMAT_GM, 0);
  58.     if (bufferSize < 0)
  59.         throw -22;
  60.  
  61.     fwrite(convertedData[0], 1, bufferSize, outStream);
  62.     av_free(convertedData);
  63. }
Advertisement
Add Comment
Please, Sign In to add comment