Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- while (av_read_frame(formatContext, &inPacket) >= 0) {
- if (inPacket.stream_index != streamId)
- continue;
- if (avcodec_decode_audio4(codecContext, frameDecoded, &gotFrame, &inPacket) < 0)
- throw -18;
- if (!gotFrame)
- continue;
- // Begin conversion
- //if (swr_convert(swrContext, NULL, 0, (const uint8_t **)frameDecoded->data, frameDecoded->nb_samples) < 0)
- // throw -19;
- //while (swr_get_out_samples(swrContext, 0) >= RAW_AUDIO_FRAME_SIZE) {
- // Allocate data
- uint8_t **convertedData = NULL;
- if (av_samples_alloc_array_and_samples(&convertedData, NULL, STREAM_AUDIO_CHANNELS, RAW_AUDIO_FRAME_SIZE, STREAM_AUDIO_SAMPLE_FORMAT_GM, 0) < 0)
- throw -20;
- // Convert
- int outSamples = swr_convert(swrContext, convertedData, RAW_AUDIO_FRAME_SIZE, (const uint8_t **)frameDecoded->data, frameDecoded->nb_samples);
- if (outSamples < 0)
- throw -21;
- // Calculate buffer size
- //size_t bufferSize = av_samples_get_buffer_size(NULL, STREAM_AUDIO_CHANNELS, RAW_AUDIO_FRAME_SIZE, STREAM_AUDIO_SAMPLE_FORMAT_GM, 0);
- //if (bufferSize < 0)
- // throw -22;
- fwrite(convertedData[0], 1, outSamples * sizeof(STREAM_AUDIO_SAMPLE_TYPE) * STREAM_AUDIO_CHANNELS, outStream);
- av_freep(convertedData);
- //}
- }
- // Flush
- cout << "flushing.." << endl;
- while (1) {
- // Allocate data
- uint8_t **convertedData = NULL;
- if (av_samples_alloc_array_and_samples(&convertedData, NULL, STREAM_AUDIO_CHANNELS, RAW_AUDIO_FRAME_SIZE, STREAM_AUDIO_SAMPLE_FORMAT_GM, 0) < 0)
- throw -20;
- // Convert
- int outSamples = swr_convert(swrContext, convertedData, RAW_AUDIO_FRAME_SIZE, NULL, 0);
- if (outSamples < 0)
- throw -21;
- cout << "Flushed " << outSamples << endl;
- //cout << ret << endl;
- if (outSamples==0)
- break;
- // Calculate buffer size
- //size_t bufferSize = av_samples_get_buffer_size(NULL, STREAM_AUDIO_CHANNELS, RAW_AUDIO_FRAME_SIZE, STREAM_AUDIO_SAMPLE_FORMAT_GM, 0);
- //if (bufferSize < 0)
- // throw -22;
- fwrite(convertedData[0], 1, outSamples * sizeof(STREAM_AUDIO_SAMPLE_TYPE) * STREAM_AUDIO_CHANNELS, outStream);
- av_freep(convertedData);
- }
Advertisement
Add Comment
Please, Sign In to add comment