Changeset 878

Show
Ignore:
Timestamp:
05/17/08 22:39:36 (6 months ago)
Author:
astrange
Message:

Hack to fix VP3. Closes #324

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/FFusionCodec.c

    r876 r878  
    6262        bool            used; 
    6363        long            frameNumber; 
     64        AVFrame         returnedFrame; 
    6465} FFusionBuffer; 
    6566 
     
    12031204        avcodec_get_frame_defaults(&tempFrame); 
    12041205        err = FFusionDecompress(glob, glob->avContext, dataPtr, dataProc, myDrp->width, myDrp->height, &tempFrame, dataSize); 
    1205          
     1206                
    12061207        if (glob->packedType == PACKED_QUICKTIME_KNOWS_ORDER) { 
    12071208                myDrp->buffer = &glob->buffers[glob->lastAllocatedBuffer]; 
    12081209                myDrp->buffer->frameNumber = myDrp->frameNumber; 
     1210                myDrp->buffer->returnedFrame = tempFrame; 
    12091211                myDrp->decoded = true; 
    12101212                return err; 
     
    12201222        glob->decode.lastFrame = myDrp->frameNumber; 
    12211223        myDrp->decoded = true; 
     1224        if (myDrp->buffer) myDrp->buffer->returnedFrame = tempFrame; 
    12221225         
    12231226        FFusionDataMarkRead(&(glob->data), frameData); 
     
    12721275        if(!picture || picture->data[0] == 0) 
    12731276        { 
    1274                 if(glob->lastDisplayedFrame.data[0] != NULL) 
     1277                if(myDrp->buffer->returnedFrame.data[0]) 
     1278                        //Some decoders (vp3) keep their internal buffers in an unusable state 
     1279                        picture = &myDrp->buffer->returnedFrame; 
     1280                else if(glob->lastDisplayedFrame.data[0] != NULL) 
    12751281                        //Display last frame 
    12761282                        picture = &(glob->lastDisplayedFrame); 
     
    16521658         
    16531659        buf->used = false; 
     1660        buf->returnedFrame.data[0] = NULL; 
    16541661         
    16551662        avcodec_default_release_buffer(s, pic);