[svn] / branches / dev-api-3 / xvidcore / src / encoder.c Repository:
ViewVC logotype

Diff of /branches/dev-api-3/xvidcore/src/encoder.c

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

revision 84, Fri Mar 29 07:03:24 2002 UTC revision 85, Fri Mar 29 07:08:09 2002 UTC
# Line 121  Line 121 
121          pEnc->iFrameNum = 0;          pEnc->iFrameNum = 0;
122          pEnc->iMaxKeyInterval = pParam->max_key_interval;          pEnc->iMaxKeyInterval = pParam->max_key_interval;
123    
124          /* try to allocate memory */          if (image_create(&pEnc->sCurrent, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height) < 0)
125            {
126                    xvid_free(pEnc);
127                    return XVID_ERR_MEMORY;
128            }
129    
130          pEnc->sCurrent.y        =       pEnc->sCurrent.u        =       pEnc->sCurrent.v        = NULL;          if (image_create(&pEnc->sReference, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height) < 0)
131          pEnc->sReference.y      =       pEnc->sReference.u      =       pEnc->sReference.v      = NULL;          {
132          pEnc->vInterH.y         =       pEnc->vInterH.u         =       pEnc->vInterH.v         = NULL;                  image_destroy(&pEnc->sCurrent, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);
133          pEnc->vInterV.y         =       pEnc->vInterV.u         =       pEnc->vInterV.v         = NULL;                  xvid_free(pEnc);
134          pEnc->vInterVf.y        =       pEnc->vInterVf.u        =       pEnc->vInterVf.v        = NULL;                  return XVID_ERR_MEMORY;
135          pEnc->vInterHV.y        =       pEnc->vInterHV.u        =       pEnc->vInterHV.v        = NULL;          }
136          pEnc->vInterHVf.y       =       pEnc->vInterHVf.u       =       pEnc->vInterHVf.v       = NULL;  
137            if (image_create(&pEnc->vInterH, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height) < 0)
138          pEnc->pMBs = NULL;          {
139                    image_destroy(&pEnc->sCurrent, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);
140          if (image_create(&pEnc->sCurrent, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height) < 0 ||                  image_destroy(&pEnc->sReference, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);
141                  image_create(&pEnc->sReference, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height) < 0 ||                  xvid_free(pEnc);
142                  image_create(&pEnc->vInterH, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height) < 0 ||                  return XVID_ERR_MEMORY;
143                  image_create(&pEnc->vInterV, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height) < 0 ||          }
144                  image_create(&pEnc->vInterVf, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height) < 0 ||  
145                  image_create(&pEnc->vInterHV, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height) < 0 ||          if (image_create(&pEnc->vInterV, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height) < 0)
                 image_create(&pEnc->vInterHVf, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height) < 0 ||  
                 (pEnc->pMBs = xvid_malloc(sizeof(MACROBLOCK) * pEnc->mbParam.mb_width * pEnc->mbParam.mb_height, CACHE_LINE)) == NULL)  
