[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 1376, Sat Mar 6 01:59:32 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)"512");
774                    break;
775    
776          case IDD_ZONE :          case IDD_ZONE :
777                  EnableDlgWindow(hDlg, IDC_ZONE_FETCH, config->ci_valid);                  EnableDlgWindow(hDlg, IDC_ZONE_FETCH, config->ci_valid);
778                  break;                  break;
# Line 712  Line 808 
808    
809  /* enable/disable controls based on encoder-mode or user selection */  /* enable/disable controls based on encoder-mode or user selection */
810    
811  void adv_mode(HWND hDlg, int idd, CONFIG * config)  static void adv_mode(HWND hDlg, int idd, CONFIG * config)
812  {  {
813          int profile;          int profile;
814          int weight_en, quant_en;          int weight_en, quant_en;
# Line 785  Line 881 
881                  SetDlgItemInt(hDlg, IDC_LEVEL_BITRATE, profiles[profile].max_bitrate, FALSE);                  SetDlgItemInt(hDlg, IDC_LEVEL_BITRATE, profiles[profile].max_bitrate, FALSE);
882                  break;                  break;
883    
884            case IDD_BITRATE :
885                    {
886                            int ctype = SendDlgItemMessage(hDlg, IDC_BITRATE_CFORMAT, CB_GETCURSEL, 0, 0);
887                            int target_size = config_get_cbuint(hDlg, IDC_BITRATE_TSIZE, 0);
888                            int subtitle_size = config_get_uint(hDlg, IDC_BITRATE_SSIZE, 0);
889                            int fps = SendDlgItemMessage(hDlg, IDC_BITRATE_FPS, CB_GETCURSEL, 0, 0);
890    
891                            int duration =
892                                    3600 * config_get_uint(hDlg, IDC_BITRATE_HOURS, 0) +
893                                    60 * config_get_uint(hDlg, IDC_BITRATE_MINUTES, 0) +
894                                    config_get_uint(hDlg, IDC_BITRATE_SECONDS, 0);
895    
896                            int audio_type = SendDlgItemMessage(hDlg, IDC_BITRATE_AFORMAT, CB_GETCURSEL, 0, 0);
897                            int audio_mode = IsDlgChecked(hDlg, IDC_BITRATE_AMODE_SIZE);
898                            int audio_rate = config_get_cbuint(hDlg, IDC_BITRATE_ARATE, 0);
899                            int audio_size = config_get_uint(hDlg, IDC_BITRATE_ASIZE, 0);
900    
901                            int frames;
902                            int overhead;
903                            int vsize;
904    
905                            if (duration == 0)
906                                    break;
907    
908                            if (fps < 0 || fps >= sizeof(video_fps_list)/sizeof(named_float_t)) {
909                                    fps = 0;
910                            }
911                            if (audio_type < 0 || audio_type >= sizeof(audio_type_list)/sizeof(named_int_t)) {
912                                    audio_type = 0;
913                            }
914    
915                            EnableDlgWindow(hDlg, IDC_BITRATE_AMODE_RATE, audio_type!=NO_AUDIO);
916                            EnableDlgWindow(hDlg, IDC_BITRATE_AMODE_SIZE, audio_type!=NO_AUDIO);
917                            EnableDlgWindow(hDlg, IDC_BITRATE_ARATE, audio_type!=NO_AUDIO && !audio_mode);
918                            EnableDlgWindow(hDlg, IDC_BITRATE_ASIZE, audio_type!=NO_AUDIO && audio_mode);
919                            EnableDlgWindow(hDlg, IDC_BITRATE_ASELECT, audio_type!=NO_AUDIO && audio_mode);
920    
921                            /* step 1: calculate number of frames */
922                            frames = (int)(duration * video_fps_list[fps].value);
923    
924                            /* step 2: calculate audio_size (kbytes)*/
925                            if (audio_type!=NO_AUDIO) {
926                                    if (audio_mode==0) {
927                                            audio_size = (duration * audio_rate) / 8;
928                                    }
929                            }else{
930                                    audio_size = 0;
931                            }
932    
933                            /* step 3: calculate container overhead */
934    
935                            switch(ctype) {
936                            case 0 :        /* AVI */
937                            case 1 :        /* AVI-OpenDML */
938    
939                                    overhead = frames;
940    
941                                    if (audio_type!=NO_AUDIO) {
942                                            overhead += (duration * 1000) / audio_type_list[audio_type].avi_interval;
943                                    }
944    
945                                    overhead *= (ctype==0) ? 24 : 16;
946    
947                                    overhead /= 1024;
948                                    break;
949    
950                            case 2 :        /* Matroska: gknot formula */
951    
952                                    /* common overhead */
953                                    overhead = 40 + 12 + 8+ 16*duration + 200 + 100*1/*one audio stream*/ + 11*duration;
954    
955                                    /* video overhead */
956                                    overhead += frames*8 + (int)(frames * 4 * 0.94);
957    
958                                    /* cue tables and menu seek entries (300k default) */
959                                    overhead += 300 * 1024;
960    
961                                    /* audio */
962                                    overhead += (int)(duration * audio_type_list[audio_type].mkv_multiplier);
963    
964                                    overhead /= 1024;
965                                    break;
966    
967                            case 3 :        /* OGM: inaccurate model */
968                                    overhead = (int)(0.0039F * (target_size - subtitle_size));
969                                    break;
970    
971                            default :       /* (none) */
972                                    overhead = 0;
973                                    break;
974                            }
975    
976                            SetDlgItemInt(hDlg, IDC_BITRATE_COVERHEAD, overhead, TRUE);
977    
978                            /* final video bitstream size */
979                            vsize = target_size - subtitle_size - audio_size - overhead;
980                            if (vsize > 0) {
981                                    SetDlgItemInt(hDlg, IDC_BITRATE_VSIZE, vsize, TRUE);
982                                    /* convert from kbytes to kbits-per-second */
983                                    SetDlgItemInt(hDlg, IDC_BITRATE_VRATE, (vsize * 8 * 128) / (duration * 125), TRUE);
984                            }else{
985                                    SetDlgItemText(hDlg, IDC_BITRATE_VSIZE, "Overflow");
986                                    SetDlgItemText(hDlg, IDC_BITRATE_VRATE, "Overflow");
987                            }
988    
989                    }
990                    break;
991    
992          case IDD_ZONE :          case IDD_ZONE :
993                  weight_en = IsDlgChecked(hDlg, IDC_ZONE_MODE_WEIGHT);                  weight_en = IsDlgChecked(hDlg, IDC_ZONE_MODE_WEIGHT);
994                  quant_en =   IsDlgChecked(hDlg, IDC_ZONE_MODE_QUANT);                  quant_en =   IsDlgChecked(hDlg, IDC_ZONE_MODE_QUANT);
# Line 823  Line 1027 
1027    
1028    
1029  /* upload config data into dialog */  /* upload config data into dialog */
1030  void adv_upload(HWND hDlg, int idd, CONFIG * config)  static void adv_upload(HWND hDlg, int idd, CONFIG * config)
1031  {  {
1032          switch (idd)          switch (idd)
1033          {          {
# Line 865  Line 1069 
1069          case IDD_RC_2PASS1 :          case IDD_RC_2PASS1 :
1070                  SetDlgItemText(hDlg, IDC_STATS, config->stats);                  SetDlgItemText(hDlg, IDC_STATS, config->stats);
1071                  CheckDlg(hDlg, IDC_DISCARD1PASS, config->discard1pass);                  CheckDlg(hDlg, IDC_DISCARD1PASS, config->discard1pass);
1072                    CheckDlg(hDlg, IDC_FULL1PASS, config->full1pass);
1073                  break;                  break;
1074    
1075          case IDD_RC_2PASS2 :          case IDD_RC_2PASS2 :
# Line 881  Line 1086 
1086                  SetDlgItemInt(hDlg, IDC_MINKEY, config->kfthreshold, FALSE);                  SetDlgItemInt(hDlg, IDC_MINKEY, config->kfthreshold, FALSE);
1087                  break;                  break;
1088    
1089            case IDD_BITRATE :
1090                    SendDlgItemMessage(hDlg, IDC_BITRATE_CFORMAT, CB_SETCURSEL, config->container_type, 0);
1091                    SetDlgItemInt(hDlg, IDC_BITRATE_TSIZE, config->target_size, FALSE);
1092                    SetDlgItemInt(hDlg, IDC_BITRATE_SSIZE, config->subtitle_size, FALSE);
1093    
1094                    SetDlgItemInt(hDlg, IDC_BITRATE_HOURS, config->hours, FALSE);
1095                    SetDlgItemInt(hDlg, IDC_BITRATE_MINUTES, config->minutes, FALSE);
1096                    SetDlgItemInt(hDlg, IDC_BITRATE_SECONDS, config->seconds, FALSE);
1097                    SendDlgItemMessage(hDlg, IDC_BITRATE_FPS, CB_SETCURSEL, config->fps, 0);
1098    
1099                    SendDlgItemMessage(hDlg, IDC_BITRATE_AFORMAT, CB_SETCURSEL, config->audio_type, 0);
1100                    CheckRadioButton(hDlg, IDC_BITRATE_AMODE_RATE, IDC_BITRATE_AMODE_SIZE, config->audio_mode == 0 ? IDC_BITRATE_AMODE_RATE : IDC_BITRATE_AMODE_SIZE);
1101                    SetDlgItemInt(hDlg, IDC_BITRATE_ARATE, config->audio_rate, FALSE);
1102                    SetDlgItemInt(hDlg, IDC_BITRATE_ASIZE, config->audio_size, FALSE);
1103                    break;
1104    
1105          case IDD_ZONE :          case IDD_ZONE :
1106                  SetDlgItemInt(hDlg, IDC_ZONE_FRAME, config->zones[config->cur_zone].frame, FALSE);                  SetDlgItemInt(hDlg, IDC_ZONE_FRAME, config->zones[config->cur_zone].frame, FALSE);
1107    
# Line 948  Line 1169 
1169    
1170  /* download config data from dialog */  /* download config data from dialog */
1171    
1172  void adv_download(HWND hDlg, int idd, CONFIG * config)  static void adv_download(HWND hDlg, int idd, CONFIG * config)
1173  {  {
1174          switch (idd)          switch (idd)
1175          {          {
# Line 995  Line 1216 
1216                  if (GetDlgItemText(hDlg, IDC_STATS, config->stats, MAX_PATH) == 0)                  if (GetDlgItemText(hDlg, IDC_STATS, config->stats, MAX_PATH) == 0)
1217                          lstrcpy(config->stats, CONFIG_2PASS_FILE);                          lstrcpy(config->stats, CONFIG_2PASS_FILE);
1218                  config->discard1pass = IsDlgChecked(hDlg, IDC_DISCARD1PASS);                  config->discard1pass = IsDlgChecked(hDlg, IDC_DISCARD1PASS);
1219                    config->full1pass = IsDlgChecked(hDlg, IDC_FULL1PASS);
1220                  break;                  break;
1221    
1222          case IDD_RC_2PASS2 :          case IDD_RC_2PASS2 :
# Line 1021  Line 1243 
1243    
1244                  break;                  break;
1245    
1246            case IDD_BITRATE :
1247                    config->container_type = SendDlgItemMessage(hDlg, IDC_BITRATE_CFORMAT, CB_GETCURSEL, 0, 0);
1248                    config->target_size = config_get_uint(hDlg, IDC_BITRATE_TSIZE, config->target_size);
1249                    config->subtitle_size = config_get_uint(hDlg, IDC_BITRATE_SSIZE, config->subtitle_size);
1250    
1251                    config->hours = config_get_uint(hDlg, IDC_BITRATE_HOURS, config->hours);
1252                    config->minutes = config_get_uint(hDlg, IDC_BITRATE_MINUTES, config->minutes);
1253                    config->seconds = config_get_uint(hDlg, IDC_BITRATE_SECONDS, config->seconds);
1254                    config->fps = SendDlgItemMessage(hDlg, IDC_BITRATE_FPS, CB_GETCURSEL, 0, 0);
1255    
1256                    config->audio_type = SendDlgItemMessage(hDlg, IDC_BITRATE_AFORMAT, CB_GETCURSEL, 0, 0);
1257                    config->audio_mode = IsDlgChecked(hDlg, IDC_BITRATE_AMODE_SIZE) ? 1 : 0 ;
1258                    config->audio_rate = config_get_uint(hDlg, IDC_BITRATE_ARATE, config->audio_rate);
1259                    config->audio_size = config_get_uint(hDlg, IDC_BITRATE_ASIZE, config->audio_size);
1260    
1261                    /* the main window uses "AVI bitrate/filesize" not "video bitrate/filesize",
1262                       so we have to compensate by frames * 24 bytes */
1263                    {
1264                            int frame_compensate = 24 * (int)(
1265                                    (3600*config->hours +
1266                                       60*config->minutes +
1267                                          config->seconds) * video_fps_list[config->fps].value) / 1024;
1268    
1269                            int bitrate_compensate = (int)(24 * video_fps_list[config->fps].value) / 125;
1270    
1271                            config->desired_size =
1272                                                    config_get_uint(hDlg, IDC_BITRATE_VSIZE, config->desired_size) - frame_compensate;
1273    
1274                            config->bitrate =
1275                                                    config_get_uint(hDlg, IDC_BITRATE_VRATE, config->bitrate) - bitrate_compensate;
1276                    }
1277                    break;
1278    
1279          case IDD_ZONE :          case IDD_ZONE :
1280                  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);
1281    
# Line 1101  Line 1356 
1356    
1357  /* advanced dialog proc */  /* advanced dialog proc */
1358    
1359  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)
1360  {  {
1361          PROPSHEETINFO *psi;          PROPSHEETINFO *psi;
1362    
# Line 1132  Line 1387 
1387                          case IDC_CPU_FORCE :                          case IDC_CPU_FORCE :
1388                          case IDC_AR :                          case IDC_AR :
1389                          case IDC_PAR :                          case IDC_PAR :
1390                            case IDC_BITRATE_AMODE_RATE :
1391                            case IDC_BITRATE_AMODE_SIZE :
1392                                  adv_mode(hDlg, psi->idd, psi->config);                                  adv_mode(hDlg, psi->idd, psi->config);
1393                                  break;                                  break;
1394    
1395                            case IDC_BITRATE_SSELECT :
1396                            case IDC_BITRATE_ASELECT :
1397                                    {
1398                                    OPENFILENAME ofn;
1399                                    char filename[MAX_PATH] = "";
1400    
1401                                    memset(&ofn, 0, sizeof(OPENFILENAME));
1402                                    ofn.lStructSize = sizeof(OPENFILENAME);
1403    
1404                                    ofn.hwndOwner = hDlg;
1405                                    if (LOWORD(wParam)==IDC_BITRATE_SSELECT) {
1406                                            ofn.lpstrFilter = "Subtitle files (*.sub, *.ssa)\0*.sub;*.ssa\0All files (*.*)\0*.*\0\0";
1407                                    }else{
1408                                            ofn.lpstrFilter = "Audio files (*.mp3, *.ac3)\0*.mp3; *.ac3\0All files (*.*)\0*.*\0\0";
1409                                    }
1410    
1411                                    ofn.lpstrFile = filename;
1412                                    ofn.nMaxFile = MAX_PATH;
1413                                    ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
1414    
1415                                    if (GetOpenFileName(&ofn)) {
1416                                            HANDLE hFile;
1417                                            DWORD filesize;
1418    
1419                                            if ((hFile = CreateFile(filename, GENERIC_READ, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)) == INVALID_HANDLE_VALUE ||
1420                                                    (filesize = GetFileSize(hFile, NULL)) == INVALID_FILE_SIZE) {
1421                                                    MessageBox(hDlg, "Could not get file size", "Error", 0);
1422                                            }else{
1423                                                    SetDlgItemInt(hDlg,
1424                                                                    LOWORD(wParam)==IDC_BITRATE_SSELECT? IDC_BITRATE_SSIZE : IDC_BITRATE_ASIZE,
1425                                                                    filesize / 1024, FALSE);
1426                                                    CloseHandle(hFile);
1427                                            }
1428                                    }
1429                                    }
1430                                    break;
1431    
1432                          case IDC_QUANTMATRIX :                          case IDC_QUANTMATRIX :
1433                                  DialogBoxParam(g_hInst, MAKEINTRESOURCE(IDD_QUANTMATRIX), hDlg, quantmatrix_proc, (LPARAM)psi->config);                                  DialogBoxParam(g_hInst, MAKEINTRESOURCE(IDD_QUANTMATRIX), hDlg, quantmatrix_proc, (LPARAM)psi->config);
1434                                  break;                                  break;
# Line 1161  Line 1455 
1455                                          ofn.Flags |= OFN_FILEMUSTEXIST;                                          ofn.Flags |= OFN_FILEMUSTEXIST;
1456                                  }                                  }
1457    
1458                                  if (GetSaveFileName(&ofn))                                  if ((psi->idd==IDD_RC_2PASS1 && GetSaveFileName(&ofn)) ||
1459                                  {                                          (psi->idd==IDD_RC_2PASS2 && GetOpenFileName(&ofn))) {
1460                                          SetDlgItemText(hDlg, IDC_STATS, tmp);                                          SetDlgItemText(hDlg, IDC_STATS, tmp);
1461                                  }                                  }
1462                          }                          }
1463                                    break;
1464    
1465                          case IDC_ZONE_FETCH :                          case IDC_ZONE_FETCH :
1466                                  SetDlgItemInt(hDlg, IDC_ZONE_FRAME, psi->config->ci.ciActiveFrame, FALSE);                                  SetDlgItemInt(hDlg, IDC_ZONE_FRAME, psi->config->ci.ciActiveFrame, FALSE);
# Line 1198  Line 1493 
1493                          default :                          default :
1494                                  return TRUE;                                  return TRUE;
1495                          }                          }
1496                    }else if ((HIWORD(wParam) == CBN_EDITCHANGE || HIWORD(wParam)==CBN_SELCHANGE) &&
1497                            (LOWORD(wParam)==IDC_BITRATE_TSIZE ||
1498                             LOWORD(wParam)==IDC_BITRATE_ARATE )) {
1499    
1500                            adv_mode(hDlg, psi->idd, psi->config);
1501    
1502                  }else if (HIWORD(wParam) == LBN_SELCHANGE &&                  }else if (HIWORD(wParam) == LBN_SELCHANGE &&
1503                          (LOWORD(wParam) == IDC_PROFILE_PROFILE ||                          (LOWORD(wParam) == IDC_PROFILE_PROFILE ||
1504                           LOWORD(wParam) == IDC_LEVEL_PROFILE ||                           LOWORD(wParam) == IDC_LEVEL_PROFILE ||
1505                           LOWORD(wParam) == IDC_QUANTTYPE ||                           LOWORD(wParam) == IDC_QUANTTYPE ||
1506                           LOWORD(wParam) == IDC_ASPECT_RATIO))                           LOWORD(wParam) == IDC_ASPECT_RATIO ||
1507                  {                           LOWORD(wParam) == IDC_BITRATE_CFORMAT ||
1508                             LOWORD(wParam) == IDC_BITRATE_AFORMAT ||
1509                             LOWORD(wParam) == IDC_BITRATE_FPS)) {
1510                          adv_mode(hDlg, psi->idd, psi->config);                          adv_mode(hDlg, psi->idd, psi->config);
1511                  }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)) {
1512    
1513                          SendDlgItemMessage(hDlg, IDC_ZONE_SLIDER, TBM_SETPOS, TRUE,                          SendDlgItemMessage(hDlg, IDC_ZONE_SLIDER, TBM_SETPOS, TRUE,
1514                                          get_dlgitem_float(hDlg, LOWORD(wParam), 100));                                          get_dlgitem_float(hDlg, LOWORD(wParam), 100));
1515    
1516                  } 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)) {
1517    
1518                          if (5 == SendDlgItemMessage(hDlg, IDC_ASPECT_RATIO, CB_GETCURSEL, 0, 0)) {                          if (5 == SendDlgItemMessage(hDlg, IDC_ASPECT_RATIO, CB_GETCURSEL, 0, 0)) {
1519                                  if(LOWORD(wParam)==IDC_PARX)                                  if(LOWORD(wParam)==IDC_PARX)
1520                                          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);
1521                                  else                                  else
1522                                          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);
1523                          }                          }
1524                    } else if (HIWORD(wParam) == EN_UPDATE &&
1525                            (LOWORD(wParam)==IDC_BITRATE_SSIZE ||
1526                             LOWORD(wParam)==IDC_BITRATE_HOURS ||
1527                             LOWORD(wParam)==IDC_BITRATE_MINUTES ||
1528                             LOWORD(wParam)==IDC_BITRATE_SECONDS ||
1529                             LOWORD(wParam)==IDC_BITRATE_ASIZE)) {
1530                            adv_mode(hDlg, psi->idd, psi->config);
1531                  } else                  } else
1532                          return 0;                          return 0;
1533                  break;                  break;
# Line 1233  Line 1545 
1545                  switch (((NMHDR *)lParam)->code)                  switch (((NMHDR *)lParam)->code)
1546                  {                  {
1547                  case PSN_SETACTIVE :                  case PSN_SETACTIVE :
1548                          OutputDebugString("PSN_SET");                          DPRINTF("PSN_SET");
1549                          adv_upload(hDlg, psi->idd, psi->config);                          adv_upload(hDlg, psi->idd, psi->config);
1550                          adv_mode(hDlg, psi->idd, psi->config);                          adv_mode(hDlg, psi->idd, psi->config);
1551                          SetWindowLong(hDlg, DWL_MSGRESULT, FALSE);                          SetWindowLong(hDlg, DWL_MSGRESULT, FALSE);
1552                          break;                          break;
1553    
1554                  case PSN_KILLACTIVE :                  case PSN_KILLACTIVE :
1555                          OutputDebugString("PSN_KILL");                          DPRINTF("PSN_KILL");
1556                          adv_download(hDlg, psi->idd, psi->config);                          adv_download(hDlg, psi->idd, psi->config);
1557                          SetWindowLong(hDlg, DWL_MSGRESULT, FALSE);                          SetWindowLong(hDlg, DWL_MSGRESULT, FALSE);
1558                          break;                          break;
1559    
1560                  case PSN_APPLY :                  case PSN_APPLY :
1561                          OutputDebugString("PSN_APPLY");                          DPRINTF("PSN_APPLY");
1562                          psi->config->save = TRUE;                          psi->config->save = TRUE;
1563                          SetWindowLong(hDlg, DWL_MSGRESULT, FALSE);                          SetWindowLong(hDlg, DWL_MSGRESULT, FALSE);
1564                          break;                          break;
# Line 1268  Line 1580 
1580    or fasle if changes were canceled.    or fasle if changes were canceled.
1581    
1582    */    */
1583  BOOL adv_dialog(HWND hParent, CONFIG * config, const int * dlgs, int size)  
1584    #ifndef PSH_NOCONTEXTHELP
1585    #define PSH_NOCONTEXTHELP 0x02000000
1586    #endif
1587    
1588    static BOOL adv_dialog(HWND hParent, CONFIG * config, const int * dlgs, int size)
1589  {  {
1590          PROPSHEETINFO psi[6];          PROPSHEETINFO psi[6];
1591          PROPSHEETPAGE psp[6];          PROPSHEETPAGE psp[6];
# Line 1294  Line 1611 
1611          }          }
1612    
1613          psh.dwSize = sizeof(PROPSHEETHEADER);          psh.dwSize = sizeof(PROPSHEETHEADER);
1614          psh.dwFlags = PSH_PROPSHEETPAGE | PSH_NOAPPLYNOW;          psh.dwFlags = PSH_PROPSHEETPAGE | PSH_NOAPPLYNOW | PSH_NOCONTEXTHELP;
1615          psh.hwndParent = hParent;          psh.hwndParent = hParent;
1616          psh.hInstance = g_hInst;          psh.hInstance = g_hInst;
1617          psh.pszCaption = (LPSTR) "XviD Configuration";          psh.pszCaption = (LPSTR) "XviD Configuration";
# Line 1315  Line 1632 
1632  /* ===================================================================================== */  /* ===================================================================================== */
1633    
1634    
1635  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)
1636  {  {
1637          char tmp[32];          char tmp[32];
1638    
# Line 1359  Line 1676 
1676          ListView_SetItemText(hDlg, i, 2, tmp);          ListView_SetItemText(hDlg, i, 2, tmp);
1677  }  }
1678    
1679  void main_mode(HWND hDlg, CONFIG * config)  
1680    static void main_mode(HWND hDlg, CONFIG * config)
1681  {  {
1682          const int profile = SendDlgItemMessage(hDlg, IDC_PROFILE, CB_GETCURSEL, 0, 0);          const int profile = SendDlgItemMessage(hDlg, IDC_PROFILE, CB_GETCURSEL, 0, 0);
1683          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 1720 
1720    
1721          EnableDlgWindow(hDlg, IDC_BITRATE_S, target_en);          EnableDlgWindow(hDlg, IDC_BITRATE_S, target_en);
1722          EnableDlgWindow(hDlg, IDC_BITRATE, target_en);          EnableDlgWindow(hDlg, IDC_BITRATE, target_en);
1723            EnableDlgWindow(hDlg, IDC_BITRATE_ADV, target_en);
1724    
1725          EnableDlgWindow(hDlg, IDC_BITRATE_MIN, target_en_slider);          EnableDlgWindow(hDlg, IDC_BITRATE_MIN, target_en_slider);
1726          EnableDlgWindow(hDlg, IDC_BITRATE_MAX, target_en_slider);          EnableDlgWindow(hDlg, IDC_BITRATE_MAX, target_en_slider);
# Line 1409  Line 1728 
1728  }  }
1729    
1730    
1731    static void main_upload(HWND hDlg, CONFIG * config)
 void main_upload(HWND hDlg, CONFIG * config)  
1732  {  {
1733    
1734          SendDlgItemMessage(hDlg, IDC_PROFILE, CB_SETCURSEL, config->profile, 0);          SendDlgItemMessage(hDlg, IDC_PROFILE, CB_SETCURSEL, config->profile, 0);
# Line 1426  Line 1744 
1744                  set_dlgitem_float(hDlg, IDC_BITRATE, config->desired_quant);                  set_dlgitem_float(hDlg, IDC_BITRATE, config->desired_quant);
1745          }          }
1746    
1747          zones_update(hDlg, config);}          zones_update(hDlg, config);
1748    }
1749    
1750    
1751  /* downloads data from main dialog */  /* downloads data from main dialog */
1752  void main_download(HWND hDlg, CONFIG * config)  static void main_download(HWND hDlg, CONFIG * config)
1753  {  {
1754          config->profile = SendDlgItemMessage(hDlg, IDC_PROFILE, CB_GETCURSEL, 0, 0);          config->profile = SendDlgItemMessage(hDlg, IDC_PROFILE, CB_GETCURSEL, 0, 0);
1755          config->mode = SendDlgItemMessage(hDlg, IDC_MODE, CB_GETCURSEL, 0, 0);          config->mode = SendDlgItemMessage(hDlg, IDC_MODE, CB_GETCURSEL, 0, 0);
# Line 1451  Line 1770 
1770  static const int single_dlgs[] = { IDD_RC_CBR };  static const int single_dlgs[] = { IDD_RC_CBR };
1771  static const int pass1_dlgs[] = { IDD_RC_2PASS1 };  static const int pass1_dlgs[] = { IDD_RC_2PASS1 };
1772  static const int pass2_dlgs[] = { IDD_RC_2PASS2 };  static const int pass2_dlgs[] = { IDD_RC_2PASS2 };
1773    static const int bitrate_dlgs[] = { IDD_BITRATE };
1774  static const int zone_dlgs[] = { IDD_ZONE };  static const int zone_dlgs[] = { IDD_ZONE };
1775  static const int decoder_dlgs[] = { IDD_DEC };  static const int decoder_dlgs[] = { IDD_DEC };
1776  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 1867 
1867                                   break;                                   break;
1868                          }                          }
1869    
                         if (n->code == NM_RCLICK) {  
                                 OutputDebugString("Right click");  
                         }  
