[svn] / branches / dev-api-4 / xvidcore / vfw / src / config.c Repository:
ViewVC logotype

Diff of /branches/dev-api-4/xvidcore/vfw/src/config.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1329, Sat Jan 24 13:36:00 2004 UTC revision 1378, Sat Mar 6 11:39:11 2004 UTC
# Line 57  Line 57 
57    
58  #include <windows.h>  #include <windows.h>
59  #include <commctrl.h>  #include <commctrl.h>
 #include <shlobj.h>  
 #include <prsht.h>  
   
60  #include <stdio.h>  /* sprintf */  #include <stdio.h>  /* sprintf */
61  #include <xvid.h>       /* XviD API */  #include <xvid.h>       /* XviD API */
62    
# Line 79  Line 76 
76  HWND g_hTooltip;  HWND g_hTooltip;
77    
78  static int g_use_bitrate = 1;  static int g_use_bitrate = 1;
79    
80    
81  int pp_dy, pp_duv, pp_dr, pp_fe; /* decoder options */  int pp_dy, pp_duv, pp_dr, pp_fe; /* decoder options */
82    
83  /* enumerates child windows, assigns tooltips */  /* enumerates child windows, assigns tooltips */
# Line 146  Line 145 
145  };  };
146    
147    
148    typedef struct {
149            char * name;
150            float value;
151    } named_float_t;
152    
153    static const named_float_t video_fps_list[] = {
154            {  "15.0",                      15.0F   },
155            {  "23.976 (FILM)",     23.976F },
156            {  "25.0 (PAL)",        25.0F   },
157            {  "29.97 (NTSC)",      29.970F },
158            {  "30.0",                      30.0F   }
159    };
160    
161    
162    typedef struct {
163            char * name;
164            int avi_interval;               /* audio overhead intervals (milliseconds) */
165            float mkv_multiplier;   /* mkv multiplier */
166    } named_int_t;
167    
168    
169    #define NO_AUDIO        5
170    static const named_int_t audio_type_list[] = {
171            {       "MP3-CBR",              1000,   48000/1152/6                                    },
172            {       "MP3-VBR",                24,   48000/1152/6                                    },
173            {       "OGG",     /*?*/1000,   48000*(0.7F/1024 + 0.3F/180)    },
174            {       "AC3",                    64,   48000/1536/6                                    },
175            {       "DTS",                    21,   /*?*/48000/1152/6                               },
176            {       "(None)",                  0,   0                                                               },
177    };
178    
179    
180  /* ===================================================================================== */  /* ===================================================================================== */
181  /* REGISTRY ============================================================================ */  /* REGISTRY ============================================================================ */
182  /* ===================================================================================== */  /* ===================================================================================== */
# Line 192  Line 223 
223    
224          /* 2pass1 */          /* 2pass1 */
225          {"discard1pass",                        &reg.discard1pass,                              1},          {"discard1pass",                        &reg.discard1pass,                              1},
226            {"full1pass",                           &reg.full1pass,                                 0},
227    
228          /* 2pass2 */          /* 2pass2 */
229          {"keyframe_boost",                      &reg.keyframe_boost,                    10},          {"keyframe_boost",                      &reg.keyframe_boost,                    10},
# Line 203  Line 235 
235          {"twopass_max_overflow_improvement", &reg.twopass_max_overflow_improvement, 5},          {"twopass_max_overflow_improvement", &reg.twopass_max_overflow_improvement, 5},
236          {"twopass_max_overflow_degradation", &reg.twopass_max_overflow_degradation, 5},          {"twopass_max_overflow_degradation", &reg.twopass_max_overflow_degradation, 5},
237    
238            /* bitrate calculator */
239            {"container_type",                      &reg.container_type,                    1},
240            {"target_size",                         &reg.target_size,                               650 * 1024},
241            {"subtitle_size",                       &reg.subtitle_size,                             0},
242            {"hours",                               &reg.hours,                                             1},
243            {"minutes",                             &reg.minutes,                                   30},
244            {"seconds",                             &reg.seconds,                                   0},
245            {"fps",                                 &reg.fps,                                               2},
246            {"audio_mode",                          &reg.audio_mode,                                0},
247            {"audio_type",                          &reg.audio_type,                                0},
248            {"audio_rate",                          &reg.audio_rate,                                128},
249            {"audio_size",                          &reg.audio_size,                                0},
250    
251          /* motion */          /* motion */
252          {"motion_search",                       &reg.motion_search,                             6},          {"motion_search",                       &reg.motion_search,                             6},
253          {"vhq_mode",                            &reg.vhq_mode,                                  1},          {"vhq_mode",                            &reg.vhq_mode,                                  1},
# Line 213  Line 258 
258          {"frame_drop_ratio",            &reg.frame_drop_ratio,                  0},          {"frame_drop_ratio",            &reg.frame_drop_ratio,                  0},
259    
260          /* quant */          /* quant */
261          {"min_iquant",                          &reg.min_iquant,                                2},          {"min_iquant",                          &reg.min_iquant,                                1},
262          {"max_iquant",                          &reg.max_iquant,                                31},          {"max_iquant",                          &reg.max_iquant,                                31},
263          {"min_pquant",                          &reg.min_pquant,                                2},          {"min_pquant",                          &reg.min_pquant,                                1},
264          {"max_pquant",                          &reg.max_pquant,                                31},          {"max_pquant",                          &reg.max_pquant,                                31},
265          {"min_bquant",                          &reg.min_bquant,                                2},          {"min_bquant",                          &reg.min_bquant,                                1},
266          {"max_bquant",                          &reg.max_bquant,                                31},          {"max_bquant",                          &reg.max_bquant,                                31},
267          {"trellis_quant",                       &reg.trellis_quant,                             0},          {"trellis_quant",                       &reg.trellis_quant,                             0},
268    
# Line 325  Line 370 
370    
371          reg.profile = 0;          reg.profile = 0;
372          for (i=0; i<sizeof(profiles)/sizeof(profile_t); i++) {          for (i=0; i<sizeof(profiles)/sizeof(profile_t); i++) {
373                  if (strcmpi(profiles[i].name, reg.profile_name) == 0) {                  if (lstrcmpi(profiles[i].name, reg.profile_name) == 0) {
374                          reg.profile = i;                          reg.profile = i;
375                  }                  }
376          }          }
# Line 419  Line 464 
464    
465  /* clear XviD registry key, load defaults */  /* clear XviD registry key, load defaults */
466    
467  void config_reg_default(CONFIG * config)  static void config_reg_default(CONFIG * config)
468  {  {
469          HKEY hKey;          HKEY hKey;
470    
# Line 440  Line 485 
485    
486    
487  /* leaves current config value if dialog item is empty */  /* leaves current config value if dialog item is empty */
488  int config_get_int(HWND hDlg, INT item, int config)  static int config_get_int(HWND hDlg, INT item, int config)
489  {  {
490          BOOL success = FALSE;          BOOL success = FALSE;
491          int tmp = GetDlgItemInt(hDlg, item, &success, TRUE);          int tmp = GetDlgItemInt(hDlg, item, &success, TRUE);
# Line 448  Line 493 
493  }  }
494    
495    
496  int config_get_uint(HWND hDlg, UINT item, int config)  static int config_get_uint(HWND hDlg, UINT item, int config)
497  {  {
498          BOOL success = FALSE;          BOOL success = FALSE;
499          int tmp = GetDlgItemInt(hDlg, item, &success, FALSE);          int tmp = GetDlgItemInt(hDlg, item, &success, FALSE);
500          return (success) ? tmp : config;          return (success) ? tmp : config;
501  }  }
502    
503    /* get uint from combobox
504       GetDlgItemInt doesnt work properly for cb list items */
505    #define UINT_BUF_SZ     20
506    static int config_get_cbuint(HWND hDlg, UINT item, int def)
507    {
508            int sel = SendMessage(GetDlgItem(hDlg, item), CB_GETCURSEL, 0, 0);
509            char buf[UINT_BUF_SZ];
510    
511            if (sel<0) {
512                    return config_get_uint(hDlg, item, def);
513            }
514    
515            if (SendMessage(GetDlgItem(hDlg, item), CB_GETLBTEXT, sel, (LPARAM)buf) == CB_ERR) {
516                    return def;
517            }
518    
519            return atoi(buf);
520    }
521    
522    
523  /* we use "100 base" floats */  /* we use "100 base" floats */
524    
525  #define FLOAT_BUF_SZ    20  #define FLOAT_BUF_SZ    20
526  int get_dlgitem_float(HWND hDlg, UINT item, int def)  static int get_dlgitem_float(HWND hDlg, UINT item, int def)
527  {  {
528          char buf[FLOAT_BUF_SZ];          char buf[FLOAT_BUF_SZ];
529    
# Line 469  Line 533 
533          return (int)(atof(buf)*100);          return (int)(atof(buf)*100);
534  }  }
535    
536  void set_dlgitem_float(HWND hDlg, UINT item, int value)  static void set_dlgitem_float(HWND hDlg, UINT item, int value)
537  {  {
538          char buf[FLOAT_BUF_SZ];          char buf[FLOAT_BUF_SZ];
539          sprintf(buf, "%.2f", (float)value/100);          sprintf(buf, "%.2f", (float)value/100);
# Line 478  Line 542 
542    
543    
544  #define HEX_BUF_SZ  16  #define HEX_BUF_SZ  16
545  unsigned int get_dlgitem_hex(HWND hDlg, UINT item, unsigned int def)  static unsigned int get_dlgitem_hex(HWND hDlg, UINT item, unsigned int def)
546  {  {
547          char buf[HEX_BUF_SZ];          char buf[HEX_BUF_SZ];
548          unsigned int value;          unsigned int value;
# Line 493  Line 557 
557          return def;          return def;
558  }  }
559    
560  void set_dlgitem_hex(HWND hDlg, UINT item, int value)  static void set_dlgitem_hex(HWND hDlg, UINT item, int value)
561  {  {
562          char buf[HEX_BUF_SZ];          char buf[HEX_BUF_SZ];
563          wsprintf(buf, "0x%x", value);          wsprintf(buf, "0x%x", value);
# Line 504  Line 568 
568  /* QUANT MATRIX DIALOG ================================================================= */  /* QUANT MATRIX DIALOG ================================================================= */
569  /* ===================================================================================== */  /* ===================================================================================== */
570    
571  void quant_upload(HWND hDlg, CONFIG* config)  static void quant_upload(HWND hDlg, CONFIG* config)
572  {  {
573          int i;          int i;
574    
# Line 515  Line 579 
579  }  }
580    
581    
582  void quant_download(HWND hDlg, CONFIG* config)  static void quant_download(HWND hDlg, CONFIG* config)
583  {  {
584          int i;          int i;
585    
# Line 533  Line 597 
597  }  }
598    
599    
600  void quant_loadsave(HWND hDlg, CONFIG * config, int save)  static void quant_loadsave(HWND hDlg, CONFIG * config, int save)
601  {  {
602          char file[MAX_PATH];          char file[MAX_PATH];
603          OPENFILENAME ofn;          OPENFILENAME ofn;
# Line 592  Line 656 
656    
657  /* quantization matrix dialog proc */  /* quantization matrix dialog proc */
658    
659  BOOL CALLBACK quantmatrix_proc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)  static BOOL CALLBACK quantmatrix_proc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
660  {  {
661          CONFIG* config = (CONFIG*)GetWindowLong(hDlg, GWL_USERDATA);          CONFIG* config = (CONFIG*)GetWindowLong(hDlg, GWL_USERDATA);
662    
# Line 650  Line 714 
714  /* ===================================================================================== */  /* ===================================================================================== */
715    
716  /* initialise pages */  /* initialise pages */
717  void adv_init(HWND hDlg, int idd, CONFIG * config)  static void adv_init(HWND hDlg, int idd, CONFIG * config)
718  {  {
719          unsigned int i;          unsigned int i;
720    
# Line 661  Line 725 
725                  SendDlgItemMessage(hDlg, IDC_QUANTTYPE, CB_ADDSTRING, 0, (LPARAM)"H.263");                  SendDlgItemMessage(hDlg, IDC_QUANTTYPE, CB_ADDSTRING, 0, (LPARAM)"H.263");
726                  SendDlgItemMessage(hDlg, IDC_QUANTTYPE, CB_ADDSTRING, 0, (LPARAM)"MPEG");                  SendDlgItemMessage(hDlg, IDC_QUANTTYPE, CB_ADDSTRING, 0, (LPARAM)"MPEG");
727                  SendDlgItemMessage(hDlg, IDC_QUANTTYPE, CB_ADDSTRING, 0, (LPARAM)"MPEG-Custom");                  SendDlgItemMessage(hDlg, IDC_QUANTTYPE, CB_ADDSTRING, 0, (LPARAM)"MPEG-Custom");
   
728                  break;                  break;
729    
730          case IDD_AR:          case IDD_AR:
731                  SendDlgItemMessage(hDlg, IDC_ASPECT_RATIO, CB_ADDSTRING, 0, (LPARAM)"Square (default)");                  SendDlgItemMessage(hDlg, IDC_ASPECT_RATIO, CB_ADDSTRING, 0, (LPARAM)"Square (default)");
732                  SendDlgItemMessage(hDlg, IDC_ASPECT_RATIO, CB_ADDSTRING, 0, (LPARAM)"4:3 PAL");                  SendDlgItemMessage(hDlg, IDC_ASPECT_RATIO, CB_ADDSTRING, 0, (LPARAM)"4:3 PAL");
# Line 677  Line 741 
741                          SendDlgItemMessage(hDlg, IDC_LEVEL_PROFILE, CB_ADDSTRING, 0, (LPARAM)profiles[i].name);                          SendDlgItemMessage(hDlg, IDC_LEVEL_PROFILE, CB_ADDSTRING, 0, (LPARAM)profiles[i].name);
742                  break;                  break;
743    
744            case IDD_BITRATE :
745                    SendDlgItemMessage(hDlg, IDC_BITRATE_CFORMAT, CB_ADDSTRING, 0, (LPARAM)"AVI-Legacy");
746                    SendDlgItemMessage(hDlg, IDC_BITRATE_CFORMAT, CB_ADDSTRING, 0, (LPARAM)"AVI-OpenDML");
747                    SendDlgItemMessage(hDlg, IDC_BITRATE_CFORMAT, CB_ADDSTRING, 0, (LPARAM)"Matroska");
748                    SendDlgItemMessage(hDlg, IDC_BITRATE_CFORMAT, CB_ADDSTRING, 0, (LPARAM)"OGM");
749                    SendDlgItemMessage(hDlg, IDC_BITRATE_CFORMAT, CB_ADDSTRING, 0, (LPARAM)"(None)");
750    
751                    SendDlgItemMessage(hDlg, IDC_BITRATE_TSIZE, CB_ADDSTRING, 0, (LPARAM)"665600");
752                    SendDlgItemMessage(hDlg, IDC_BITRATE_TSIZE, CB_ADDSTRING, 0, (LPARAM)"716800");
753                    SendDlgItemMessage(hDlg, IDC_BITRATE_TSIZE, CB_ADDSTRING, 0, (LPARAM)"1331200");
754                    SendDlgItemMessage(hDlg, IDC_BITRATE_TSIZE, CB_ADDSTRING, 0, (LPARAM)"1433600");
755    
756                    for (i=0; i<sizeof(video_fps_list)/sizeof(named_float_t); i++)
757                            SendDlgItemMessage(hDlg, IDC_BITRATE_FPS, CB_ADDSTRING, 0, (LPARAM)video_fps_list[i].name);
758    
759                    for (i=0; i<sizeof(audio_type_list)/sizeof(named_int_t); i++)
760                            SendDlgItemMessage(hDlg, IDC_BITRATE_AFORMAT, CB_ADDSTRING, 0, (LPARAM)audio_type_list[i].name);
761    
762                    SendDlgItemMessage(hDlg, IDC_BITRATE_ARATE, CB_ADDSTRING, 0, (LPARAM)"32");
763                    SendDlgItemMessage(hDlg, IDC_BITRATE_ARATE, CB_ADDSTRING, 0, (LPARAM)"56");
764                    SendDlgItemMessage(hDlg, IDC_BITRATE_ARATE, CB_ADDSTRING, 0, (LPARAM)"64");
765                    SendDlgItemMessage(hDlg, IDC_BITRATE_ARATE, CB_ADDSTRING, 0, (LPARAM)"96");
766                    SendDlgItemMessage(hDlg, IDC_BITRATE_ARATE, CB_ADDSTRING, 0, (LPARAM)"112");
767                    SendDlgItemMessage(hDlg, IDC_BITRATE_ARATE, CB_ADDSTRING, 0, (LPARAM)"128");
768                    SendDlgItemMessage(hDlg, IDC_BITRATE_ARATE, CB_ADDSTRING, 0, (LPARAM)"160");
769                    SendDlgItemMessage(hDlg, IDC_BITRATE_ARATE, CB_ADDSTRING, 0, (LPARAM)"192");
770                    SendDlgItemMessage(hDlg, IDC_BITRATE_ARATE, CB_ADDSTRING, 0, (LPARAM)"224");
771                    SendDlgItemMessage(hDlg, IDC_BITRATE_ARATE, CB_ADDSTRING, 0, (LPARAM)"256");
772                    SendDlgItemMessage(hDlg, IDC_BITRATE_ARATE, CB_ADDSTRING, 0, (LPARAM)"384");
773                    SendDlgItemMessage(hDlg, IDC_BITRATE_ARATE, CB_ADDSTRING, 0, (LPARAM)"448");
774                    SendDlgItemMessage(hDlg, IDC_BITRATE_ARATE, CB_ADDSTRING, 0, (LPARAM)"512");
775                    break;
776    
777          case IDD_ZONE :          case IDD_ZONE :
778                  EnableDlgWindow(hDlg, IDC_ZONE_FETCH, config->ci_valid);                  EnableDlgWindow(hDlg, IDC_ZONE_FETCH, config->ci_valid);
779                  break;                  break;
# Line 712  Line 809 
809    
810  /* enable/disable controls based on encoder-mode or user selection */  /* enable/disable controls based on encoder-mode or user selection */
811    
812  void adv_mode(HWND hDlg, int idd, CONFIG * config)  static void adv_mode(HWND hDlg, int idd, CONFIG * config)
813  {  {
814          int profile;          int profile;
815          int weight_en, quant_en;          int weight_en, quant_en;
# Line 785  Line 882 
882                  SetDlgItemInt(hDlg, IDC_LEVEL_BITRATE, profiles[profile].max_bitrate, FALSE);                  SetDlgItemInt(hDlg, IDC_LEVEL_BITRATE, profiles[profile].max_bitrate, FALSE);
883                  break;                  break;
884    
885            case IDD_BITRATE :
886                    {
887                            int ctype = SendDlgItemMessage(hDlg, IDC_BITRATE_CFORMAT, CB_GETCURSEL, 0, 0);
888                            int target_size = config_get_cbuint(hDlg, IDC_BITRATE_TSIZE, 0);
889                            int subtitle_size = config_get_uint(hDlg, IDC_BITRATE_SSIZE, 0);
890                            int fps = SendDlgItemMessage(hDlg, IDC_BITRATE_FPS, CB_GETCURSEL, 0, 0);
891    
892                            int duration =
893                                    3600 * config_get_uint(hDlg, IDC_BITRATE_HOURS, 0) +
894                                    60 * config_get_uint(hDlg, IDC_BITRATE_MINUTES, 0) +
895                                    config_get_uint(hDlg, IDC_BITRATE_SECONDS, 0);
896    
897                            int audio_type = SendDlgItemMessage(hDlg, IDC_BITRATE_AFORMAT, CB_GETCURSEL, 0, 0);
898                            int audio_mode = IsDlgChecked(hDlg, IDC_BITRATE_AMODE_SIZE);
899                            int audio_rate = config_get_cbuint(hDlg, IDC_BITRATE_ARATE, 0);
900                            int audio_size = config_get_uint(hDlg, IDC_BITRATE_ASIZE, 0);
901    
902                            int frames;
903                            int overhead;
904                            int vsize;
905    
906                            if (duration == 0)
907                                    break;
908    
909                            if (fps < 0 || fps >= sizeof(video_fps_list)/sizeof(named_float_t)) {
910                                    fps = 0;
911                            }
912                            if (audio_type < 0 || audio_type >= sizeof(audio_type_list)/sizeof(named_int_t)) {
913                                    audio_type = 0;
914                            }
915    
916                            EnableDlgWindow(hDlg, IDC_BITRATE_AMODE_RATE, audio_type!=NO_AUDIO);
917                            EnableDlgWindow(hDlg, IDC_BITRATE_AMODE_SIZE, audio_type!=NO_AUDIO);
918                            EnableDlgWindow(hDlg, IDC_BITRATE_ARATE, audio_type!=NO_AUDIO && !audio_mode);
919                            EnableDlgWindow(hDlg, IDC_BITRATE_ASIZE, audio_type!=NO_AUDIO && audio_mode);
920                            EnableDlgWindow(hDlg, IDC_BITRATE_ASELECT, audio_type!=NO_AUDIO && audio_mode);
921    
922                            /* step 1: calculate number of frames */
923                            frames = (int)(duration * video_fps_list[fps].value);
924    
925                            /* step 2: calculate audio_size (kbytes)*/
926                            if (audio_type!=NO_AUDIO) {
927                                    if (audio_mode==0) {
928                                            audio_size = (duration * audio_rate) / 8;
929                                    }
930                            }else{
931                                    audio_size = 0;
932                            }
933    
934                            /* step 3: calculate container overhead */
935    
936                            switch(ctype) {
937                            case 0 :        /* AVI */
938                            case 1 :        /* AVI-OpenDML */
939    
940                                    overhead = frames;
941    
942                                    if (audio_type!=NO_AUDIO) {
943                                            overhead += (duration * 1000) / audio_type_list[audio_type].avi_interval;
944                                    }
945    
946                                    overhead *= (ctype==0) ? 24 : 16;
947    
948                                    overhead /= 1024;
949                                    break;
950    
951                            case 2 :        /* Matroska: gknot formula */
952    
953                                    /* common overhead */
954                                    overhead = 40 + 12 + 8+ 16*duration + 200 + 100*1/*one audio stream*/ + 11*duration;
955    
956                                    /* video overhead */
957                                    overhead += frames*8 + (int)(frames * 4 * 0.94);
958    
959                                    /* cue tables and menu seek entries (300k default) */
960                                    overhead += 300 * 1024;
961    
962                                    /* audio */
963                                    overhead += (int)(duration * audio_type_list[audio_type].mkv_multiplier);
964    
965                                    overhead /= 1024;
966                                    break;
967    
968                            case 3 :        /* OGM: inaccurate model */
969                                    overhead = (int)(0.0039F * (target_size - subtitle_size));
970                                    break;
971    
972                            default :       /* (none) */
973                                    overhead = 0;
974                                    break;
975                            }
976    
977                            SetDlgItemInt(hDlg, IDC_BITRATE_COVERHEAD, overhead, TRUE);
978    
979                            /* final video bitstream size */
980                            vsize = target_size - subtitle_size - audio_size - overhead;
981                            if (vsize > 0) {
982                                    SetDlgItemInt(hDlg, IDC_BITRATE_VSIZE, vsize, TRUE);
983                                    /* convert from kbytes to kbits-per-second */
984                                    SetDlgItemInt(hDlg, IDC_BITRATE_VRATE, (vsize * 8 * 128) / (duration * 125), TRUE);
985                            }else{
986                                    SetDlgItemText(hDlg, IDC_BITRATE_VSIZE, "Overflow");
987                                    SetDlgItemText(hDlg, IDC_BITRATE_VRATE, "Overflow");
988                            }
989    
990                    }
991                    break;
992    
993          case IDD_ZONE :          case IDD_ZONE :
994                  weight_en = IsDlgChecked(hDlg, IDC_ZONE_MODE_WEIGHT);                  weight_en = IsDlgChecked(hDlg, IDC_ZONE_MODE_WEIGHT);
995                  quant_en =   IsDlgChecked(hDlg, IDC_ZONE_MODE_QUANT);                  quant_en =   IsDlgChecked(hDlg, IDC_ZONE_MODE_QUANT);
# Line 823  Line 1028 
1028    
1029    
1030  /* upload config data into dialog */  /* upload config data into dialog */
1031  void adv_upload(HWND hDlg, int idd, CONFIG * config)  static void adv_upload(HWND hDlg, int idd, CONFIG * config)
1032  {  {
1033          switch (idd)          switch (idd)
1034          {          {
# Line 865  Line 1070 
1070          case IDD_RC_2PASS1 :          case IDD_RC_2PASS1 :
1071                  SetDlgItemText(hDlg, IDC_STATS, config->stats);                  SetDlgItemText(hDlg, IDC_STATS, config->stats);
1072                  CheckDlg(hDlg, IDC_DISCARD1PASS, config->discard1pass);                  CheckDlg(hDlg, IDC_DISCARD1PASS, config->discard1pass);
1073                    CheckDlg(hDlg, IDC_FULL1PASS, config->full1pass);
1074                  break;                  break;
1075    
1076          case IDD_RC_2PASS2 :          case IDD_RC_2PASS2 :
# Line 881  Line 1087 
1087                  SetDlgItemInt(hDlg, IDC_MINKEY, config->kfthreshold, FALSE);                  SetDlgItemInt(hDlg, IDC_MINKEY, config->kfthreshold, FALSE);
1088                  break;                  break;
1089    
1090            case IDD_BITRATE :
1091                    SendDlgItemMessage(hDlg, IDC_BITRATE_CFORMAT, CB_SETCURSEL, config->container_type, 0);
1092                    SetDlgItemInt(hDlg, IDC_BITRATE_TSIZE, config->target_size, FALSE);
1093                    SetDlgItemInt(hDlg, IDC_BITRATE_SSIZE, config->subtitle_size, FALSE);
1094    
1095                    SetDlgItemInt(hDlg, IDC_BITRATE_HOURS, config->hours, FALSE);
1096                    SetDlgItemInt(hDlg, IDC_BITRATE_MINUTES, config->minutes, FALSE);
1097                    SetDlgItemInt(hDlg, IDC_BITRATE_SECONDS, config->seconds, FALSE);
1098                    SendDlgItemMessage(hDlg, IDC_BITRATE_FPS, CB_SETCURSEL, config->fps, 0);
1099    
1100                    SendDlgItemMessage(hDlg, IDC_BITRATE_AFORMAT, CB_SETCURSEL, config->audio_type, 0);
1101                    CheckRadioButton(hDlg, IDC_BITRATE_AMODE_RATE, IDC_BITRATE_AMODE_SIZE, config->audio_mode == 0 ? IDC_BITRATE_AMODE_RATE : IDC_BITRATE_AMODE_SIZE);
1102                    SetDlgItemInt(hDlg, IDC_BITRATE_ARATE, config->audio_rate, FALSE);
1103                    SetDlgItemInt(hDlg, IDC_BITRATE_ASIZE, config->audio_size, FALSE);
1104                    break;
1105    
1106          case IDD_ZONE :          case IDD_ZONE :
1107                  SetDlgItemInt(hDlg, IDC_ZONE_FRAME, config->zones[config->cur_zone].frame, FALSE);                  SetDlgItemInt(hDlg, IDC_ZONE_FRAME, config->zones[config->cur_zone].frame, FALSE);
1108    
# Line 948  Line 1170 
1170    
1171  /* download config data from dialog */  /* download config data from dialog */
1172    
1173  void adv_download(HWND hDlg, int idd, CONFIG * config)  static void adv_download(HWND hDlg, int idd, CONFIG * config)
1174  {  {
1175          switch (idd)          switch (idd)
1176          {          {
# Line 995  Line 1217 
1217                  if (GetDlgItemText(hDlg, IDC_STATS, config->stats, MAX_PATH) == 0)                  if (GetDlgItemText(hDlg, IDC_STATS, config->stats, MAX_PATH) == 0)
1218                          lstrcpy(config->stats, CONFIG_2PASS_FILE);                          lstrcpy(config->stats, CONFIG_2PASS_FILE);
1219                  config->discard1pass = IsDlgChecked(hDlg, IDC_DISCARD1PASS);                  config->discard1pass = IsDlgChecked(hDlg, IDC_DISCARD1PASS);
1220                    config->full1pass = IsDlgChecked(hDlg, IDC_FULL1PASS);
1221                  break;                  break;
1222    
1223          case IDD_RC_2PASS2 :          case IDD_RC_2PASS2 :
# Line 1021  Line 1244 
1244    
1245                  break;                  break;
1246    
1247            case IDD_BITRATE :
1248                    config->container_type = SendDlgItemMessage(hDlg, IDC_BITRATE_CFORMAT, CB_GETCURSEL, 0, 0);
1249                    config->target_size = config_get_uint(hDlg, IDC_BITRATE_TSIZE, config->target_size);
1250                    config->subtitle_size = config_get_uint(hDlg, IDC_BITRATE_SSIZE, config->subtitle_size);
1251    
1252                    config->hours = config_get_uint(hDlg, IDC_BITRATE_HOURS, config->hours);
1253                    config->minutes = config_get_uint(hDlg, IDC_BITRATE_MINUTES, config->minutes);
1254                    config->seconds = config_get_uint(hDlg, IDC_BITRATE_SECONDS, config->seconds);
1255                    config->fps = SendDlgItemMessage(hDlg, IDC_BITRATE_FPS, CB_GETCURSEL, 0, 0);
1256    
1257                    config->audio_type = SendDlgItemMessage(hDlg, IDC_BITRATE_AFORMAT, CB_GETCURSEL, 0, 0);
1258                    config->audio_mode = IsDlgChecked(hDlg, IDC_BITRATE_AMODE_SIZE) ? 1 : 0 ;
1259                    config->audio_rate = config_get_uint(hDlg, IDC_BITRATE_ARATE, config->audio_rate);
1260                    config->audio_size = config_get_uint(hDlg, IDC_BITRATE_ASIZE, config->audio_size);
1261    
1262                    /* the main window uses "AVI bitrate/filesize" not "video bitrate/filesize",
1263                       so we have to compensate by frames * 24 bytes */
1264                    {
1265                            int frame_compensate = 24 * (int)(
1266                                    (3600*config->hours +
1267                                       60*config->minutes +
1268                                          config->seconds) * video_fps_list[config->fps].value) / 1024;
1269    
1270                            int bitrate_compensate = (int)(24 * video_fps_list[config->fps].value) / 125;
1271    
1272                            config->desired_size =
1273                                                    config_get_uint(hDlg, IDC_BITRATE_VSIZE, config->desired_size) + frame_compensate;
1274    
1275                            config->bitrate =
1276                                                    config_get_uint(hDlg, IDC_BITRATE_VRATE, config->bitrate) + bitrate_compensate;
1277                    }
1278                    break;
1279    
1280          case IDD_ZONE :          case IDD_ZONE :
1281                  config->zones[config->cur_zone].frame = config_get_uint(hDlg, IDC_ZONE_FRAME, config->zones[config->cur_zone].frame);                  config->zones[config->cur_zone].frame = config_get_uint(hDlg, IDC_ZONE_FRAME, config->zones[config->cur_zone].frame);
1282    
# Line 1101  Line 1357 
1357    
1358  /* advanced dialog proc */  /* advanced dialog proc */
1359    
1360  BOOL CALLBACK adv_proc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)  static BOOL CALLBACK adv_proc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
1361  {  {
1362          PROPSHEETINFO *psi;          PROPSHEETINFO *psi;
1363    
# Line 1132  Line 1388 
1388                          case IDC_CPU_FORCE :                          case IDC_CPU_FORCE :
1389                          case IDC_AR :                          case IDC_AR :
1390                          case IDC_PAR :                          case IDC_PAR :
1391                            case IDC_BITRATE_AMODE_RATE :
1392                            case IDC_BITRATE_AMODE_SIZE :
1393                                  adv_mode(hDlg, psi->idd, psi->config);                                  adv_mode(hDlg, psi->idd, psi->config);
1394                                  break;                                  break;
1395    
1396                            case IDC_BITRATE_SSELECT :
1397                            case IDC_BITRATE_ASELECT :
1398                                    {
1399                                    OPENFILENAME ofn;
1400                                    char filename[MAX_PATH] = "";
1401    
1402                                    memset(&ofn, 0, sizeof(OPENFILENAME));
1403                                    ofn.lStructSize = sizeof(OPENFILENAME);
1404    
1405                                    ofn.hwndOwner = hDlg;
1406                                    if (LOWORD(wParam)==IDC_BITRATE_SSELECT) {
1407                                            ofn.lpstrFilter = "Subtitle files (*.sub, *.ssa)\0*.sub;*.ssa\0All files (*.*)\0*.*\0\0";
1408                                    }else{
1409                                            ofn.lpstrFilter = "Audio files (*.mp3, *.ac3)\0*.mp3; *.ac3\0All files (*.*)\0*.*\0\0";
1410                                    }
1411    
1412                                    ofn.lpstrFile = filename;
1413                                    ofn.nMaxFile = MAX_PATH;
1414                                    ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
1415    
1416                                    if (GetOpenFileName(&ofn)) {
1417                                            HANDLE hFile;
1418                                            DWORD filesize;
1419    
1420                                            if ((hFile = CreateFile(filename, GENERIC_READ, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)) == INVALID_HANDLE_VALUE ||
1421                                                    (filesize = GetFileSize(hFile, NULL)) == INVALID_FILE_SIZE) {
1422                                                    MessageBox(hDlg, "Could not get file size", "Error", 0);
1423                                            }else{
1424                                                    SetDlgItemInt(hDlg,
1425                                                                    LOWORD(wParam)==IDC_BITRATE_SSELECT? IDC_BITRATE_SSIZE : IDC_BITRATE_ASIZE,
1426                                                                    filesize / 1024, FALSE);
1427                                                    CloseHandle(hFile);
1428                                            }
1429                                    }
1430                                    }
1431                                    break;
1432    
1433                          case IDC_QUANTMATRIX :                          case IDC_QUANTMATRIX :
1434                                  DialogBoxParam(g_hInst, MAKEINTRESOURCE(IDD_QUANTMATRIX), hDlg, quantmatrix_proc, (LPARAM)psi->config);                                  DialogBoxParam(g_hInst, MAKEINTRESOURCE(IDD_QUANTMATRIX), hDlg, quantmatrix_proc, (LPARAM)psi->config);
1435                                  break;                                  break;
# Line 1161  Line 1456 
1456                                          ofn.Flags |= OFN_FILEMUSTEXIST;                                          ofn.Flags |= OFN_FILEMUSTEXIST;
1457                                  }                                  }
1458    
1459                                  if (GetSaveFileName(&ofn))                                  if ((psi->idd==IDD_RC_2PASS1 && GetSaveFileName(&ofn)) ||
1460                                  {                                          (psi->idd==IDD_RC_2PASS2 && GetOpenFileName(&ofn))) {
1461                                          SetDlgItemText(hDlg, IDC_STATS, tmp);                                          SetDlgItemText(hDlg, IDC_STATS, tmp);
1462                                  }                                  }
1463                          }                          }
1464                                    break;
1465    
1466                          case IDC_ZONE_FETCH :                          case IDC_ZONE_FETCH :
1467                                  SetDlgItemInt(hDlg, IDC_ZONE_FRAME, psi->config->ci.ciActiveFrame, FALSE);                                  SetDlgItemInt(hDlg, IDC_ZONE_FRAME, psi->config->ci.ciActiveFrame, FALSE);
# Line 1198  Line 1494 
1494                          default :                          default :
1495                                  return TRUE;                                  return TRUE;
1496                          }                          }
1497                    }else if ((HIWORD(wParam) == CBN_EDITCHANGE || HIWORD(wParam)==CBN_SELCHANGE) &&
1498                            (LOWORD(wParam)==IDC_BITRATE_TSIZE ||
1499                             LOWORD(wParam)==IDC_BITRATE_ARATE )) {
1500    
1501                            adv_mode(hDlg, psi->idd, psi->config);
1502    
1503                  }else if (HIWORD(wParam) == LBN_SELCHANGE &&                  }else if (HIWORD(wParam) == LBN_SELCHANGE &&
1504                          (LOWORD(wParam) == IDC_PROFILE_PROFILE ||                          (LOWORD(wParam) == IDC_PROFILE_PROFILE ||
1505                           LOWORD(wParam) == IDC_LEVEL_PROFILE ||                           LOWORD(wParam) == IDC_LEVEL_PROFILE ||
1506                           LOWORD(wParam) == IDC_QUANTTYPE ||                           LOWORD(wParam) == IDC_QUANTTYPE ||
1507                           LOWORD(wParam) == IDC_ASPECT_RATIO))                           LOWORD(wParam) == IDC_ASPECT_RATIO ||
1508                  {                           LOWORD(wParam) == IDC_BITRATE_CFORMAT ||
1509                             LOWORD(wParam) == IDC_BITRATE_AFORMAT ||
1510                             LOWORD(wParam) == IDC_BITRATE_FPS)) {
1511                          adv_mode(hDlg, psi->idd, psi->config);                          adv_mode(hDlg, psi->idd, psi->config);
1512                  }else if (HIWORD(wParam) == EN_UPDATE && (LOWORD(wParam)==IDC_ZONE_WEIGHT || LOWORD(wParam)==IDC_ZONE_QUANT)) {                  }else if (HIWORD(wParam) == EN_UPDATE && (LOWORD(wParam)==IDC_ZONE_WEIGHT || LOWORD(wParam)==IDC_ZONE_QUANT)) {
1513    
1514                          SendDlgItemMessage(hDlg, IDC_ZONE_SLIDER, TBM_SETPOS, TRUE,                          SendDlgItemMessage(hDlg, IDC_ZONE_SLIDER, TBM_SETPOS, TRUE,
1515                                          get_dlgitem_float(hDlg, LOWORD(wParam), 100));                                          get_dlgitem_float(hDlg, LOWORD(wParam), 100));
1516    
1517                  } else if (HIWORD(wParam) == EN_UPDATE && (LOWORD(wParam)==IDC_PARX || LOWORD(wParam)==IDC_PARY)) {                  } else if (HIWORD(wParam) == EN_UPDATE && (LOWORD(wParam)==IDC_PARX || LOWORD(wParam)==IDC_PARY)) {
1518    
1519                          if (5 == SendDlgItemMessage(hDlg, IDC_ASPECT_RATIO, CB_GETCURSEL, 0, 0)) {                          if (5 == SendDlgItemMessage(hDlg, IDC_ASPECT_RATIO, CB_GETCURSEL, 0, 0)) {
1520                                  if(LOWORD(wParam)==IDC_PARX)                                  if(LOWORD(wParam)==IDC_PARX)
1521                                          psi->config->par_x = config_get_uint(hDlg, LOWORD(wParam), psi->config->par_x);                                          psi->config->par_x = config_get_uint(hDlg, LOWORD(wParam), psi->config->par_x);
1522                                  else                                  else
1523                                          psi->config->par_y = config_get_uint(hDlg, LOWORD(wParam), psi->config->par_y);                                          psi->config->par_y = config_get_uint(hDlg, LOWORD(wParam), psi->config->par_y);
1524                          }                          }
1525                    } else if (HIWORD(wParam) == EN_UPDATE &&
1526                            (LOWORD(wParam)==IDC_BITRATE_SSIZE ||
1527                             LOWORD(wParam)==IDC_BITRATE_HOURS ||
1528                             LOWORD(wParam)==IDC_BITRATE_MINUTES ||
1529                             LOWORD(wParam)==IDC_BITRATE_SECONDS ||
1530                             LOWORD(wParam)==IDC_BITRATE_ASIZE)) {
1531                            adv_mode(hDlg, psi->idd, psi->config);
1532                  } else                  } else
1533                          return 0;                          return 0;
1534                  break;                  break;
# Line 1233  Line 1546 
1546                  switch (((NMHDR *)lParam)->code)                  switch (((NMHDR *)lParam)->code)
1547                  {                  {
1548                  case PSN_SETACTIVE :                  case PSN_SETACTIVE :
1549                          OutputDebugString("PSN_SET");                          DPRINTF("PSN_SET");
1550                          adv_upload(hDlg, psi->idd, psi->config);                          adv_upload(hDlg, psi->idd, psi->config);
1551                          adv_mode(hDlg, psi->idd, psi->config);                          adv_mode(hDlg, psi->idd, psi->config);
1552                          SetWindowLong(hDlg, DWL_MSGRESULT, FALSE);                          SetWindowLong(hDlg, DWL_MSGRESULT, FALSE);
1553                          break;                          break;
1554    
1555                  case PSN_KILLACTIVE :                  case PSN_KILLACTIVE :
1556                          OutputDebugString("PSN_KILL");                          DPRINTF("PSN_KILL");
1557                          adv_download(hDlg, psi->idd, psi->config);                          adv_download(hDlg, psi->idd, psi->config);
1558                          SetWindowLong(hDlg, DWL_MSGRESULT, FALSE);                          SetWindowLong(hDlg, DWL_MSGRESULT, FALSE);
1559                          break;                          break;
1560    
1561                  case PSN_APPLY :                  case PSN_APPLY :
1562                          OutputDebugString("PSN_APPLY");                          DPRINTF("PSN_APPLY");
1563                          psi->config->save = TRUE;                          psi->config->save = TRUE;
1564                          SetWindowLong(hDlg, DWL_MSGRESULT, FALSE);                          SetWindowLong(hDlg, DWL_MSGRESULT, FALSE);
1565                          break;                          break;
# Line 1268  Line 1581 
1581    or fasle if changes were canceled.    or fasle if changes were canceled.
1582    
1583    */    */
1584  BOOL adv_dialog(HWND hParent, CONFIG * config, const int * dlgs, int size)  
1585    #ifndef PSH_NOCONTEXTHELP
1586    #define PSH_NOCONTEXTHELP 0x02000000
1587    #endif
1588    
1589    static BOOL adv_dialog(HWND hParent, CONFIG * config, const int * dlgs, int size)
1590  {  {
1591          PROPSHEETINFO psi[6];          PROPSHEETINFO psi[6];
1592          PROPSHEETPAGE psp[6];          PROPSHEETPAGE psp[6];
# Line 1294  Line 1612 
1612          }          }
1613    
1614          psh.dwSize = sizeof(PROPSHEETHEADER);          psh.dwSize = sizeof(PROPSHEETHEADER);
1615          psh.dwFlags = PSH_PROPSHEETPAGE | PSH_NOAPPLYNOW;          psh.dwFlags = PSH_PROPSHEETPAGE | PSH_NOAPPLYNOW | PSH_NOCONTEXTHELP;
1616          psh.hwndParent = hParent;          psh.hwndParent = hParent;
1617          psh.hInstance = g_hInst;          psh.hInstance = g_hInst;
1618          psh.pszCaption = (LPSTR) "XviD Configuration";          psh.pszCaption = (LPSTR) "XviD Configuration";
# Line 1315  Line 1633 
1633  /* ===================================================================================== */  /* ===================================================================================== */
1634    
1635    
1636  void main_insert_zone(HWND hDlg, zone_t * s, int i, BOOL insert)  static void main_insert_zone(HWND hDlg, zone_t * s, int i, BOOL insert)
1637  {  {
1638          char tmp[32];          char tmp[32];
1639    
# Line 1359  Line 1677 
1677          ListView_SetItemText(hDlg, i, 2, tmp);          ListView_SetItemText(hDlg, i, 2, tmp);
1678  }  }
1679    
1680  void main_mode(HWND hDlg, CONFIG * config)  
1681    static void main_mode(HWND hDlg, CONFIG * config)
1682  {  {
1683          const int profile = SendDlgItemMessage(hDlg, IDC_PROFILE, CB_GETCURSEL, 0, 0);          const int profile = SendDlgItemMessage(hDlg, IDC_PROFILE, CB_GETCURSEL, 0, 0);
1684          const int rc_mode = SendDlgItemMessage(hDlg, IDC_MODE, CB_GETCURSEL, 0, 0);          const int rc_mode = SendDlgItemMessage(hDlg, IDC_MODE, CB_GETCURSEL, 0, 0);
# Line 1402  Line 1721 
1721    
1722          EnableDlgWindow(hDlg, IDC_BITRATE_S, target_en);          EnableDlgWindow(hDlg, IDC_BITRATE_S, target_en);
1723          EnableDlgWindow(hDlg, IDC_BITRATE, target_en);          EnableDlgWindow(hDlg, IDC_BITRATE, target_en);
1724            EnableDlgWindow(hDlg, IDC_BITRATE_ADV, target_en);
1725    
1726          EnableDlgWindow(hDlg, IDC_BITRATE_MIN, target_en_slider);          EnableDlgWindow(hDlg, IDC_BITRATE_MIN, target_en_slider);
1727          EnableDlgWindow(hDlg, IDC_BITRATE_MAX, target_en_slider);          EnableDlgWindow(hDlg, IDC_BITRATE_MAX, target_en_slider);
# Line 1409  Line 1729 
1729  }  }
1730    
1731    
1732    static void main_upload(HWND hDlg, CONFIG * config)
 void main_upload(HWND hDlg, CONFIG * config)  
1733  {  {
1734    
1735          SendDlgItemMessage(hDlg, IDC_PROFILE, CB_SETCURSEL, config->profile, 0);          SendDlgItemMessage(hDlg, IDC_PROFILE, CB_SETCURSEL, config->profile, 0);
# Line 1426  Line 1745 
1745                  set_dlgitem_float(hDlg, IDC_BITRATE, config->desired_quant);                  set_dlgitem_float(hDlg, IDC_BITRATE, config->desired_quant);
1746          }          }
1747    
1748          zones_update(hDlg, config);}          zones_update(hDlg, config);
1749    }
1750    
1751    
1752  /* downloads data from main dialog */  /* downloads data from main dialog */
1753  void main_download(HWND hDlg, CONFIG * config)  static void main_download(HWND hDlg, CONFIG * config)
1754  {  {
1755          config->profile = SendDlgItemMessage(hDlg, IDC_PROFILE, CB_GETCURSEL, 0, 0);          config->profile = SendDlgItemMessage(hDlg, IDC_PROFILE, CB_GETCURSEL, 0, 0);
1756          config->mode = SendDlgItemMessage(hDlg, IDC_MODE, CB_GETCURSEL, 0, 0);          config->mode = SendDlgItemMessage(hDlg, IDC_MODE, CB_GETCURSEL, 0, 0);
# Line 1451  Line 1771 
1771  static const int single_dlgs[] = { IDD_RC_CBR };  static const int single_dlgs[] = { IDD_RC_CBR };
1772  static const int pass1_dlgs[] = { IDD_RC_2PASS1 };  static const int pass1_dlgs[] = { IDD_RC_2PASS1 };
1773  static const int pass2_dlgs[] = { IDD_RC_2PASS2 };  static const int pass2_dlgs[] = { IDD_RC_2PASS2 };
1774    static const int bitrate_dlgs[] = { IDD_BITRATE };
1775  static const int zone_dlgs[] = { IDD_ZONE };  static const int zone_dlgs[] = { IDD_ZONE };
1776  static const int decoder_dlgs[] = { IDD_DEC };  static const int decoder_dlgs[] = { IDD_DEC };
1777  static const int adv_dlgs[] = { IDD_MOTION, IDD_QUANT, IDD_DEBUG};  static const int adv_dlgs[] = { IDD_MOTION, IDD_QUANT, IDD_DEBUG};
# Line 1547  Line 1868 
1868                                   break;                                   break;
1869                          }                          }
1870    
                         if (n->code == NM_RCLICK) {  
                                 OutputDebugString("Right click");  
                         }  
1871                  break;                  break;
1872                  }                  }
1873    
# Line 1576  Line 1894 
1894                                  }                                  }
1895                                  break;                                  break;
1896    
   
1897                          case IDC_BITRATE_S :                          case IDC_BITRATE_S :
1898                                  /* alternate between bitrate/desired_length metrics */                                  /* alternate between bitrate/desired_length metrics */
1899                                  main_download(hDlg, config);                                  main_download(hDlg, config);
# Line 1585  Line 1902 
1902                                  main_upload(hDlg, config);                                  main_upload(hDlg, config);
1903                                  break;                                  break;
1904    
1905                            case IDC_BITRATE_ADV :
1906                                    main_download(hDlg, config);
1907                                    adv_dialog(hDlg, config, bitrate_dlgs, sizeof(bitrate_dlgs)/sizeof(int));
1908                                    main_mode(hDlg, config);
1909                                    main_upload(hDlg, config);
1910                                    break;
1911    
1912                          case IDC_DECODER :                          case IDC_DECODER :
1913                                  main_download(hDlg, config);                                  main_download(hDlg, config);
1914                                  adv_dialog(hDlg, config, decoder_dlgs, sizeof(decoder_dlgs)/sizeof(int));                                  adv_dialog(hDlg, config, decoder_dlgs, sizeof(decoder_dlgs)/sizeof(int));
# Line 1717  Line 2041 
2041    
2042          case WM_HSCROLL :          case WM_HSCROLL :
2043                  if((HWND)lParam == GetDlgItem(hDlg, IDC_SLIDER)) {                  if((HWND)lParam == GetDlgItem(hDlg, IDC_SLIDER)) {
2044                          if (config->mode == RC_MODE_2PASS2)                          if (g_use_bitrate)
2045                                  SetDlgItemInt(hDlg, IDC_BITRATE, SendMessage((HWND)lParam, TBM_GETPOS, 0, 0), FALSE);                                  SetDlgItemInt(hDlg, IDC_BITRATE, SendMessage((HWND)lParam, TBM_GETPOS, 0, 0), FALSE);
2046                          else                          else
2047                                  set_dlgitem_float(hDlg, IDC_BITRATE, SendMessage((HWND)lParam, TBM_GETPOS, 0, 0));                                  set_dlgitem_float(hDlg, IDC_BITRATE, SendMessage((HWND)lParam, TBM_GETPOS, 0, 0));
# Line 1819  Line 2143 
2143          return 1;          return 1;
2144  }  }
2145    
2146    
2147  void  void
2148  sort_zones(zone_t * zones, int zone_num, int * sel)  sort_zones(zone_t * zones, int zone_num, int * sel)
2149  {  {

Legend:
Removed from v.1329  
changed lines
  Added in v.1378

No admin address has been configured
ViewVC Help
Powered by ViewVC 1.0.4