Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ReSampleContext * Sctx = av_audio_resample_init(ff_output[i].codecCtx->channels, ff_output[i].codecCtx->channels,
- ff_output[i].codecCtx->sample_rate,ff_output[i].codecCtx->sample_rate, AV_SAMPLE_FMT_FLTP,
- ff_input.audiocodecCtx->sample_fmt,16,10,0,0.8);
- printf("Generating video streams...\n");
- while(av_read_frame (ff_input.formatCtx, &ff_input.packet) >= 0 && _keepEncoder) {
- if (ff_input.packet.stream_index == audioStreamIndex) {
- ff_input.frame = av_frame_alloc();
- avcodec_decode_audio4 (ff_input.audiocodecCtx, ff_input.frame, &frameFinished, &ff_input.packet);
- if (frameFinished) {
- if (av_audio_fifo_realloc(fifo, av_audio_fifo_size(fifo) + ff_input.frame->nb_samples) < 0) {
- printf("Could not reallocate FIFO\n");
- return -1;
- }
- /** Store the new samples in the FIFO buffer. */
- if (av_audio_fifo_write(fifo, (void **)ff_input.frame->extended_data, ff_input.frame->nb_samples) < ff_input.frame->nb_samples) {
- printf("Could not write data to FIFO\n");
- return -1;
- }
- output_frame_size = ff_output[audio_output_index].codecCtx->frame_size;
- if (av_audio_fifo_size(fifo) < output_frame_size) {
- av_frame_free (&ff_input.frame);
- continue;
- }
- // Encode
- ff_output[audio_output_index].frame = av_frame_alloc();
- ff_output[audio_output_index].frame->nb_samples = output_frame_size;
- ff_output[audio_output_index].frame->channel_layout = ff_output[audio_output_index].codecCtx->channel_layout;
- ff_output[audio_output_index].frame->format = ff_output[audio_output_index].codecCtx->sample_fmt;
- ff_output[audio_output_index].frame->sample_rate = ff_output[audio_output_index].codecCtx->sample_rate;
- if (av_frame_get_buffer(ff_output[audio_output_index].frame, 0) < 0) {
- printf ("could not allocate buffer for audio frame\n");
- return -1;
- }
- if (av_audio_fifo_read(fifo, (void **)ff_output[audio_output_index].frame->data, output_frame_size) < output_frame_size) {
- printf ("could not read from fifo\n");
- return -1;
- }
- ff_output[audio_output_index].frame->pts = pts;
- pts += output_frame_size;
- av_init_packet (&ff_output[audio_output_index].packet);
- ff_output[audio_output_index].packet.data = NULL;
- ff_output[audio_output_index].packet.size = 0;
- avcodec_encode_audio2 ( ff_output[audio_output_index].codecCtx,
- &ff_output[audio_output_index].packet,
- ff_output[audio_output_index].frame, &gotPacket );
- if (gotPacket) {
- ff_output[audio_output_index].packet.stream_index = audio_output_index;
- av_packet_rescale_ts (&ff_output[audio_output_index].packet,
- ff_output[audio_output_index].codecCtx->time_base,
- ff_output[audio_output_index].outStream->time_base );
- if (av_interleaved_write_frame(formatCtx, &ff_output[audio_output_index].packet) < 0) {
- printf ("Unable to write to output stream..\n");
- pthread_exit(NULL);
- }
- av_frame_free (&ff_output[audio_output_index].frame);
- }
- }
- av_frame_free (&ff_input.frame);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement