doc/examples/transcode_aac: use av_packet_alloc() to allocate packets

Signed-off-by: James Almer <jamrial@gmail.com>
This commit is contained in:
James Almer
2021-01-31 13:33:56 -03:00
parent 07b788c8af
commit 16dba17329

View File

@@ -245,14 +245,16 @@ cleanup:
/** /**
* Initialize one data packet for reading or writing. * Initialize one data packet for reading or writing.
* @param packet Packet to be initialized * @param[out] packet Packet to be initialized
* @return Error code (0 if successful)
*/ */
static void init_packet(AVPacket *packet) static int init_packet(AVPacket **packet)
{ {
av_init_packet(packet); if (!(*packet = av_packet_alloc())) {
/* Set the packet data and size so that it is recognized as being empty. */ fprintf(stderr, "Could not allocate packet\n");
packet->data = NULL; return AVERROR(ENOMEM);
packet->size = 0; }
return 0;
} }
/** /**
@@ -371,28 +373,31 @@ static int decode_audio_frame(AVFrame *frame,
int *data_present, int *finished) int *data_present, int *finished)
{ {
/* Packet used for temporary storage. */ /* Packet used for temporary storage. */
AVPacket input_packet; AVPacket *input_packet;
int error; int error;
init_packet(&input_packet);
error = init_packet(&input_packet);
if (error < 0)
return error;
/* Read one audio frame from the input file into a temporary packet. */ /* Read one audio frame from the input file into a temporary packet. */
if ((error = av_read_frame(input_format_context, &input_packet)) < 0) { if ((error = av_read_frame(input_format_context, input_packet)) < 0) {
/* If we are at the end of the file, flush the decoder below. */ /* If we are at the end of the file, flush the decoder below. */
if (error == AVERROR_EOF) if (error == AVERROR_EOF)
*finished = 1; *finished = 1;
else { else {
fprintf(stderr, "Could not read frame (error '%s')\n", fprintf(stderr, "Could not read frame (error '%s')\n",
av_err2str(error)); av_err2str(error));
return error; goto cleanup;
} }
} }
/* Send the audio frame stored in the temporary packet to the decoder. /* Send the audio frame stored in the temporary packet to the decoder.
* The input audio stream decoder is used to do this. */ * The input audio stream decoder is used to do this. */
if ((error = avcodec_send_packet(input_codec_context, &input_packet)) < 0) { if ((error = avcodec_send_packet(input_codec_context, input_packet)) < 0) {
fprintf(stderr, "Could not send packet for decoding (error '%s')\n", fprintf(stderr, "Could not send packet for decoding (error '%s')\n",
av_err2str(error)); av_err2str(error));
return error; goto cleanup;
} }
/* Receive one frame from the decoder. */ /* Receive one frame from the decoder. */
@@ -418,7 +423,7 @@ static int decode_audio_frame(AVFrame *frame,
} }
cleanup: cleanup:
av_packet_unref(&input_packet); av_packet_free(&input_packet);
return error; return error;
} }
@@ -661,9 +666,12 @@ static int encode_audio_frame(AVFrame *frame,
int *data_present) int *data_present)
{ {
/* Packet used for temporary storage. */ /* Packet used for temporary storage. */
AVPacket output_packet; AVPacket *output_packet;
int error; int error;
init_packet(&output_packet);
error = init_packet(&output_packet);
if (error < 0)
return error;
/* Set a timestamp based on the sample rate for the container. */ /* Set a timestamp based on the sample rate for the container. */
if (frame) { if (frame) {
@@ -681,11 +689,11 @@ static int encode_audio_frame(AVFrame *frame,
} else if (error < 0) { } else if (error < 0) {
fprintf(stderr, "Could not send packet for encoding (error '%s')\n", fprintf(stderr, "Could not send packet for encoding (error '%s')\n",
av_err2str(error)); av_err2str(error));
return error; goto cleanup;
} }
/* Receive one encoded frame from the encoder. */ /* Receive one encoded frame from the encoder. */
error = avcodec_receive_packet(output_codec_context, &output_packet); error = avcodec_receive_packet(output_codec_context, output_packet);
/* If the encoder asks for more data to be able to provide an /* If the encoder asks for more data to be able to provide an
* encoded frame, return indicating that no data is present. */ * encoded frame, return indicating that no data is present. */
if (error == AVERROR(EAGAIN)) { if (error == AVERROR(EAGAIN)) {
@@ -706,14 +714,14 @@ static int encode_audio_frame(AVFrame *frame,
/* Write one audio frame from the temporary packet to the output file. */ /* Write one audio frame from the temporary packet to the output file. */
if (*data_present && if (*data_present &&
(error = av_write_frame(output_format_context, &output_packet)) < 0) { (error = av_write_frame(output_format_context, output_packet)) < 0) {
fprintf(stderr, "Could not write frame (error '%s')\n", fprintf(stderr, "Could not write frame (error '%s')\n",
av_err2str(error)); av_err2str(error));
goto cleanup; goto cleanup;
} }
cleanup: cleanup:
av_packet_unref(&output_packet); av_packet_free(&output_packet);
return error; return error;
} }