Ticket #336: copyavframe.diff
| File copyavframe.diff, 1.7 kB (added by astrange, 5 months ago) |
|---|
-
FFusionCodec.c
old new 58 58 59 59 typedef struct 60 60 { 61 AVFrame *frame;61 AVFrame frame; 62 62 bool used; 63 63 long frameNumber; 64 64 } FFusionBuffer; … … 1208 1208 myDrp->buffer->frameNumber = myDrp->frameNumber; 1209 1209 myDrp->decoded = true; 1210 1210 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); 1211 1224 } 1212 if(tempFrame.data[0] == NULL)1213 myDrp->buffer = NULL;1214 else1215 myDrp->buffer = (FFusionBuffer *)tempFrame.opaque;1216 1225 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; 1222 1227 1223 FFusionDataMarkRead(&(glob->data), frameData);1224 1225 1228 FFusionDebugPrint("%p DecodeBand decoded #%d.\n", glob, glob->decode.lastFrame); 1226 1229 1227 1230 return err; … … 1265 1268 AVFrame *picture; 1266 1269 1267 1270 if (myDrp->buffer) 1268 picture = myDrp->buffer->frame;1271 picture = &myDrp->buffer->frame; 1269 1272 else 1270 1273 picture = &glob->lastDisplayedFrame; 1271 1274 … … 1634 1637 for (i = 0; i < FFUSION_MAX_BUFFERS; i++) { 1635 1638 if (!glob->buffers[i].used) { 1636 1639 pic->opaque = &glob->buffers[i]; 1637 glob->buffers[i].frame = pic;1640 glob->buffers[i].frame = *pic; 1638 1641 glob->buffers[i].used = true; 1639 1642 glob->lastAllocatedBuffer = i; 1640 1643 break;
