Fix T44633: image cache broken for movies and sequences.
After multiview, it was continuously unloading/loading image buffers from the cache due to mismatch in cache insert and lookup keys.
This commit is contained in:
		@@ -3729,9 +3729,10 @@ static size_t image_get_multiview_index(Image *ima, ImageUser *iuser)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	const bool is_multilayer = BKE_image_is_multilayer(ima);
 | 
						const bool is_multilayer = BKE_image_is_multilayer(ima);
 | 
				
			||||||
	const bool is_backdrop = (ima->source == IMA_SRC_VIEWER) && (ima->type ==  IMA_TYPE_COMPOSITE) && (iuser == NULL);
 | 
						const bool is_backdrop = (ima->source == IMA_SRC_VIEWER) && (ima->type ==  IMA_TYPE_COMPOSITE) && (iuser == NULL);
 | 
				
			||||||
 | 
						int index = BKE_image_is_animated(ima) ? 0 : IMA_NO_INDEX;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (is_multilayer) {
 | 
						if (is_multilayer) {
 | 
				
			||||||
		return iuser ? iuser->multi_index : IMA_NO_INDEX;
 | 
							return iuser ? iuser->multi_index : index;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else if (is_backdrop) {
 | 
						else if (is_backdrop) {
 | 
				
			||||||
		if ((ima->flag & IMA_IS_STEREO)) {
 | 
							if ((ima->flag & IMA_IS_STEREO)) {
 | 
				
			||||||
@@ -3740,16 +3741,15 @@ static size_t image_get_multiview_index(Image *ima, ImageUser *iuser)
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else if ((ima->flag & IMA_IS_MULTIVIEW)) {
 | 
						else if ((ima->flag & IMA_IS_MULTIVIEW)) {
 | 
				
			||||||
		return iuser ? iuser->multi_index : 0;
 | 
							return iuser ? iuser->multi_index : index;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return IMA_NO_INDEX;
 | 
						return index;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void image_get_frame_and_index(Image *ima, ImageUser *iuser, int *r_frame, int *r_index)
 | 
					static void image_get_frame_and_index(Image *ima, ImageUser *iuser, int *r_frame, int *r_index)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	int frame = 0, index = 0;
 | 
						int frame = 0, index = image_get_multiview_index(ima, iuser);
 | 
				
			||||||
	index = image_get_multiview_index(ima, iuser);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* see if we already have an appropriate ibuf, with image source and type */
 | 
						/* see if we already have an appropriate ibuf, with image source and type */
 | 
				
			||||||
	if (ima->source == IMA_SRC_MOVIE) {
 | 
						if (ima->source == IMA_SRC_MOVIE) {
 | 
				
			||||||
@@ -3777,9 +3777,7 @@ static void image_get_frame_and_index(Image *ima, ImageUser *iuser, int *r_frame
 | 
				
			|||||||
static ImBuf *image_get_cached_ibuf(Image *ima, ImageUser *iuser, int *r_frame, int *r_index)
 | 
					static ImBuf *image_get_cached_ibuf(Image *ima, ImageUser *iuser, int *r_frame, int *r_index)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	ImBuf *ibuf = NULL;
 | 
						ImBuf *ibuf = NULL;
 | 
				
			||||||
	int frame = 0, index = 0;
 | 
						int frame = 0, index = image_get_multiview_index(ima, iuser);
 | 
				
			||||||
 | 
					 | 
				
			||||||
	index = image_get_multiview_index(ima, iuser);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* see if we already have an appropriate ibuf, with image source and type */
 | 
						/* see if we already have an appropriate ibuf, with image source and type */
 | 
				
			||||||
	if (ima->source == IMA_SRC_MOVIE) {
 | 
						if (ima->source == IMA_SRC_MOVIE) {
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user