146          {          {
147                  image_destroy(&pEnc->sCurrent, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);                  image_destroy(&pEnc->sCurrent, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);
148                  image_destroy(&pEnc->sReference, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);                  image_destroy(&pEnc->sReference, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);
149                  image_destroy(&pEnc->vInterH, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);                  image_destroy(&pEnc->vInterH, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);
150                  image_destroy(&pEnc->vInterV, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);                  xvid_free(pEnc);
151                  image_destroy(&pEnc->vInterVf, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);                  return XVID_ERR_MEMORY;
152                  image_destroy(&pEnc->vInterHV, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);          }
153                  image_destroy(&pEnc->vInterHVf, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);  
154                  if (pEnc)          if (image_create(&pEnc->vInterHV, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height) < 0)
155                  {                  {
156                    image_destroy(&pEnc->sCurrent, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);
157                    image_destroy(&pEnc->sReference, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);
158                    image_destroy(&pEnc->vInterH, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);
159                    image_destroy(&pEnc->vInterV, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);
160                          xvid_free(pEnc);                          xvid_free(pEnc);
161                    return XVID_ERR_MEMORY;
162                  }                  }
163    
164            pEnc->pMBs = xvid_malloc(sizeof(MACROBLOCK) * pEnc->mbParam.mb_width * pEnc->mbParam.mb_height, CACHE_LINE);
165            if (pEnc->pMBs == NULL)
166            {
167                    image_destroy(&pEnc->sCurrent, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);
168                    image_destroy(&pEnc->sReference, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);
169                    image_destroy(&pEnc->vInterH, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);
170                    image_destroy(&pEnc->vInterV, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);
171                    image_destroy(&pEnc->vInterHV, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);
172                    xvid_free(pEnc);
173                  return XVID_ERR_MEMORY;                  return XVID_ERR_MEMORY;
174          }          }
175    
# Line 436  Line 453 
453          else          else
454                  iLimit = pEnc->mbParam.mb_width * pEnc->mbParam.mb_height + 1;                  iLimit = pEnc->mbParam.mb_width * pEnc->mbParam.mb_height + 1;
455    
456          if ((pEnc->mbParam.global_flags & XVID_HALFPEL) > 0)          if ((pEnc->mbParam.global_flags & XVID_HALFPEL) > 0) {
         {  
                 IMAGE *vInterV = NULL;  
                 IMAGE *vInterVf = NULL;  
                 IMAGE *vInterHV = NULL;  
                 IMAGE *vInterHVf = NULL;  
   
                 // interpolate fields together if field ME is used  
                 if (pEnc->mbParam.global_flags & XVID_INTERLACING &&  
                         pEnc->mbParam.global_flags & XVID_FIELDME)  
                 {  
                         vInterVf = &pEnc->vInterVf;  
                         vInterHVf = &pEnc->vInterHVf;  
                 }  
   
                 // perform normal interpolation, unless only field-based ME is allowed  
                 if (!(pEnc->mbParam.global_flags & XVID_INTERLACING) ||  
                         !(pEnc->mbParam.global_flags & XVID_FIELDMEONLY))  
                 {  
                         vInterV = &pEnc->vInterV;  
                         vInterHV = &pEnc->vInterHV;  
                 }  
   
457                  start_timer();                  start_timer();
458                  image_interpolate(pRef,                  image_interpolate(pRef, &pEnc->vInterH, &pEnc->vInterV, &pEnc->vInterHV,
459                                  &pEnc->vInterH,                                    pEnc->mbParam.edged_width, pEnc->mbParam.edged_height,
                                 vInterV, vInterVf,  
                                 vInterHV, vInterHVf,  
                                 pEnc->mbParam.edged_width,  
                                 pEnc->mbParam.edged_height,  
460                                  pEnc->mbParam.rounding_type);                                  pEnc->mbParam.rounding_type);
461                  stop_inter_timer();                  stop_inter_timer();
462          }          }
463    
464          start_timer();          start_timer();
465          bIntra = MotionEstimation(pEnc->pMBs,          bIntra = MotionEstimation(pEnc->pMBs, &pEnc->mbParam, &pEnc->sReference,
466                                  &pEnc->mbParam,                                    &pEnc->vInterH, &pEnc->vInterV,
467                                  &pEnc->sReference,                                    &pEnc->vInterHV, &pEnc->sCurrent, iLimit);
                                 &pEnc->vInterH,  
                                 &pEnc->vInterV, &pEnc->vInterVf,  
                                 &pEnc->vInterHV, &pEnc->vInterHVf,  
                                 &pEnc->sCurrent,  
                                 iLimit);  
468          stop_motion_timer();          stop_motion_timer();
469    
470          if (bIntra == 1)          if (bIntra == 1)
# Line 513  Line 499 
499                                                       x, y,                                                       x, y,
500                                                       &pEnc->sReference,                                                       &pEnc->sReference,
501                                                       &pEnc->vInterH,                                                       &pEnc->vInterH,
502                                                       &pEnc->vInterV, &pEnc->vInterVf,                                                       &pEnc->vInterV,
503                                                       &pEnc->vInterHV, &pEnc->vInterHVf,                                                       &pEnc->vInterHV,
504                                                       &pEnc->sCurrent,                                                       &pEnc->sCurrent,
505                                                       dct_codes,                                                       dct_codes,
506                                                       pEnc->mbParam.width,                                                       pEnc->mbParam.width,

Legend:
Removed from v.84  
changed lines
  Added in v.85

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