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

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

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

revision 1326, Fri Jan 23 11:17:24 2004 UTC revision 1329, Sat Jan 24 13:36:00 2004 UTC
# Line 310  Line 310 
310          m_hdll = LoadLibrary(XVID_DLL_NAME);          m_hdll = LoadLibrary(XVID_DLL_NAME);
311          if (m_hdll == NULL) {          if (m_hdll == NULL) {
312                  DPRINTF("dll load failed");                  DPRINTF("dll load failed");
313                  MessageBox(0, XVID_DLL_NAME " not found","Error", 0);                  MessageBox(0, XVID_DLL_NAME " not found!","Error!", MB_ICONEXCLAMATION|MB_OK);
314                  return XVID_ERR_FAIL;                  return XVID_ERR_FAIL;
315          }          }
316    
# Line 346  Line 346 
346          return 0;          return 0;
347  }  }
348    
349    void
350    sort_zones(zone_t * zones, int zone_num, int * sel);
351    
352    static void
353    prepare_cquant_zones(CONFIG * config) {
354    
355            int i = 0;
356            if (config->num_zones == 0 || config->zones[0].frame != 0) {
357                    /* first zone does not start at frame 0 or doesn't exist */
358    
359                    if (config->num_zones >= MAX_ZONES) config->num_zones--; /* we scrifice last zone */
360    
361                    config->zones[config->num_zones].frame = 0;
362                    config->zones[config->num_zones].mode = RC_ZONE_QUANT;
363                    config->zones[config->num_zones].weight = 100;
364                    config->zones[config->num_zones].quant = config->desired_quant;
365                    config->zones[config->num_zones].type = XVID_TYPE_AUTO;
366                    config->zones[config->num_zones].greyscale = 0;
367                    config->zones[config->num_zones].chroma_opt = 0;
368                    config->zones[config->num_zones].bvop_threshold = 0;
369                    config->num_zones++;
370    
371                    sort_zones(config->zones, config->num_zones, &i);
372            }
373    
374            /* step 2: let's change all weight zones into quant zones */
375    
376            for(i = 0; i < config->num_zones; i++)
377                    if (config->zones[i].mode == RC_ZONE_WEIGHT) {
378                            config->zones[i].mode = RC_ZONE_QUANT;
379                            config->zones[i].quant = (100*config->desired_quant) / config->zones[i].weight;
380                    }
381    }
382    
383    
384  LRESULT compress_begin(CODEC * codec, BITMAPINFO * lpbiInput, BITMAPINFO * lpbiOutput)  LRESULT compress_begin(CODEC * codec, BITMAPINFO * lpbiInput, BITMAPINFO * lpbiOutput)
385  {  {
# Line 356  Line 390 
390          xvid_plugin_2pass1_t pass1;          xvid_plugin_2pass1_t pass1;
391          xvid_plugin_2pass2_t pass2;          xvid_plugin_2pass2_t pass2;
392          int i;          int i;
393            HANDLE hFile;
394    
395            CONFIG tmpCfg; /* if we want to alter config to suit our needs, it shouldn't be visible to user later */
396            memcpy(&tmpCfg, &codec->config, sizeof(CONFIG));
397    
398          if (init_dll() != 0) return ICERR_ERROR;          if (init_dll() != 0) return ICERR_ERROR;
399          /* destroy previously created codec */          /* destroy previously created codec */
# Line 373  Line 411 
411          memset(&create, 0, sizeof(create));          memset(&create, 0, sizeof(create));
412          create.version = XVID_VERSION;          create.version = XVID_VERSION;
413    
         /* zones */  
         create.zones = malloc(sizeof(xvid_enc_zone_t) * codec->config.num_zones);  
         create.num_zones = codec->config.num_zones;  
         for (i=0; i < create.num_zones; i++) {  
                 create.zones[i].frame = codec->config.zones[i].frame;  
                 if (codec->config.zones[i].mode == RC_ZONE_QUANT) {  
                         create.zones[i].mode = XVID_ZONE_QUANT;  
                         create.zones[i].increment = codec->config.zones[i].quant;  
                 }else{  
                         create.zones[i].mode = XVID_ZONE_WEIGHT;  
                         create.zones[i].increment = codec->config.zones[i].weight;  
                 }  
                 create.zones[i].base = 100;  
         }  
   
414          /* plugins */          /* plugins */
415          create.plugins = plugins;          create.plugins = plugins;
416          switch (codec->config.mode)          switch (codec->config.mode)
# Line 402  Line 425 
425                  plugins[create.num_plugins].func = xvid_plugin_single_func;                  plugins[create.num_plugins].func = xvid_plugin_single_func;
426                  plugins[create.num_plugins].param = &single;                  plugins[create.num_plugins].param = &single;
427                  create.num_plugins++;                  create.num_plugins++;
428                    if (!codec->config.use_2pass_bitrate) /* constant-quant mode */
429                            prepare_cquant_zones(&tmpCfg);
430                  break;                  break;
431    
432          case RC_MODE_2PASS1 :          case RC_MODE_2PASS1 :
# Line 424  Line 449 
449                  }                  }
450                  pass2.filename = codec->config.stats;                  pass2.filename = codec->config.stats;
451    
452                    hFile = CreateFile(pass2.filename, 0, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
453                    if (hFile == INVALID_HANDLE_VALUE)
454                    {
455                            MessageBox(0, "Statsfile not found!","Error!", MB_ICONEXCLAMATION|MB_OK);
456                            return XVID_ERR_FAIL;
457                    } else
458                    {
459                            CloseHandle(hFile);
460                    }
461    
462                  pass2.keyframe_boost = codec->config.keyframe_boost;   /* keyframe boost percentage: [0..100...]; */                  pass2.keyframe_boost = codec->config.keyframe_boost;   /* keyframe boost percentage: [0..100...]; */
463                  pass2.curve_compression_high = codec->config.curve_compression_high;                  pass2.curve_compression_high = codec->config.curve_compression_high;
464                  pass2.curve_compression_low = codec->config.curve_compression_low;                  pass2.curve_compression_low = codec->config.curve_compression_low;
# Line 446  Line 481 
481                  break;                  break;
482          }          }
483    
484            /* zones  - copy from tmpCfg in case we automatically altered them above */
485            create.zones = malloc(sizeof(xvid_enc_zone_t) * tmpCfg.num_zones);
486            create.num_zones = tmpCfg.num_zones;
487            for (i=0; i < create.num_zones; i++) {
488                    create.zones[i].frame = tmpCfg.zones[i].frame;
489                    if (tmpCfg.zones[i].mode == RC_ZONE_QUANT) {
490                            create.zones[i].mode = XVID_ZONE_QUANT;
491                            create.zones[i].increment = tmpCfg.zones[i].quant;
492                    }else{
493                            create.zones[i].mode = XVID_ZONE_WEIGHT;
494                            create.zones[i].increment = tmpCfg.zones[i].weight;
495                    }
496                    create.zones[i].base = 100;
497            }
498    
499            /* lumimasking plugin */
500          if ((profiles[codec->config.profile].flags & PROFILE_ADAPTQUANT) && codec->config.lum_masking) {          if ((profiles[codec->config.profile].flags & PROFILE_ADAPTQUANT) && codec->config.lum_masking) {
501                  plugins[create.num_plugins].func = xvid_plugin_lumimasking_func;                  plugins[create.num_plugins].func = xvid_plugin_lumimasking_func;
502                  plugins[create.num_plugins].param = NULL;                  plugins[create.num_plugins].param = NULL;

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

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