FIX: [#37199] .ogg file is not recognized as a movie in File Browser

CHANGE: writing an animation in the ogg movie format now defaults to .ogv (ogg/video) which is recommended by Xiph.org for video
CHANGE: for .ogg files a check is added whether Blender can read it as a movie (is avi or ffmpeg movie), otherwise assume audio
CHANGE: the anim player now filters for the same extensions as the file browser
This commit is contained in:
Andrea Weikert 2013-10-31 21:00:55 +00:00
parent c9fdec14f5
commit fc0e225a77
3 changed files with 52 additions and 37 deletions

@ -295,7 +295,7 @@ static const char **get_file_extensions(int format)
}
case FFMPEG_OGG:
{
static const char *rv[] = { ".ogg", ".ogv", NULL };
static const char *rv[] = { ".ogv", ".ogg", NULL };
return rv;
}
case FFMPEG_MP3:

@ -764,56 +764,69 @@ static int file_is_blend_backup(const char *str)
return (retval);
}
static int file_extension_type(const char *relname)
static int path_extension_type(const char *path)
{
if (BLO_has_bfile_extension(relname)) {
if (BLO_has_bfile_extension(path)) {
return BLENDERFILE;
}
else if (file_is_blend_backup(relname)) {
else if (file_is_blend_backup(path)) {
return BLENDERFILE_BACKUP;
}
else if (BLI_testextensie(relname, ".py")) {
else if (BLI_testextensie(path, ".py")) {
return PYSCRIPTFILE;
}
else if (BLI_testextensie(relname, ".txt") ||
BLI_testextensie(relname, ".glsl") ||
BLI_testextensie(relname, ".osl") ||
BLI_testextensie(relname, ".data"))
else if (BLI_testextensie(path, ".txt") ||
BLI_testextensie(path, ".glsl") ||
BLI_testextensie(path, ".osl") ||
BLI_testextensie(path, ".data"))
{
return TEXTFILE;
}
else if (BLI_testextensie(relname, ".ttf") ||
BLI_testextensie(relname, ".ttc") ||
BLI_testextensie(relname, ".pfb") ||
BLI_testextensie(relname, ".otf") ||
BLI_testextensie(relname, ".otc"))
else if (BLI_testextensie(path, ".ttf") ||
BLI_testextensie(path, ".ttc") ||
BLI_testextensie(path, ".pfb") ||
BLI_testextensie(path, ".otf") ||
BLI_testextensie(path, ".otc"))
{
return FTFONTFILE;
}
else if (BLI_testextensie(relname, ".btx")) {
else if (BLI_testextensie(path, ".btx")) {
return BTXFILE;
}
else if (BLI_testextensie(relname, ".dae")) {
else if (BLI_testextensie(path, ".dae")) {
return COLLADAFILE;
}
else if (BLI_testextensie_array(relname, imb_ext_image) ||
(G.have_quicktime && BLI_testextensie_array(relname, imb_ext_image_qt)))
else if (BLI_testextensie_array(path, imb_ext_image) ||
(G.have_quicktime && BLI_testextensie_array(path, imb_ext_image_qt)))
{
return IMAGEFILE;
}
else if (BLI_testextensie_array(relname, imb_ext_movie)) {
else if (BLI_testextensie(path, ".ogg")) {
if (IMB_isanim(path)) {
return MOVIEFILE;
} else {
return SOUNDFILE;
}
}
else if (BLI_testextensie_array(path, imb_ext_movie)) {
return MOVIEFILE;
}
else if (BLI_testextensie_array(relname, imb_ext_audio)) {
else if (BLI_testextensie_array(path, imb_ext_audio)) {
return SOUNDFILE;
}
return 0;
}
int ED_file_extension_icon(const char *relname)
static int file_extension_type(const char *dir, const char *relname)
{
int type = file_extension_type(relname);
char path[FILE_MAX];
BLI_join_dirfile(path, sizeof(path), dir, relname);
return path_extension_type(path);
}
int ED_file_extension_icon(const char *path)
{
int type = path_extension_type(path);
if (type == BLENDERFILE)
return ICON_FILE_BLEND;
@ -853,7 +866,7 @@ static void filelist_setfiletypes(struct FileList *filelist)
if (file->type & S_IFDIR) {
continue;
}
file->flags = file_extension_type(file->relname);
file->flags = file_extension_type(filelist->dir, file->relname);
if (filelist->filter_glob[0] &&
BLI_testextensie_glob(file->relname, filelist->filter_glob))

@ -120,6 +120,17 @@ const char *imb_ext_image_qt[] = {
NULL
};
const char *imb_ext_movie_qt[] = {
".avi",
".flc",
".dv",
".r3d",
".mov",
".movie",
".mv",
NULL
};
const char *imb_ext_movie[] = {
".avi",
".flc",
@ -135,6 +146,8 @@ const char *imb_ext_movie[] = {
".avs",
".wmv",
".ogv",
".ogg",
".r3d",
".dv",
".mpeg",
".mpg",
@ -449,14 +462,7 @@ int IMB_isanim(const char *filename)
if (U.uiflag & USER_FILTERFILEEXTS) {
if (G.have_quicktime) {
if (BLI_testextensie(filename, ".avi") ||
BLI_testextensie(filename, ".flc") ||
BLI_testextensie(filename, ".dv") ||
BLI_testextensie(filename, ".r3d") ||
BLI_testextensie(filename, ".mov") ||
BLI_testextensie(filename, ".movie") ||
BLI_testextensie(filename, ".mv"))
{
if (BLI_testextensie_array(filename, imb_ext_movie_qt)) {
type = imb_get_anim_type(filename);
}
else {
@ -464,11 +470,7 @@ int IMB_isanim(const char *filename)
}
}
else { /* no quicktime */
if (BLI_testextensie(filename, ".avi") ||
BLI_testextensie(filename, ".dv") ||
BLI_testextensie(filename, ".r3d") ||
BLI_testextensie(filename, ".mv"))
{
if (BLI_testextensie_array(filename, imb_ext_movie)) {
type = imb_get_anim_type(filename);
}
else {