rtpdec_xiph: Avoid extra memcpy in Xiph RTP depacketizer
authorJosh Allmann <joshua.allmann@gmail.com>
Mon, 19 Jul 2010 18:43:20 +0000 (18:43 +0000)
committerMartin Storsjö <martin@martin.st>
Mon, 19 Jul 2010 18:43:20 +0000 (18:43 +0000)
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

index 9973efc..4c9cad2 100644 (file)
@@ -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;