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 }