1 /***************************************************************************
2 \fn ADM_Xvid4
3 \brief Front end for xvid4 Mpeg4 asp encoder
4 -------------------
5
6 copyright : (C) 2002/2009 by mean/gruntster
7 email : fixounet@free.fr
8 ***************************************************************************/
9
10 /***************************************************************************
11 * *
12 * This program is free software; you can redistribute it and/or modify *
13 * it under the terms of the GNU General Public License as published by *
14 * the Free Software Foundation; either version 2 of the License, or *
15 * (at your option) any later version. *
16 * *
17 ***************************************************************************/
18 #include "ADM_default.h"
19 #include "ADM_x264.h"
20 #undef ADM_MINIMAL_UI_INTERFACE // we need the full UI
21 #include "DIA_factory.h"
22 #include "x264.h"
23
24 #if 1
25 #define aprintf(...) {}
26 #else
27 #define aprintf printf
28 #endif
29 /**
30 \fn jpegConfigure
31 \brief UI configuration for jpeg encoder
32 */
33 extern x264_encoder x264Settings;
x264Configure(void)34 bool x264Configure(void)
35 {
36
37
38 diaMenuEntry threads[]={
39 {1,QT_TR_NOOP("One thread")},
40 {2,QT_TR_NOOP("Two threads)")},
41 {3,QT_TR_NOOP("Three threads")},
42 {99,QT_TR_NOOP("Auto (#cpu)")}
43 };
44 #define PX(x) &(x264Settings.x)
45 // Main
46 int nbPreset=sizeof(x264_preset_names)/sizeof(const char *);
47 int nbTunes=sizeof(x264_tune_names)/sizeof(const char *);
48
49
50 #define MKMENUENTRY(N,out,array) diaMenuEntry out[N]; \
51 for(int i=0;i<N;i++) {out[i].val=i;out[i].text=array[i];out[i].desc=NULL;}
52
53 MKMENUENTRY(nbPreset,presetEntries,x264_preset_names);
54 MKMENUENTRY(nbTunes,tuneEntries,x264_tune_names);
55
56
57 diaElemMenu presetMenu(PX(preset),QT_TR_NOOP("Preset"),nbPreset,presetEntries);
58 diaElemMenu tuneMenu(PX(tune),QT_TR_NOOP("Tune"),nbTunes,tuneEntries);
59
60 uint32_t presetToggle=(uint32_t)x264Settings.usePreset;
61 uint32_t tuneToggle=(uint32_t)x264Settings.useTune;
62 diaElemToggle usePreset(&presetToggle,QT_TR_NOOP("Use preset"));
63 diaElemToggle useTune(&tuneToggle, QT_TR_NOOP("Use tune"));
64
65 uint32_t trelBol=*PX(Trellis);
66 uint32_t cabacBol=*PX(CABAC);
67
68 diaElemToggle trellis(&trelBol,QT_TR_NOOP("_Trellis quantization"));
69 diaElemToggle cabac(&cabacBol,QT_TR_NOOP("Cabac encoding"));
70
71 diaElemUInteger GopSize(PX(MaxIdr),QT_TR_NOOP("_Gop Size:"),1,500);
72 diaElemUInteger max_b_frames(PX(MaxBFrame),QT_TR_NOOP("Max B Frames:"),0,5);
73 diaElemBitrate bitrate(&(x264Settings.params),NULL);
74 diaElemMenu threadM(PX(threads),QT_TR_NOOP("Threading"),4,threads);
75
76 diaElemUInteger profile(PX(profile),QT_TR_NOOP("Profile:"),10,50);
77
78 //-------------------
79
80 /* First Tab : encoding mode */
81 diaElem *diaMain[]={&usePreset,&presetMenu,&useTune,&tuneMenu,&profile};
82 diaElemTabs tabMain(QT_TR_NOOP("Main"),5,diaMain);
83
84
85 diaElemFrame frameMe(QT_TR_NOOP("Main"));
86 frameMe.swallow(&max_b_frames);
87 frameMe.swallow(&GopSize);
88 frameMe.swallow(&bitrate);
89
90
91 diaElem *diaME[]={&frameMe};
92 diaElemTabs tabME(QT_TR_NOOP("Encoding mode"),1,diaME);
93
94 /* 2nd Tab : Qz */
95
96 diaElem *diaQze[]={&trellis,&cabac};
97 diaElemTabs tabQz(QT_TR_NOOP("Quantization"),2,diaQze);
98
99 /* 3th Tab : thread */
100 diaElem *diaThread[]={&threadM};
101 diaElemTabs tabThread(QT_TR_NOOP("Threads"),1,diaThread);
102
103 diaElemTabs *tabs[]={&tabMain,&tabME,&tabQz,&tabThread};
104
105 // usePreset.link(0,&trellis);
106 //usePreset.link(0,&cabac);
107
108 usePreset.link(1,&presetMenu);
109 useTune.link(1,&tuneMenu);
110
111 if( diaFactoryRunTabs(QT_TR_NOOP("X264 MPEG-4 AVC configuration"),4,tabs))
112 {
113 *PX(Trellis)= trelBol;
114 *PX(CABAC)= cabacBol;
115 *PX(usePreset)= presetToggle;
116 *PX(useTune)= tuneToggle;
117 return true;
118 }
119
120 return false;
121 }