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