diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c index c18dadcbd0f..44de11db7bb 100644 --- a/source/blender/blenkernel/intern/scene.c +++ b/source/blender/blenkernel/intern/scene.c @@ -157,6 +157,11 @@ Scene *add_scene(char *name) sce->r.freqplay= 60; sce->r.depth= 32; + if (sce->r.avicodecdata) { +printf("this is not good\n"); + } +// sce->r.imtype= R_TARGA; + sce->r.stereomode = 1; // no stereo strcpy(sce->r.backbuf, "//backbuf"); diff --git a/source/blender/include/BIF_writeavicodec.h b/source/blender/include/BIF_writeavicodec.h index 98f7281644f..ff347fe494c 100644 --- a/source/blender/include/BIF_writeavicodec.h +++ b/source/blender/include/BIF_writeavicodec.h @@ -40,7 +40,5 @@ void append_avi_codec(int frame); void end_avi_codec(void); int get_avicodec_settings(void); -extern int have_avicodec; -extern char avicdname[128]; #endif diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h index c0e4c06295c..afe0d5f5ab8 100644 --- a/source/blender/makesdna/DNA_scene_types.h +++ b/source/blender/makesdna/DNA_scene_types.h @@ -77,6 +77,8 @@ typedef struct AviCodecData { unsigned int dwFlags; /* flags... see below */ unsigned int dwInterleaveEvery; /* for non-video streams only */ unsigned int pad; + + char avicodecname[128]; } AviCodecData; typedef struct RenderData { diff --git a/source/blender/src/buttons.c b/source/blender/src/buttons.c index 577450a5b32..c491ecf61b2 100644 --- a/source/blender/src/buttons.c +++ b/source/blender/src/buttons.c @@ -6600,10 +6600,10 @@ void renderbuts(void) #endif /* WITH_QUICKTIME */ } else { #ifdef _WIN32 - if(!have_avicodec) + if(G.scene->r.avicodecdata->avicodecname[0] == NULL) uiDefBut(block, LABEL, 0, "Codec: not set.", 892,yofs+42,225,20, 0, 0, 0, 0, 0, ""); else - uiDefBut(block, LABEL, 0, avicdname, 892,yofs+42,225,20, 0, 0, 0, 0, 0, ""); + uiDefBut(block, LABEL, 0, G.scene->r.avicodecdata->avicodecname, 892,yofs+42,225,20, 0, 0, 0, 0, 0, ""); #endif uiDefBut(block, BUT,B_SELECTCODEC, "Set codec", 892,yofs,112,20, 0, 0, 0, 0, 0, "Set codec settings for AVI"); } diff --git a/source/blender/src/filesel.c b/source/blender/src/filesel.c index f78e686ac91..9dc16f56455 100644 --- a/source/blender/src/filesel.c +++ b/source/blender/src/filesel.c @@ -516,7 +516,9 @@ void test_flags_file(SpaceFile *sfile) if(BLI_testextensie(file->relname, ".py")) { file->flags |= PYSCRIPTFILE; } else if( BLI_testextensie(file->relname, ".ttf") + || BLI_testextensie(file->relname, ".ttc") || BLI_testextensie(file->relname, ".pfb") + || BLI_testextensie(file->relname, ".otf") || BLI_testextensie(file->relname, ".otc")) { file->flags |= FTFONTFILE; } else if (G.have_quicktime){ diff --git a/source/blender/src/headerbuttons.c b/source/blender/src/headerbuttons.c index b4a3116459b..62a7a186c81 100644 --- a/source/blender/src/headerbuttons.c +++ b/source/blender/src/headerbuttons.c @@ -2111,7 +2111,6 @@ Scene *copy_scene(Scene *sce, int level) scen->r.avicodecdata->lpFormat = MEM_dupallocN(scen->r.avicodecdata->lpFormat); scen->r.avicodecdata->lpParms = MEM_dupallocN(scen->r.avicodecdata->lpParms); - } return scen; @@ -2204,6 +2203,13 @@ void do_info_buttons(unsigned short event) if(nr==1) { sce= add_scene(G.scene->id.name+2); sce->r= G.scene->r; +#ifdef _WIN32 + if (sce->r.avicodecdata) { + sce->r.avicodecdata = MEM_dupallocN(G.scene->r.avicodecdata); + sce->r.avicodecdata->lpFormat = MEM_dupallocN(G.scene->r.avicodecdata->lpFormat); + sce->r.avicodecdata->lpParms = MEM_dupallocN(G.scene->r.avicodecdata->lpParms); + } +#endif } else sce= copy_scene(G.scene, nr-2); diff --git a/source/blender/src/writeavicodec.c b/source/blender/src/writeavicodec.c index 95d69daaafb..1a72caae39a 100644 --- a/source/blender/src/writeavicodec.c +++ b/source/blender/src/writeavicodec.c @@ -64,8 +64,6 @@ // the output video stream AVICOMPRESSOPTIONS opts; -char avicdname[128]; -int have_avicodec= 0; static int sframe; static PAVIFILE pfile = NULL; @@ -510,6 +508,9 @@ static void init_bmi(BITMAPINFOHEADER *bmi) static void opts_to_acd(AviCodecData *acd) { + HIC hic; + ICINFO icinfo; + acd->fccType = opts.fccType; acd->fccHandler = opts.fccHandler; acd->dwKeyFrameEvery = opts.dwKeyFrameEvery; @@ -529,6 +530,18 @@ static void opts_to_acd(AviCodecData *acd) acd->lpParms = MEM_mallocN(opts.cbParms, "avi.lpParms"); memcpy(acd->lpParms, opts.lpParms, opts.cbParms); } + + if ((hic=ICOpen(ICTYPE_VIDEO,acd->fccHandler,ICMODE_QUERY))!=NULL) { + icinfo.dwSize=sizeof(ICINFO); + if (ICGetInfo(hic,&icinfo,sizeof(ICINFO))) { + WideCharToMultiByte(CP_ACP,0,icinfo.szDescription,-1,acd->avicodecname,128,NULL,NULL); + } else + sprintf(acd->avicodecname, "undefined"); + if (ICClose(hic)!=ICERR_OK) +;// return 0; + } else { + sprintf(acd->avicodecname, "Full Frames (Uncompressed)"); //heh, nasty + } } @@ -769,8 +782,6 @@ int get_avicodec_settings(void) AVICOMPRESSOPTIONS *aopts[1] = {&opts}; AviCodecData *acd = G.scene->r.avicodecdata; static PAVISTREAM psdummy; - HIC hic; - ICINFO icinfo; acd_to_opts(G.scene->r.avicodecdata); @@ -788,20 +799,6 @@ int get_avicodec_settings(void) { ret_val = 1; } else { - have_avicodec = 1; - - if ((hic=ICOpen(ICTYPE_VIDEO,opts.fccHandler,ICMODE_QUERY))!=NULL) { - icinfo.dwSize=sizeof(ICINFO); - if (ICGetInfo(hic,&icinfo,sizeof(ICINFO))) { - WideCharToMultiByte(CP_ACP,0,icinfo.szDescription,-1,avicdname,128,NULL,NULL); - } else - sprintf(avicdname, "undefined"); - if (ICClose(hic)!=ICERR_OK) - return 0; - } else { - sprintf(avicdname, "Full Frames (Uncompressed)"); //heh, nasty - } - if (acd) { free_avicodecdata(acd); } else {