|
|
|
@ -45,18 +45,6 @@ |
|
|
|
|
/** The number of output channels */ |
|
|
|
|
#define OUTPUT_CHANNELS 2 |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Convert an error code into a text message. |
|
|
|
|
* @param error Error code to be converted |
|
|
|
|
* @return Corresponding error text (not thread-safe) |
|
|
|
|
*/ |
|
|
|
|
static const char *get_error_text(const int error) |
|
|
|
|
{ |
|
|
|
|
static char error_buffer[255]; |
|
|
|
|
av_strerror(error, error_buffer, sizeof(error_buffer)); |
|
|
|
|
return error_buffer; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** Open an input file and the required decoder. */ |
|
|
|
|
static int open_input_file(const char *filename, |
|
|
|
|
AVFormatContext **input_format_context, |
|
|
|
@ -70,7 +58,7 @@ static int open_input_file(const char *filename, |
|
|
|
|
if ((error = avformat_open_input(input_format_context, filename, NULL, |
|
|
|
|
NULL)) < 0) { |
|
|
|
|
fprintf(stderr, "Could not open input file '%s' (error '%s')\n", |
|
|
|
|
filename, get_error_text(error)); |
|
|
|
|
filename, av_err2str(error)); |
|
|
|
|
*input_format_context = NULL; |
|
|
|
|
return error; |
|
|
|
|
} |
|
|
|
@ -78,7 +66,7 @@ static int open_input_file(const char *filename, |
|
|
|
|
/** Get information on the input file (number of streams etc.). */ |
|
|
|
|
if ((error = avformat_find_stream_info(*input_format_context, NULL)) < 0) { |
|
|
|
|
fprintf(stderr, "Could not open find stream info (error '%s')\n", |
|
|
|
|
get_error_text(error)); |
|
|
|
|
av_err2str(error)); |
|
|
|
|
avformat_close_input(input_format_context); |
|
|
|
|
return error; |
|
|
|
|
} |
|
|
|
@ -117,7 +105,7 @@ static int open_input_file(const char *filename, |
|
|
|
|
/** Open the decoder for the audio stream to use it later. */ |
|
|
|
|
if ((error = avcodec_open2(avctx, input_codec, NULL)) < 0) { |
|
|
|
|
fprintf(stderr, "Could not open input codec (error '%s')\n", |
|
|
|
|
get_error_text(error)); |
|
|
|
|
av_err2str(error)); |
|
|
|
|
avcodec_free_context(&avctx); |
|
|
|
|
avformat_close_input(input_format_context); |
|
|
|
|
return error; |
|
|
|
@ -149,7 +137,7 @@ static int open_output_file(const char *filename, |
|
|
|
|
if ((error = avio_open(&output_io_context, filename, |
|
|
|
|
AVIO_FLAG_WRITE)) < 0) { |
|
|
|
|
fprintf(stderr, "Could not open output file '%s' (error '%s')\n", |
|
|
|
|
filename, get_error_text(error)); |
|
|
|
|
filename, av_err2str(error)); |
|
|
|
|
return error; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -219,7 +207,7 @@ static int open_output_file(const char *filename, |
|
|
|
|
/** Open the encoder for the audio stream to use it later. */ |
|
|
|
|
if ((error = avcodec_open2(avctx, output_codec, NULL)) < 0) { |
|
|
|
|
fprintf(stderr, "Could not open output codec (error '%s')\n", |
|
|
|
|
get_error_text(error)); |
|
|
|
|
av_err2str(error)); |
|
|
|
|
goto cleanup; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -325,7 +313,7 @@ static int write_output_file_header(AVFormatContext *output_format_context) |
|
|
|
|
int error; |
|
|
|
|
if ((error = avformat_write_header(output_format_context, NULL)) < 0) { |
|
|
|
|
fprintf(stderr, "Could not write output file header (error '%s')\n", |
|
|
|
|
get_error_text(error)); |
|
|
|
|
av_err2str(error)); |
|
|
|
|
return error; |
|
|
|
|
} |
|
|
|
|
return 0; |
|
|
|
@ -349,7 +337,7 @@ static int decode_audio_frame(AVFrame *frame, |
|
|
|
|
*finished = 1; |
|
|
|
|
else { |
|
|
|
|
fprintf(stderr, "Could not read frame (error '%s')\n", |
|
|
|
|
get_error_text(error)); |
|
|
|
|
av_err2str(error)); |
|
|
|
|
return error; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -363,7 +351,7 @@ static int decode_audio_frame(AVFrame *frame, |
|
|
|
|
if ((error = avcodec_decode_audio4(input_codec_context, frame, |
|
|
|
|
data_present, &input_packet)) < 0) { |
|
|
|
|
fprintf(stderr, "Could not decode frame (error '%s')\n", |
|
|
|
|
get_error_text(error)); |
|
|
|
|
av_err2str(error)); |
|
|
|
|
av_packet_unref(&input_packet); |
|
|
|
|
return error; |
|
|
|
|
} |
|
|
|
@ -410,7 +398,7 @@ static int init_converted_samples(uint8_t ***converted_input_samples, |
|
|
|
|
output_codec_context->sample_fmt, 0)) < 0) { |
|
|
|
|
fprintf(stderr, |
|
|
|
|
"Could not allocate converted input samples (error '%s')\n", |
|
|
|
|
get_error_text(error)); |
|
|
|
|
av_err2str(error)); |
|
|
|
|
av_freep(&(*converted_input_samples)[0]); |
|
|
|
|
free(*converted_input_samples); |
|
|
|
|
return error; |
|
|
|
@ -434,7 +422,7 @@ static int convert_samples(const uint8_t **input_data, |
|
|
|
|
converted_data, frame_size, |
|
|
|
|
input_data , frame_size)) < 0) { |
|
|
|
|
fprintf(stderr, "Could not convert input samples (error '%s')\n", |
|
|
|
|
get_error_text(error)); |
|
|
|
|
av_err2str(error)); |
|
|
|
|
return error; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -567,7 +555,7 @@ static int init_output_frame(AVFrame **frame, |
|
|
|
|
*/ |
|
|
|
|
if ((error = av_frame_get_buffer(*frame, 0)) < 0) { |
|
|
|
|
fprintf(stderr, "Could not allocate output frame samples (error '%s')\n", |
|
|
|
|
get_error_text(error)); |
|
|
|
|
av_err2str(error)); |
|
|
|
|
av_frame_free(frame); |
|
|
|
|
return error; |
|
|
|
|
} |
|
|
|
@ -602,7 +590,7 @@ static int encode_audio_frame(AVFrame *frame, |
|
|
|
|
if ((error = avcodec_encode_audio2(output_codec_context, &output_packet, |
|
|
|
|
frame, data_present)) < 0) { |
|
|
|
|
fprintf(stderr, "Could not encode frame (error '%s')\n", |
|
|
|
|
get_error_text(error)); |
|
|
|
|
av_err2str(error)); |
|
|
|
|
av_packet_unref(&output_packet); |
|
|
|
|
return error; |
|
|
|
|
} |
|
|
|
@ -611,7 +599,7 @@ static int encode_audio_frame(AVFrame *frame, |
|
|
|
|
if (*data_present) { |
|
|
|
|
if ((error = av_write_frame(output_format_context, &output_packet)) < 0) { |
|
|
|
|
fprintf(stderr, "Could not write frame (error '%s')\n", |
|
|
|
|
get_error_text(error)); |
|
|
|
|
av_err2str(error)); |
|
|
|
|
av_packet_unref(&output_packet); |
|
|
|
|
return error; |
|
|
|
|
} |
|
|
|
@ -671,7 +659,7 @@ static int write_output_file_trailer(AVFormatContext *output_format_context) |
|
|
|
|
int error; |
|
|
|
|
if ((error = av_write_trailer(output_format_context)) < 0) { |
|
|
|
|
fprintf(stderr, "Could not write output file trailer (error '%s')\n", |
|
|
|
|
get_error_text(error)); |
|
|
|
|
av_err2str(error)); |
|
|
|
|
return error; |
|
|
|
|
} |
|
|
|
|
return 0; |
|
|
|
|