doc/examples/transcode_aac: use av_packet_alloc() to allocate packets
Signed-off-by: James Almer <jamrial@gmail.com>
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user