ImBuf *BKE_movieclip_get_stable_ibuf(MovieClip *clip, MovieClipUser *user, float loc[2], float *scale, float *angle, int postprocess_flag) { ImBuf *ibuf, *stableibuf = NULL; int framenr = user->framenr; ibuf = BKE_movieclip_get_postprocessed_ibuf(clip, user, postprocess_flag); if (!ibuf) return NULL; if (clip->tracking.stabilization.flag & TRACKING_2D_STABILIZATION) { MovieClipCache *cache = clip->cache; stableibuf = get_stable_cached_frame(clip, user, ibuf, framenr, postprocess_flag); if (!stableibuf) stableibuf = put_stabilized_frame_to_cache(clip, user, ibuf, framenr, postprocess_flag); if (loc) copy_v2_v2(loc, cache->stabilized.loc); if (scale) *scale = cache->stabilized.scale; if (angle) *angle = cache->stabilized.angle; } else { if (loc) zero_v2(loc); if (scale) *scale = 1.0f; if (angle) *angle = 0.0f; stableibuf = ibuf; } if (stableibuf != ibuf) { IMB_freeImBuf(ibuf); ibuf = stableibuf; } return ibuf; }
ImBuf *ED_space_clip_get_buffer(SpaceClip *sc) { if (sc->clip) { ImBuf *ibuf; ibuf = BKE_movieclip_get_postprocessed_ibuf(sc->clip, &sc->user, sc->postproc_flag); if (ibuf && (ibuf->rect || ibuf->rect_float)) return ibuf; if (ibuf) IMB_freeImBuf(ibuf); } return NULL; }