Camera tracking integration

===========================

Fixing some problems caused by modifying imbuf from cache
when building proxy and preventing attempt to load image
duting saving it from cache builder.
This commit is contained in:
Sergey Sharybin
2011-08-09 18:26:21 +00:00
parent ba8c5977b0
commit c613a004ab

View File

@@ -764,7 +764,7 @@ void BKE_movieclip_build_proxy_frame(MovieClip *clip, int cfra, int proxy_render
{
char name[FILE_MAXFILE+FILE_MAXDIR];
int quality, rectx, recty, size;
struct ImBuf * ibuf;
ImBuf *ibuf;
MovieClipUser user;
size= rendersize_to_number(proxy_render_size);
@@ -774,22 +774,33 @@ void BKE_movieclip_build_proxy_frame(MovieClip *clip, int cfra, int proxy_render
ibuf= BKE_movieclip_acquire_ibuf_flag(clip, &user, 0);
rectx= ibuf->x*size/100.f;
recty= ibuf->y*size/100.f;
if(ibuf) {
ImBuf *scaleibuf= ibuf;
if (ibuf->x != rectx || ibuf->y != recty) {
IMB_scalefastImBuf(ibuf, (short)rectx, (short)recty);
rectx= ibuf->x*size/100.f;
recty= ibuf->y*size/100.f;
if (ibuf->x != rectx || ibuf->y != recty) {
if(ibuf->refcounter) /* means buffer came from cache and shouldn't be modified */
scaleibuf= IMB_dupImBuf(ibuf);
IMB_scalefastImBuf(scaleibuf, (short)rectx, (short)recty);
}
quality= clip->proxy.quality;
scaleibuf->ftype= JPG | quality;
BLI_lock_thread(LOCK_MOVIECLIP);
BLI_make_existing_file(name);
if(IMB_saveiff(scaleibuf, name, IB_rect | IB_zbuf | IB_zbuffloat)==0)
perror(name);
BLI_unlock_thread(LOCK_MOVIECLIP);
IMB_freeImBuf(ibuf);
if(scaleibuf!=ibuf) IMB_freeImBuf(scaleibuf);
}
quality= clip->proxy.quality;
ibuf->ftype= JPG | quality;
BLI_make_existing_file(name);
if(IMB_saveiff(ibuf, name, IB_rect | IB_zbuf | IB_zbuffloat)==0)
perror(name);
IMB_freeImBuf(ibuf);
}
void free_movieclip(MovieClip *clip)