[SCM] libav/experimental: Optimize memory management to create an av_packet from multiple slices: - remove memmove to pack the data, instead copy only the used areas from the temp buffer in their final position - use the minimum possible size for the av_packet (relevant when some slices are missing)

siretart at users.alioth.debian.org siretart at users.alioth.debian.org
Sun Jun 30 16:09:36 UTC 2013


The following commit has been merged in the experimental branch:
commit e11d0145e29c38a2721fe131728d83512e5c30b9
Author: Roberto Togni <r_togni at tiscali.it>
Date:   Sun Nov 18 22:40:02 2007 +0000

    Optimize memory management to create an av_packet from multiple slices:
    - remove memmove to pack the data, instead copy only the used areas
    from the temp buffer in their final position
    - use the minimum possible size for the av_packet (relevant when some
    slices are missing)
    
    Originally committed as revision 11052 to svn://svn.ffmpeg.org/ffmpeg/trunk

diff --git a/libavformat/rmdec.c b/libavformat/rmdec.c
index 6027e31..8793487 100644
--- a/libavformat/rmdec.c
+++ b/libavformat/rmdec.c
@@ -519,14 +519,11 @@ static int rm_assemble_video_frame(AVFormatContext *s, RMContext *rm, AVPacket *
     rm->remaining_len-= len;
 
     if(type == 2 || (rm->videobufpos) == rm->videobufsize){
-         //adjust slice headers
-         memmove(rm->videobuf + 1 + 8*rm->cur_slice, rm->videobuf + 1 + 8*rm->slices, rm->videobufsize - 1 - 8*rm->slices);
-         ssize = rm->videobufsize - 8*(rm->slices - rm->cur_slice);
-
          rm->videobuf[0] = rm->cur_slice-1;
-         if(av_new_packet(pkt, ssize) < 0)
+         if(av_new_packet(pkt, rm->videobufpos - 8*(rm->slices - rm->cur_slice)) < 0)
              return AVERROR(ENOMEM);
-         memcpy(pkt->data, rm->videobuf, ssize);
+         memcpy(pkt->data, rm->videobuf, 1 + 8*rm->cur_slice);
+         memcpy(pkt->data + 1 + 8*rm->cur_slice, rm->videobuf + 1 + 8*rm->slices, rm->videobufpos - 1 - 8*rm->slices);
          pkt->pts = AV_NOPTS_VALUE;
          pkt->pos = rm->pktpos;
          return 0;

-- 
Libav/FFmpeg packaging



More information about the pkg-multimedia-commits mailing list