44 #define OUTPUT_BIT_RATE 96000
46 #define OUTPUT_CHANNELS 2
55 static char error_buffer[255];
56 av_strerror(error, error_buffer,
sizeof(error_buffer));
71 fprintf(stderr,
"Could not open input file '%s' (error '%s')\n",
73 *input_format_context =
NULL;
79 fprintf(stderr,
"Could not open find stream info (error '%s')\n",
86 if ((*input_format_context)->nb_streams != 1) {
87 fprintf(stderr,
"Expected one audio input stream, but found %d\n",
88 (*input_format_context)->nb_streams);
94 if (!(input_codec =
avcodec_find_decoder((*input_format_context)->streams[0]->codec->codec_id))) {
95 fprintf(stderr,
"Could not find input codec\n");
101 if ((error =
avcodec_open2((*input_format_context)->streams[0]->codec,
102 input_codec,
NULL)) < 0) {
103 fprintf(stderr,
"Could not open input codec (error '%s')\n",
110 *input_codec_context = (*input_format_context)->streams[0]->
codec;
131 if ((error =
avio_open(&output_io_context, filename,
133 fprintf(stderr,
"Could not open output file '%s' (error '%s')\n",
140 fprintf(stderr,
"Could not allocate output format context\n");
145 (*output_format_context)->pb = output_io_context;
150 fprintf(stderr,
"Could not find output file format\n");
154 av_strlcpy((*output_format_context)->filename, filename,
155 sizeof((*output_format_context)->filename));
159 fprintf(stderr,
"Could not find an AAC encoder.\n");
165 fprintf(stderr,
"Could not create new stream\n");
171 *output_codec_context = stream->
codec;
179 (*output_codec_context)->sample_rate = input_codec_context->
sample_rate;
180 (*output_codec_context)->sample_fmt = output_codec->
sample_fmts[0];
199 fprintf(stderr,
"Could not open output codec (error '%s')\n",
209 *output_format_context =
NULL;
226 fprintf(stderr,
"Could not allocate input frame\n");
258 if (!*resample_context) {
259 fprintf(stderr,
"Could not allocate resample context\n");
270 if ((error =
swr_init(*resample_context)) < 0) {
271 fprintf(stderr,
"Could not open resample context\n");
283 output_codec_context->
channels, 1))) {
284 fprintf(stderr,
"Could not allocate FIFO\n");
295 fprintf(stderr,
"Could not write output file header (error '%s')\n",
306 int *data_present,
int *finished)
314 if ((error =
av_read_frame(input_format_context, &input_packet)) < 0) {
319 fprintf(stderr,
"Could not read frame (error '%s')\n",
332 data_present, &input_packet)) < 0) {
333 fprintf(stderr,
"Could not decode frame (error '%s')\n",
343 if (*finished && *data_present)
365 if (!(*converted_input_samples = calloc(output_codec_context->
channels,
366 sizeof(**converted_input_samples)))) {
367 fprintf(stderr,
"Could not allocate converted input sample pointers\n");
380 "Could not allocate converted input samples (error '%s')\n",
382 av_freep(&(*converted_input_samples)[0]);
383 free(*converted_input_samples);
402 converted_data, frame_size,
403 input_data , frame_size)) < 0) {
404 fprintf(stderr,
"Could not convert input samples (error '%s')\n",
414 uint8_t **converted_input_samples,
424 fprintf(stderr,
"Could not reallocate FIFO\n");
430 frame_size) < frame_size) {
431 fprintf(stderr,
"Could not write data to FIFO\n");
460 input_codec_context, &data_present, finished))
467 if (*finished && !data_present) {
495 if (converted_input_samples) {
496 av_freep(&converted_input_samples[0]);
497 free(converted_input_samples);
516 fprintf(stderr,
"Could not allocate output frame\n");
529 (*frame)->format = output_codec_context->
sample_fmt;
530 (*frame)->sample_rate = output_codec_context->
sample_rate;
537 fprintf(stderr,
"Could allocate output frame samples (error '%s')\n",
571 frame, data_present)) < 0) {
572 fprintf(stderr,
"Could not encode frame (error '%s')\n",
580 if ((error =
av_write_frame(output_format_context, &output_packet)) < 0) {
581 fprintf(stderr,
"Could not write frame (error '%s')\n",
621 fprintf(stderr,
"Could not read data from FIFO\n");
628 output_codec_context, &data_written)) {
641 fprintf(stderr,
"Could not write output file trailer (error '%s')\n",
649 int main(
int argc,
char **argv)
658 fprintf(stderr,
"Usage: %s <input file> <output file>\n", argv[0]);
666 &input_codec_context))
670 &output_format_context, &output_codec_context))
677 if (
init_fifo(&fifo, output_codec_context))
689 const int output_frame_size = output_codec_context->frame_size;
706 output_codec_context,
707 resample_context, &finished))
730 output_codec_context))
742 output_codec_context, &data_written))
744 }
while (data_written);
758 if (output_codec_context)
760 if (output_format_context) {
764 if (input_codec_context)
766 if (input_format_context)