1870                  break;                  break;
1871                  }                  }
1872    
# Line 1576  Line 1893 
1893                                  }                                  }
1894                                  break;                                  break;
1895    
   
1896                          case IDC_BITRATE_S :                          case IDC_BITRATE_S :
1897                                  /* alternate between bitrate/desired_length metrics */                                  /* alternate between bitrate/desired_length metrics */
1898                                  main_download(hDlg, config);                                  main_download(hDlg, config);
# Line 1585  Line 1901 
1901                                  main_upload(hDlg, config);                                  main_upload(hDlg, config);
1902                                  break;                                  break;
1903    
1904                            case IDC_BITRATE_ADV :
1905                                    main_download(hDlg, config);
1906                                    adv_dialog(hDlg, config, bitrate_dlgs, sizeof(bitrate_dlgs)/sizeof(int));
1907                                    main_mode(hDlg, config);
1908                                    main_upload(hDlg, config);
1909                                    break;
1910    
1911                          case IDC_DECODER :                          case IDC_DECODER :
1912                                  main_download(hDlg, config);                                  main_download(hDlg, config);
1913                                  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 2040 
2040    
2041          case WM_HSCROLL :          case WM_HSCROLL :
2042                  if((HWND)lParam == GetDlgItem(hDlg, IDC_SLIDER)) {                  if((HWND)lParam == GetDlgItem(hDlg, IDC_SLIDER)) {
2043                          if (config->mode == RC_MODE_2PASS2)                          if (g_use_bitrate)
2044                                  SetDlgItemInt(hDlg, IDC_BITRATE, SendMessage((HWND)lParam, TBM_GETPOS, 0, 0), FALSE);                                  SetDlgItemInt(hDlg, IDC_BITRATE, SendMessage((HWND)lParam, TBM_GETPOS, 0, 0), FALSE);
2045                          else                          else
2046                                  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 2142 
2142          return 1;          return 1;
2143  }  }
2144    
2145    
2146  void  void
2147  sort_zones(zone_t * zones, int zone_num, int * sel)  sort_zones(zone_t * zones, int zone_num, int * sel)
2148  {  {

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

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