Change a way how image sequence/movie source is detecting for movie clip

Use IMB_testiffname to check whether file could be handled by ImBuf or
whether it should be handled by anim routines.

It solves the issue when file without extension is used for movie clip.
This commit is contained in:
Sergey Sharybin
2012-11-05 10:32:47 +00:00
parent 71b8469e3b
commit 316d33ea0b
4 changed files with 27 additions and 12 deletions

View File

@@ -520,6 +520,24 @@ static void movieclip_load_get_szie(MovieClip *clip)
}
}
static void detect_clip_source(MovieClip *clip)
{
ImBuf *ibuf;
char name[FILE_MAX];
BLI_strncpy(name, clip->name, sizeof(name));
BLI_path_abs(name, G.main->name);
ibuf = IMB_testiffname(name, IB_rect | IB_multilayer);
if (ibuf) {
clip->source = MCLIP_SRC_SEQUENCE;
IMB_freeImBuf(ibuf);
}
else {
clip->source = MCLIP_SRC_MOVIE;
}
}
/* checks if image was already loaded, then returns same image
* otherwise creates new.
* does not load ibuf itself
@@ -565,10 +583,7 @@ MovieClip *BKE_movieclip_file_add(const char *name)
clip = movieclip_alloc(libname);
BLI_strncpy(clip->name, name, sizeof(clip->name));
if (BLI_testextensie_array(name, imb_ext_movie))
clip->source = MCLIP_SRC_MOVIE;
else
clip->source = MCLIP_SRC_SEQUENCE;
detect_clip_source(clip);
movieclip_load_get_szie(clip);
if (clip->lastsize[0]) {
@@ -1082,10 +1097,7 @@ void BKE_movieclip_reload(MovieClip *clip)
clip->tracking.stabilization.ok = FALSE;
/* update clip source */
if (BLI_testextensie_array(clip->name, imb_ext_movie))
clip->source = MCLIP_SRC_MOVIE;
else
clip->source = MCLIP_SRC_SEQUENCE;
detect_clip_source(clip);
clip->lastsize[0] = clip->lastsize[1] = 0;
movieclip_load_get_szie(clip);

View File

@@ -103,7 +103,7 @@ struct ImBuf *IMB_ibImageFromMemory(unsigned char *mem, size_t size, int flags,
*
* \attention Defined in readimage.c
*/
struct ImBuf *IMB_testiffname(const char *filepath, int flags, char colorspace[IM_MAX_SPACE]);
struct ImBuf *IMB_testiffname(const char *filepath, int flags);
/**
*

View File

@@ -558,7 +558,8 @@ ImBuf *imb_loadpng(unsigned char *mem, size_t size, int flags, char colorspace[I
MEM_freeN(pixels);
if (pixels16)
MEM_freeN(pixels16);
MEM_freeN(row_pointers);
if (row_pointers)
MEM_freeN(row_pointers);
png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL);
return(ibuf);

View File

@@ -100,7 +100,8 @@ ImBuf *IMB_ibImageFromMemory(unsigned char *mem, size_t size, int flags, char co
}
}
fprintf(stderr, "%s: unknown fileformat (%s)\n", __func__, descr);
if ((flags & IB_test) == 0)
fprintf(stderr, "%s: unknown fileformat (%s)\n", __func__, descr);
return NULL;
}
@@ -170,11 +171,12 @@ ImBuf *IMB_loadiffname(const char *filepath, int flags, char colorspace[IM_MAX_S
return ibuf;
}
ImBuf *IMB_testiffname(const char *filepath, int flags, char colorspace[IM_MAX_SPACE])
ImBuf *IMB_testiffname(const char *filepath, int flags)
{
ImBuf *ibuf;
int file;
char filepath_tx[IB_FILENAME_SIZE];
char colorspace[IM_MAX_SPACE];
imb_cache_filename(filepath_tx, filepath, flags);