[cvs] / xvidcore / src / encoder.c Repository:
ViewVC logotype

Diff of /xvidcore/src/encoder.c

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

revision 1.95.2.19, Sun Apr 27 21:18:49 2003 UTC revision 1.95.2.22, Thu May 15 12:58:26 2003 UTC
# Line 134  Line 134 
134                  return XVID_ERR_MEMORY;                  return XVID_ERR_MEMORY;
135          memset(pEnc, 0, sizeof(Encoder));          memset(pEnc, 0, sizeof(Encoder));
136    
137        pEnc->mbParam.profile = create->profile;
138    
139          /* global flags */          /* global flags */
140      pEnc->mbParam.global_flags = create->global;      pEnc->mbParam.global_flags = create->global;
141    
# Line 151  Line 153 
153      if (pEnc->mbParam.fincr>0)      if (pEnc->mbParam.fincr>0)
154              simplify_time(&pEnc->mbParam.fincr, &pEnc->mbParam.fbase);              simplify_time(&pEnc->mbParam.fincr, &pEnc->mbParam.fbase);
155    
156        /* zones */
157        if(create->num_zones > 0) {
158                    pEnc->num_zones = create->num_zones;
159                    pEnc->zones = xvid_malloc(sizeof(xvid_enc_zone_t) * pEnc->num_zones, CACHE_LINE);
160                    if (pEnc->zones == NULL)
161                            goto xvid_err_memory0;
162            memcpy(pEnc->zones, create->zones, sizeof(xvid_enc_zone_t) * pEnc->num_zones);
163            } else {
164                    pEnc->num_zones = 0;
165                    pEnc->zones = NULL;
166            }
167    
168      /* plugins */      /* plugins */
169      if(create->num_plugins > 0) {      if(create->num_plugins > 0) {
170                  pEnc->num_plugins = create->num_plugins;                  pEnc->num_plugins = create->num_plugins;
# Line 174  Line 188 
188    
189          memset(&pcreate, 0, sizeof(xvid_plg_create_t));          memset(&pcreate, 0, sizeof(xvid_plg_create_t));
190          pcreate.version = XVID_VERSION;          pcreate.version = XVID_VERSION;
191            pcreate.num_zones = pEnc->num_zones;
192            pcreate.zones = pEnc->zones;
193          pcreate.width = pEnc->mbParam.width;          pcreate.width = pEnc->mbParam.width;
194          pcreate.height = pEnc->mbParam.height;          pcreate.height = pEnc->mbParam.height;
195          pcreate.fincr = pEnc->mbParam.fincr;          pcreate.fincr = pEnc->mbParam.fincr;
# Line 203  Line 219 
219          pEnc->mbParam.bquant_ratio = MAX(create->bquant_ratio, 0);          pEnc->mbParam.bquant_ratio = MAX(create->bquant_ratio, 0);
220          pEnc->mbParam.bquant_offset = create->bquant_offset;          pEnc->mbParam.bquant_offset = create->bquant_offset;
221    
222        /* min/max quant */
223        for (n=0; n<3; n++) {
224            pEnc->mbParam.min_quant[n] = create->min_quant[n] > 0 ? create->min_quant[n] : 2;
225            pEnc->mbParam.max_quant[n] = create->max_quant[n] > 0 ? create->max_quant[n] : 31;
226        }
227    
228          /* frame drop ratio */          /* frame drop ratio */
229          pEnc->mbParam.frame_drop_ratio = MAX(create->frame_drop_ratio, 0);          pEnc->mbParam.frame_drop_ratio = MAX(create->frame_drop_ratio, 0);
230    
# Line 505  Line 527 
527      }      }
528      xvid_free(pEnc->plugins);      xvid_free(pEnc->plugins);
529    
530        xvid_free(pEnc->zones);
531    
532          xvid_free(pEnc);          xvid_free(pEnc);
533    
534          create->handle = NULL;          create->handle = NULL;
# Line 582  Line 606 
606                                    pEnc->mbParam.edged_height);                                    pEnc->mbParam.edged_height);
607          image_destroy(&pEnc->f_refhv, pEnc->mbParam.edged_width,          image_destroy(&pEnc->f_refhv, pEnc->mbParam.edged_width,
608                                    pEnc->mbParam.edged_height);                                    pEnc->mbParam.edged_height);
609            image_destroy(&pEnc->vGMC, pEnc->mbParam.edged_width,
610                                      pEnc->mbParam.edged_height);
611    
612          if ((pEnc->mbParam.plugin_flags & XVID_REQORIGINAL)) {          if ((pEnc->mbParam.plugin_flags & XVID_REQORIGINAL)) {
613                  image_destroy(&pEnc->sOriginal, pEnc->mbParam.edged_width,                  image_destroy(&pEnc->sOriginal, pEnc->mbParam.edged_width,
# Line 618  Line 644 
644          xvid_free(pEnc->plugins);          xvid_free(pEnc->plugins);
645      }      }
646    
647        if (pEnc->num_plugins>0)
648            xvid_free(pEnc->zones);
649    
650          xvid_free(pEnc);          xvid_free(pEnc);
651    
652          return 0;  /* ok */          return 0;  /* ok */
# Line 639  Line 668 
668      memset(&data, 0, sizeof(xvid_plg_data_t));      memset(&data, 0, sizeof(xvid_plg_data_t));
669      data.version = XVID_VERSION;      data.version = XVID_VERSION;
670    
671        /* find zone */
672        for(i=0; i<pEnc->num_zones && pEnc->zones[i].frame<=frame->frame_num; i++) ;
673        data.zone = i>0 ? &pEnc->zones[i-1] : NULL;
674    
675      data.width = pEnc->mbParam.width;      data.width = pEnc->mbParam.width;
676      data.height = pEnc->mbParam.height;      data.height = pEnc->mbParam.height;
677      data.mb_width = pEnc->mbParam.mb_width;      data.mb_width = pEnc->mbParam.mb_width;
# Line 666  Line 699 
699    
700      if (opt == XVID_PLG_BEFORE) {      if (opt == XVID_PLG_BEFORE) {
701          data.type = XVID_TYPE_AUTO;          data.type = XVID_TYPE_AUTO;
702          data.quant = 2;          data.quant = 0;
703    
704                  if ((pEnc->mbParam.plugin_flags & XVID_REQDQUANTS)) {                  if ((pEnc->mbParam.plugin_flags & XVID_REQDQUANTS)) {
705              data.dquant = pEnc->temp_dquants;              data.dquant = pEnc->temp_dquants;
# Line 758  Line 791 
791      /* copy modified values back into frame*/      /* copy modified values back into frame*/
792      if (opt == XVID_PLG_BEFORE) {      if (opt == XVID_PLG_BEFORE) {
793          *type = data.type;          *type = data.type;
794          *quant = data.quant;          *quant = data.quant > 0 ? data.quant : 2;   /* default */
795    
796          if ((pEnc->mbParam.plugin_flags & XVID_REQDQUANTS)) {          if ((pEnc->mbParam.plugin_flags & XVID_REQDQUANTS)) {
797              for (j=0; j<pEnc->mbParam.mb_height; j++)              for (j=0; j<pEnc->mbParam.mb_height; j++)
# Line 1046  Line 1079 
1079                          type = MEanalysis(&pEnc->reference->image, pEnc->current,                          type = MEanalysis(&pEnc->reference->image, pEnc->current,
1080                                          &pEnc->mbParam, pEnc->mbParam.iMaxKeyInterval,                                          &pEnc->mbParam, pEnc->mbParam.iMaxKeyInterval,
1081                                          pEnc->iFrameNum, pEnc->bframenum_tail, xFrame->bframe_threshold);                                          pEnc->iFrameNum, pEnc->bframenum_tail, xFrame->bframe_threshold);
   
             if (type == B_VOP && !(pEnc->current->vop_flags & XVID_VOP_DYNAMIC_BFRAMES)) {  
                 type = P_VOP;   /* disable dynamic bframes */  
             }  
1082                  }                  }
1083          }          }
1084    
1085      /* bframes buffer overflow check */      /* bframes buffer overflow check */
1086      if (type != I_VOP) {      if (type == B_VOP && pEnc->bframenum_tail >= pEnc->mbParam.max_bframes) {
         if (pEnc->bframenum_tail >= pEnc->mbParam.max_bframes) {  
1087              type = P_VOP;              type = P_VOP;
         }else{  
             type = B_VOP;  
         }  
1088      }      }
1089    
1090          pEnc->iFrameNum++;          pEnc->iFrameNum++;

Legend:
Removed from v.1.95.2.19  
changed lines
  Added in v.1.95.2.22

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