43 #define OUTPUT_BIT_RATE 48000
45 #define OUTPUT_CHANNELS 2
47 #define OUTPUT_SAMPLE_FORMAT AV_SAMPLE_FMT_S16
56 static char error_buffer[255];
57 av_strerror(error, error_buffer,
sizeof(error_buffer));
72 fprintf(stderr,
"Could not open input file '%s' (error '%s')\n",
74 *input_format_context =
NULL;
80 fprintf(stderr,
"Could not open find stream info (error '%s')\n",
87 if ((*input_format_context)->nb_streams != 1) {
88 fprintf(stderr,
"Expected one audio input stream, but found %d\n",
89 (*input_format_context)->nb_streams);
95 if (!(input_codec =
avcodec_find_decoder((*input_format_context)->streams[0]->codec->codec_id))) {
96 fprintf(stderr,
"Could not find input codec\n");
102 if ((error =
avcodec_open2((*input_format_context)->streams[0]->codec,
103 input_codec,
NULL)) < 0) {
104 fprintf(stderr,
"Could not open input codec (error '%s')\n",
111 *input_codec_context = (*input_format_context)->streams[0]->
codec;
132 if ((error =
avio_open(&output_io_context, filename,
134 fprintf(stderr,
"Could not open output file '%s' (error '%s')\n",
141 fprintf(stderr,
"Could not allocate output format context\n");
146 (*output_format_context)->pb = output_io_context;
151 fprintf(stderr,
"Could not find output file format\n");
155 av_strlcpy((*output_format_context)->filename, filename,
156 sizeof((*output_format_context)->filename));
160 fprintf(stderr,
"Could not find an AAC encoder.\n");
166 fprintf(stderr,
"Could not create new stream\n");
172 *output_codec_context = stream->
codec;
180 (*output_codec_context)->sample_rate = input_codec_context->
sample_rate;
193 fprintf(stderr,
"Could not open output codec (error '%s')\n",
203 *output_format_context =
NULL;
220 fprintf(stderr,
"Could not allocate input frame\n");
245 fprintf(stderr,
"Could not allocate resample context\n");
270 fprintf(stderr,
"Could not open resample context\n");
283 fprintf(stderr,
"Could not allocate FIFO\n");
294 fprintf(stderr,
"Could not write output file header (error '%s')\n",
305 int *data_present,
int *finished)
313 if ((error =
av_read_frame(input_format_context, &input_packet)) < 0) {
318 fprintf(stderr,
"Could not read frame (error '%s')\n",
331 data_present, &input_packet)) < 0) {
332 fprintf(stderr,
"Could not decode frame (error '%s')\n",
342 if (*finished && *data_present)
364 if (!(*converted_input_samples = calloc(output_codec_context->
channels,
365 sizeof(**converted_input_samples)))) {
366 fprintf(stderr,
"Could not allocate converted input sample pointers\n");
379 "Could not allocate converted input samples (error '%s')\n",
381 av_freep(&(*converted_input_samples)[0]);
382 free(*converted_input_samples);
401 frame_size, input_data, 0, frame_size)) < 0) {
402 fprintf(stderr,
"Could not convert input samples (error '%s')\n",
413 fprintf(stderr,
"Converted samples left over\n");
422 uint8_t **converted_input_samples,
432 fprintf(stderr,
"Could not reallocate FIFO\n");
438 frame_size) < frame_size) {
439 fprintf(stderr,
"Could not write data to FIFO\n");
468 input_codec_context, &data_present, finished))
475 if (*finished && !data_present) {
503 if (converted_input_samples) {
504 av_freep(&converted_input_samples[0]);
505 free(converted_input_samples);
524 fprintf(stderr,
"Could not allocate output frame\n");
537 (*frame)->format = output_codec_context->
sample_fmt;
538 (*frame)->sample_rate = output_codec_context->
sample_rate;
545 fprintf(stderr,
"Could allocate output frame samples (error '%s')\n",
570 frame, data_present)) < 0) {
571 fprintf(stderr,
"Could not encode frame (error '%s')\n",
579 if ((error =
av_write_frame(output_format_context, &output_packet)) < 0) {
580 fprintf(stderr,
"Could not write frame (error '%s')\n",
620 fprintf(stderr,
"Could not read data from FIFO\n");
627 output_codec_context, &data_written)) {
640 fprintf(stderr,
"Could not write output file trailer (error '%s')\n",
648 int main(
int argc,
char **argv)
657 fprintf(stderr,
"Usage: %s <input file> <output file>\n", argv[0]);
665 &input_codec_context))
669 &output_format_context, &output_codec_context))
688 const int output_frame_size = output_codec_context->frame_size;
705 output_codec_context,
706 resample_context, &finished))
729 output_codec_context))
741 output_codec_context, &data_written))
743 }
while (data_written);
756 if (resample_context) {
760 if (output_codec_context)
762 if (output_format_context) {
766 if (input_codec_context)
768 if (input_format_context)