From 7d894aeb60d767852ba9d5a4a2480abac17846ee Mon Sep 17 00:00:00 2001 From: Josh Allmann Date: Mon, 19 Jul 2010 18:43:20 +0000 Subject: [PATCH] rtpdec_xiph: Avoid extra memcpy in Xiph RTP depacketizer Patch by Josh Allmann, joshua dot allmann at gmail Originally committed as revision 24334 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavformat/rtpdec_xiph.c | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/libavformat/rtpdec_xiph.c b/libavformat/rtpdec_xiph.c index 9973efcd73..4c9cad2877 100644 --- a/libavformat/rtpdec_xiph.c +++ b/libavformat/rtpdec_xiph.c @@ -178,24 +178,18 @@ static int xiph_handle_packet(AVFormatContext * ctx, if (fragmented == 3) { // end of xiph data packet - uint8_t* xiph_data; - int frame_size = url_close_dyn_buf(data->fragment, &xiph_data); + av_init_packet(pkt); + pkt->size = url_close_dyn_buf(data->fragment, &pkt->data); - if (frame_size < 0) { + if (pkt->size < 0) { av_log(ctx, AV_LOG_ERROR, "Error occurred when getting fragment buffer."); - return frame_size; + return pkt->size; } - if (av_new_packet(pkt, frame_size)) { - av_log(ctx, AV_LOG_ERROR, "Out of memory.\n"); - return AVERROR(ENOMEM); - } - - memcpy(pkt->data, xiph_data, frame_size); pkt->stream_index = st->index; + pkt->destruct = av_destruct_packet; - av_free(xiph_data); data->fragment = NULL; return 0;