[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 78, Thu Mar 28 20:57:25 2002 UTC revision 84, Fri Mar 29 07:03:24 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          if (image_create(&pEnc->sCurrent, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height) < 0)          /* try to allocate memory */
         {  
                 xvid_free(pEnc);  
                 return XVID_ERR_MEMORY;  
         }  
   
         if (image_create(&pEnc->sReference, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height) < 0)  
         {  
                 image_destroy(&pEnc->sCurrent, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);  
                 xvid_free(pEnc);  
                 return XVID_ERR_MEMORY;  
         }  
   
         if (image_create(&pEnc->vInterH, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height) < 0)  
         {  
                 image_destroy(&pEnc->sCurrent, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);  
                 image_destroy(&pEnc->sReference, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);  
                 xvid_free(pEnc);  
                 return XVID_ERR_MEMORY;  
         }  
   
         if (image_create(&pEnc->vInterV, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height) < 0)  
         {  
                 image_destroy(&pEnc->sCurrent, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);  
                 image_destroy(&pEnc->sReference, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);  
                 image_destroy(&pEnc->vInterH, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);  
                 xvid_free(pEnc);  
                 return XVID_ERR_MEMORY;  
         }  
125    
126          if (image_create(&pEnc->vInterHV, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height) < 0)          pEnc->sCurrent.y        =       pEnc->sCurrent.u        =       pEnc->sCurrent.v        = NULL;
127          {          pEnc->sReference.y      =       pEnc->sReference.u      =       pEnc->sReference.v      = NULL;
128                  image_destroy(&pEnc->sCurrent, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);          pEnc->vInterH.y         =       pEnc->vInterH.u         =       pEnc->vInterH.v         = NULL;
129                  image_destroy(&pEnc->sReference, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);          pEnc->vInterV.y         =       pEnc->vInterV.u         =       pEnc->vInterV.v         = NULL;
130                  image_destroy(&pEnc->vInterH, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);          pEnc->vInterVf.y        =       pEnc->vInterVf.u        =       pEnc->vInterVf.v        = NULL;
131                  image_destroy(&pEnc->vInterV, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);          pEnc->vInterHV.y        =       pEnc->vInterHV.u        =       pEnc->vInterHV.v        = NULL;
132                  xvid_free(pEnc);          pEnc->vInterHVf.y       =       pEnc->vInterHVf.u       =       pEnc->vInterHVf.v       = NULL;
133                  return XVID_ERR_MEMORY;  
134          }          pEnc->pMBs = NULL;
135    
136          pEnc->pMBs = xvid_malloc(sizeof(MACROBLOCK) * pEnc->mbParam.mb_width * pEnc->mbParam.mb_height, CACHE_LINE);          if (image_create(&pEnc->sCurrent, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height) < 0 ||
137          if (pEnc->pMBs == NULL)                  image_create(&pEnc->sReference, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height) < 0 ||
138                    image_create(&pEnc->vInterH, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height) < 0 ||
139                    image_create(&pEnc->vInterV, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height) < 0 ||
140                    image_create(&pEnc->vInterVf, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height) < 0 ||
141                    image_create(&pEnc->vInterHV, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height) < 0 ||
142                    image_create(&pEnc->vInterHVf, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height) < 0 ||
143                    (pEnc->pMBs = xvid_malloc(sizeof(MACROBLOCK) * pEnc->mbParam.mb_width * pEnc->mbParam.mb_height, CACHE_LINE)) == NULL)
144          {          {
145                  image_destroy(&pEnc->sCurrent, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);                  image_destroy(&pEnc->sCurrent, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);
146                  image_destroy(&pEnc->sReference, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);                  image_destroy(&pEnc->sReference, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);
147                  image_destroy(&pEnc->vInterH, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);                  image_destroy(&pEnc->vInterH, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);
148                  image_destroy(&pEnc->vInterV, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);                  image_destroy(&pEnc->vInterV, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);
149                    image_destroy(&pEnc->vInterVf, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);
150                  image_destroy(&pEnc->vInterHV, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);                  image_destroy(&pEnc->vInterHV, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);
151                    image_destroy(&pEnc->vInterHVf, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);
152                    if (pEnc)
153                    {
154                  xvid_free(pEnc);                  xvid_free(pEnc);
155                    }
156                  return XVID_ERR_MEMORY;                  return XVID_ERR_MEMORY;
157          }          }
158    
# Line 258  Line 241 
241                  pEnc->mbParam.quant = adaptive_quantization(pEnc->sCurrent.y,                  pEnc->mbParam.quant = adaptive_quantization(pEnc->sCurrent.y,
242                                                              pEnc->mbParam.width,                                                              pEnc->mbParam.width,
243                                                              temp_dquants,                                                              temp_dquants,
244                                                              pFrame->quant,                                                              pEnc->mbParam.quant,
245                                                              pFrame->quant,                                                              pEnc->mbParam.quant,
246                                                              2*pFrame->quant,                                                              2*pEnc->mbParam.quant,
247                                                              pEnc->mbParam.mb_width,                                                              pEnc->mbParam.mb_width,
248                                                              pEnc->mbParam.mb_height);                                                              pEnc->mbParam.mb_height);
249    
# Line 453  Line 436 
436          else          else
437                  iLimit = pEnc->mbParam.mb_width * pEnc->mbParam.mb_height + 1;                  iLimit = pEnc->mbParam.mb_width * pEnc->mbParam.mb_height + 1;
438    
439          if ((pEnc->mbParam.global_flags & XVID_HALFPEL) > 0) {          if ((pEnc->mbParam.global_flags & XVID_HALFPEL) > 0)
440            {
441                    IMAGE *vInterV = NULL;
442                    IMAGE *vInterVf = NULL;
443                    IMAGE *vInterHV = NULL;
444                    IMAGE *vInterHVf = NULL;
445    
446                    // interpolate fields together if field ME is used
447                    if (pEnc->mbParam.global_flags & XVID_INTERLACING &&
448                            pEnc->mbParam.global_flags & XVID_FIELDME)
449                    {
450                            vInterVf = &pEnc->vInterVf;
451                            vInterHVf = &pEnc->vInterHVf;
452                    }
453    
454                    // perform normal interpolation, unless only field-based ME is allowed
455                    if (!(pEnc->mbParam.global_flags & XVID_INTERLACING) ||
456                            !(pEnc->mbParam.global_flags & XVID_FIELDMEONLY))
457                    {
458                            vInterV = &pEnc->vInterV;
459                            vInterHV = &pEnc->vInterHV;
460                    }
461    
462                  start_timer();                  start_timer();
463                  image_interpolate(pRef, &pEnc->vInterH, &pEnc->vInterV, &pEnc->vInterHV,                  image_interpolate(pRef,
464                                    pEnc->mbParam.edged_width, pEnc->mbParam.edged_height,                                  &pEnc->vInterH,
465                                    vInterV, vInterVf,
466                                    vInterHV, vInterHVf,
467                                    pEnc->mbParam.edged_width,
468                                    pEnc->mbParam.edged_height,
469                                    pEnc->mbParam.rounding_type);                                    pEnc->mbParam.rounding_type);
470                  stop_inter_timer();                  stop_inter_timer();
471          }          }
472    
473          start_timer();          start_timer();
474          bIntra = MotionEstimation(pEnc->pMBs, &pEnc->mbParam, &pEnc->sReference,          bIntra = MotionEstimation(pEnc->pMBs,
475                                    &pEnc->vInterH, &pEnc->vInterV,                                  &pEnc->mbParam,
476                                    &pEnc->vInterHV, &pEnc->sCurrent, iLimit);                                  &pEnc->sReference,
477                                    &pEnc->vInterH,
478                                    &pEnc->vInterV, &pEnc->vInterVf,
479                                    &pEnc->vInterHV, &pEnc->vInterHVf,
480                                    &pEnc->sCurrent,
481                                    iLimit);
482          stop_motion_timer();          stop_motion_timer();
483    
484          if (bIntra == 1)          if (bIntra == 1)
# Line 499  Line 513 
513                                                       x, y,                                                       x, y,
514                                                       &pEnc->sReference,                                                       &pEnc->sReference,
515                                                       &pEnc->vInterH,                                                       &pEnc->vInterH,
516                                                       &pEnc->vInterV,                                                       &pEnc->vInterV, &pEnc->vInterVf,
517                                                       &pEnc->vInterHV,                                                       &pEnc->vInterHV, &pEnc->vInterHVf,
518                                                       &pEnc->sCurrent,                                                       &pEnc->sCurrent,
519                                                       dct_codes,                                                       dct_codes,
520                                                       pEnc->mbParam.width,                                                       pEnc->mbParam.width,

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

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