Ticket #336: copyavframe.diff

File copyavframe.diff, 1.7 kB (added by astrange, 5 months ago)

fixes VP3, breaks H.264+PACKED_QUICKTIME_KNOWS_ORDER

  • FFusionCodec.c

    old new  
    5858 
    5959typedef struct 
    6060{ 
    61         AVFrame         *frame; 
     61        AVFrame         frame; 
    6262        bool            used; 
    6363        long            frameNumber; 
    6464} FFusionBuffer; 
     
    12081208                myDrp->buffer->frameNumber = myDrp->frameNumber; 
    12091209                myDrp->decoded = true; 
    12101210                return err; 
     1211        } else { 
     1212                if(tempFrame.data[0] == NULL) 
     1213                        myDrp->buffer = NULL; 
     1214                else 
     1215                        myDrp->buffer = (FFusionBuffer *)tempFrame.opaque; 
     1216                 
     1217                if(tempFrame.pict_type == FF_I_TYPE) 
     1218                /* Wipe memory of past P frames */ 
     1219                        glob->decode.futureBuffer = NULL; 
     1220                glob->decode.lastFrame = myDrp->frameNumber; 
     1221                myDrp->decoded = true; 
     1222                 
     1223                FFusionDataMarkRead(&(glob->data), frameData); 
    12111224        } 
    1212         if(tempFrame.data[0] == NULL) 
    1213                 myDrp->buffer = NULL; 
    1214         else 
    1215                 myDrp->buffer = (FFusionBuffer *)tempFrame.opaque; 
    12161225         
    1217         if(tempFrame.pict_type == FF_I_TYPE) 
    1218                 /* Wipe memory of past P frames */ 
    1219                 glob->decode.futureBuffer = NULL; 
    1220         glob->decode.lastFrame = myDrp->frameNumber; 
    1221         myDrp->decoded = true; 
     1226        if (myDrp->buffer) myDrp->buffer->frame = tempFrame; 
    12221227         
    1223         FFusionDataMarkRead(&(glob->data), frameData); 
    1224          
    12251228        FFusionDebugPrint("%p DecodeBand decoded #%d.\n", glob, glob->decode.lastFrame); 
    12261229 
    12271230        return err; 
     
    12651268        AVFrame *picture; 
    12661269         
    12671270        if (myDrp->buffer) 
    1268                 picture = myDrp->buffer->frame; 
     1271                picture = &myDrp->buffer->frame; 
    12691272        else 
    12701273                picture = &glob->lastDisplayedFrame; 
    12711274         
     
    16341637                for (i = 0; i < FFUSION_MAX_BUFFERS; i++) { 
    16351638                        if (!glob->buffers[i].used) { 
    16361639                                pic->opaque = &glob->buffers[i]; 
    1637                                 glob->buffers[i].frame = pic; 
     1640                                glob->buffers[i].frame = *pic; 
    16381641                                glob->buffers[i].used = true; 
    16391642                                glob->lastAllocatedBuffer = i; 
    16401643                                break;