Changeset 878
- Timestamp:
- 05/17/08 22:39:36 (6 months ago)
- Files:
-
- trunk/FFusionCodec.c (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/FFusionCodec.c
r876 r878 62 62 bool used; 63 63 long frameNumber; 64 AVFrame returnedFrame; 64 65 } FFusionBuffer; 65 66 … … 1203 1204 avcodec_get_frame_defaults(&tempFrame); 1204 1205 err = FFusionDecompress(glob, glob->avContext, dataPtr, dataProc, myDrp->width, myDrp->height, &tempFrame, dataSize); 1205 1206 1206 1207 if (glob->packedType == PACKED_QUICKTIME_KNOWS_ORDER) { 1207 1208 myDrp->buffer = &glob->buffers[glob->lastAllocatedBuffer]; 1208 1209 myDrp->buffer->frameNumber = myDrp->frameNumber; 1210 myDrp->buffer->returnedFrame = tempFrame; 1209 1211 myDrp->decoded = true; 1210 1212 return err; … … 1220 1222 glob->decode.lastFrame = myDrp->frameNumber; 1221 1223 myDrp->decoded = true; 1224 if (myDrp->buffer) myDrp->buffer->returnedFrame = tempFrame; 1222 1225 1223 1226 FFusionDataMarkRead(&(glob->data), frameData); … … 1272 1275 if(!picture || picture->data[0] == 0) 1273 1276 { 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) 1275 1281 //Display last frame 1276 1282 picture = &(glob->lastDisplayedFrame); … … 1652 1658 1653 1659 buf->used = false; 1660 buf->returnedFrame.data[0] = NULL; 1654 1661 1655 1662 avcodec_default_release_buffer(s, pic);
