Changeset 980

Show
Ignore:
Timestamp:
12/03/08 13:57:17 (1 month ago)
Author:
gbooker
Message:

Corrected my previous commit

  • Keep frame data around until the end of the GOP (crasher fix)
  • Corrected case where framebuffer didn't preserve data correctly on first frame after expansion
  • Corrected freeing of previous framebuffers' data
Files:

Legend:

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

    r976 r980  
    10171017                                myDrp->frameNumber = p->frameNumber; 
    10181018                                myDrp->GOPStartFrameNumber = glob->begin.lastIFrame; 
    1019                                 frameData->hold = 0; 
    1020                                 if(frameData->prereqFrame) 
    1021                                         frameData->prereqFrame->hold = 1; 
    10221019                                return noErr; 
    10231020                        } 
  • trunk/FrameBuffer.c

    r976 r980  
    4040                free(data->previousData); 
    4141        } 
     42        av_free(data->ringBuffer); 
    4243} 
    4344 
     
    9293        { 
    9394                expansion(data, dataSize); 
     95                data->ringWrite = dataSize; 
    9496                return data->ringBuffer; 
    9597        } 
     
    113115        FrameData *dest = data->frames + data->frameWrite; 
    114116         
    115         uint8_t *saveBuffer = insertIntoBuffer(data, buffer, dataSize); 
    116         dest->buffer = saveBuffer; 
     117        if(data->unparsedFrames.buffer == buffer)  
     118        {                 
     119                //This was an unparsed frame, don't memcpy; it's already in the correct place.  
     120                dest->buffer = buffer;  
     121                data->unparsedFrames.buffer += dataSize;  
     122                data->unparsedFrames.dataSize -= dataSize;  
     123        }  
     124        else  
     125        {  
     126                uint8_t *saveBuffer = insertIntoBuffer(data, buffer, dataSize);  
     127                dest->buffer = saveBuffer;  
     128        }  
    117129        dest->dataSize = dataSize; 
    118130        dest->type = type; 
     
    129141        FrameData *unparsed = &(data->unparsedFrames); 
    130142         
    131         unparsed->buffer = insertIntoBuffer(data, buffer, bufferSize); 
    132         if (unparsed->buffer) { 
    133                 memcpy(unparsed->buffer, buffer, bufferSize); 
    134                 unparsed->dataSize = bufferSize; 
    135         } 
    136 
    137  
     143        if(unparsed->buffer == buffer)  
     144        {  
     145                //This part was already unparsed; don't memcpy again  
     146                unparsed->dataSize = bufferSize;  
     147        } 
     148        else 
     149        { 
     150                unparsed->buffer = insertIntoBuffer(data, buffer, bufferSize);  
     151                if (unparsed->buffer) {  
     152                        memcpy(unparsed->buffer, buffer, bufferSize);  
     153                        unparsed->dataSize = bufferSize;  
     154                } 
     155        } 
     156
     157                 
    138158void FFusionDataReadUnparsed(FFusionData *data) 
    139159{ 
     
    155175                return; 
    156176         
    157         if(toData->prereqFrame != NULL && toData->prereqFrame->hold
     177        if(toData->prereqFrame != NULL
    158178                return; 
    159179         
  • trunk/FrameBuffer.h

    r976 r980  
    1919        short                   skippabble; 
    2020        short                   decoded; 
    21         short                   hold; 
    2221        FrameData               *prereqFrame;  /* This is the frame's data which must be decoded to fully display this frame */ 
    2322        FrameData               *nextFrame; /* This is the next frame to decode if this one is already decoded.  This is for predictive decoding */ 
  • trunk/Subtitles/SubImport.mm

    r979 r980  
    6565 
    6666//Use ugly transparency ("transparent" blend mode) for files imported in Front Row  
    67 //At the moment it doesn't support graphicsModePreBlackAlpha static bool ShouldEngageFrontRowHack(void) 
     67//At the moment it doesn't support graphicsModePreBlackAlpha 
     68static bool ShouldEngageFrontRowHack(void) 
    6869{ 
    6970        bool ret;