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

Diff of /trunk/xvidcore/src/encoder.c

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

revision 101, Fri Apr 5 14:40:36 2002 UTC revision 113, Wed Apr 10 07:40:51 2002 UTC
# Line 140  Line 140 
140                  image_create(&pEnc->vInterVf, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height) < 0 ||                  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 ||                  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 ||                  image_create(&pEnc->vInterHVf, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height) < 0 ||
143    #ifdef _DEBUG
144                    image_create(&pEnc->sOriginal, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height) < 0 ||
145    #endif
146                  (pEnc->pMBs = xvid_malloc(sizeof(MACROBLOCK) * pEnc->mbParam.mb_width * pEnc->mbParam.mb_height, CACHE_LINE)) == NULL)                  (pEnc->pMBs = xvid_malloc(sizeof(MACROBLOCK) * pEnc->mbParam.mb_width * pEnc->mbParam.mb_height, CACHE_LINE)) == NULL)
147          {          {
148                  image_destroy(&pEnc->sCurrent, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);                  image_destroy(&pEnc->sCurrent, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);
# Line 149  Line 152 
152                  image_destroy(&pEnc->vInterVf, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);                  image_destroy(&pEnc->vInterVf, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);
153                  image_destroy(&pEnc->vInterHV, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);                  image_destroy(&pEnc->vInterHV, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);
154                  image_destroy(&pEnc->vInterHVf, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);                  image_destroy(&pEnc->vInterHVf, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);
155    #ifdef _DEBUG
156                    image_destroy(&pEnc->sOriginal, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);
157    #endif
158                  if (pEnc)                  if (pEnc)
159                  {                  {
160                          xvid_free(pEnc);                          xvid_free(pEnc);
# Line 166  Line 172 
172    
173          if (pParam->bitrate)          if (pParam->bitrate)
174          {          {
175                  RateControlInit(pParam->bitrate, pParam->rc_buffersize, pParam->fbase * 100 / pParam->fincr,                  RateControlInit(pParam->bitrate, pParam->rc_buffersize, pParam->fbase * 1000 / pParam->fincr,
176                                  pParam->max_quantizer, pParam->min_quantizer);                                  pParam->max_quantizer, pParam->min_quantizer);
177          }          }
178    
# Line 190  Line 196 
196          image_destroy(&pEnc->vInterVf, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);          image_destroy(&pEnc->vInterVf, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);
197          image_destroy(&pEnc->vInterHV, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);          image_destroy(&pEnc->vInterHV, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);
198          image_destroy(&pEnc->vInterHVf, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);          image_destroy(&pEnc->vInterHVf, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);
199    #ifdef _DEBUG
200                    image_destroy(&pEnc->sOriginal, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);
201    #endif
202          xvid_free(pEnc);          xvid_free(pEnc);
203    
204          return XVID_ERR_OK;          return XVID_ERR_OK;
# Line 201  Line 210 
210          Bitstream bs;          Bitstream bs;
211          uint32_t bits;          uint32_t bits;
212          uint16_t write_vol_header = 0;          uint16_t write_vol_header = 0;
213    #ifdef _DEBUG
214            float psnr;
215            uint8_t temp[100];
216    #endif
217    
218          start_global_timer();          start_global_timer();
219    
# Line 223  Line 236 
236    
237          EMMS();          EMMS();
238    
239    #ifdef _DEBUG
240            image_copy(&pEnc->sOriginal, &pEnc->sCurrent, pEnc->mbParam.edged_width, pEnc->mbParam.height);
241    #endif
242    
243          BitstreamInit(&bs, pFrame->bitstream, 0);          BitstreamInit(&bs, pFrame->bitstream, 0);
244    
245          if (pFrame->quant == 0)          if (pFrame->quant == 0)
# Line 323  Line 340 
340                  RateControlUpdate(pEnc->mbParam.quant, pFrame->length, pFrame->intra);                  RateControlUpdate(pEnc->mbParam.quant, pFrame->length, pFrame->intra);
341          }          }
342    
343    #ifdef _DEBUG
344            psnr = image_psnr(&pEnc->sOriginal, &pEnc->sCurrent, pEnc->mbParam.edged_width,
345                                    pEnc->mbParam.width, pEnc->mbParam.height);
346    
347            sprintf(temp, "PSNR: %f\n", psnr);
348            DEBUG(temp);
349    #endif
350    
351          pEnc->iFrameNum++;          pEnc->iFrameNum++;
352          image_swap(&pEnc->sCurrent, &pEnc->sReference);          image_swap(&pEnc->sCurrent, &pEnc->sReference);
353    
# Line 352  Line 377 
377  }  }
378    
379    
 static int FrameCodeI(Encoder * pEnc, Bitstream * bs, uint32_t *pBits)  
 {  
   
         DECLARE_ALIGNED_MATRIX(dct_codes, 6, 64, int16_t, CACHE_LINE);  
         DECLARE_ALIGNED_MATRIX(qcoeff,    6, 64, int16_t, CACHE_LINE);  
   
         uint16_t x, y;  
   
         pEnc->iFrameNum = 0;  
         pEnc->mbParam.rounding_type = 1;  
         pEnc->mbParam.coding_type = I_VOP;  
   
         BitstreamWriteVolHeader(bs, &pEnc->mbParam);  
         BitstreamWriteVopHeader(bs, &pEnc->mbParam);  
   
         *pBits = BitstreamPos(bs);  
   
         pEnc->sStat.iTextBits = 0;  
         pEnc->sStat.kblks = pEnc->mbParam.mb_width * pEnc->mbParam.mb_height;  
         pEnc->sStat.mblks = pEnc->sStat.ublks = 0;  
   
         for (y = 0; y < pEnc->mbParam.mb_height; y++)  
                 for (x = 0; x < pEnc->mbParam.mb_width; x++)  
                 {  
                         MACROBLOCK *pMB = &pEnc->pMBs[x + y * pEnc->mbParam.mb_width];  
   
                         CodeIntraMB(pEnc, pMB);  
   
                         MBTransQuantIntra(&pEnc->mbParam, pMB, x, y, dct_codes, qcoeff, &pEnc->sCurrent);  
   
                         start_timer();  
                         MBPrediction(&pEnc->mbParam, x, y, pEnc->mbParam.mb_width, qcoeff, pEnc->pMBs);  
                         stop_prediction_timer();  
   
                         start_timer();  
                         MBCoding(&pEnc->mbParam, pMB, qcoeff, bs, &pEnc->sStat);  
                         stop_coding_timer();  
                 }  
   
         emms();  
   
         *pBits = BitstreamPos(bs) - *pBits;  
         pEnc->sStat.fMvPrevSigma = -1;  
         pEnc->sStat.iMvSum = 0;  
         pEnc->sStat.iMvCount = 0;  
         pEnc->mbParam.fixed_code = 2;  
   
         return 1;                                        // intra  
 }  
   
   
380  #define FCODEBITS       3  #define FCODEBITS       3
381  #define MODEBITS        5  #define MODEBITS        5
382    
# Line 604  Line 578 
578  }  }
579    
580    
581    static int FrameCodeI(Encoder * pEnc, Bitstream * bs, uint32_t *pBits)
582    {
583    
584            DECLARE_ALIGNED_MATRIX(dct_codes, 6, 64, int16_t, CACHE_LINE);
585            DECLARE_ALIGNED_MATRIX(qcoeff,    6, 64, int16_t, CACHE_LINE);
586    
587            uint16_t x, y;
588    
589            pEnc->iFrameNum = 0;
590            pEnc->mbParam.rounding_type = 1;
591            pEnc->mbParam.coding_type = I_VOP;
592    
593            BitstreamWriteVolHeader(bs, &pEnc->mbParam);
594            BitstreamWriteVopHeader(bs, &pEnc->mbParam);
595    
596            *pBits = BitstreamPos(bs);
597    
598            pEnc->sStat.iTextBits = 0;
599            pEnc->sStat.kblks = pEnc->mbParam.mb_width * pEnc->mbParam.mb_height;
600            pEnc->sStat.mblks = pEnc->sStat.ublks = 0;
601    
602            for (y = 0; y < pEnc->mbParam.mb_height; y++)
603                    for (x = 0; x < pEnc->mbParam.mb_width; x++)
604                    {
605                            MACROBLOCK *pMB = &pEnc->pMBs[x + y * pEnc->mbParam.mb_width];
606    
607                            CodeIntraMB(pEnc, pMB);
608    
609                            MBTransQuantIntra(&pEnc->mbParam, pMB, x, y, dct_codes, qcoeff, &pEnc->sCurrent);
610    
611                            start_timer();
612                            MBPrediction(&pEnc->mbParam, x, y, pEnc->mbParam.mb_width, qcoeff, pEnc->pMBs);
613                            stop_prediction_timer();
614    
615                            start_timer();
616                            MBCoding(&pEnc->mbParam, pMB, qcoeff, bs, &pEnc->sStat);
617                            stop_coding_timer();
618                    }
619    
620            emms();
621    
622            *pBits = BitstreamPos(bs) - *pBits;
623            pEnc->sStat.fMvPrevSigma = -1;
624            pEnc->sStat.iMvSum = 0;
625            pEnc->sStat.iMvCount = 0;
626            pEnc->mbParam.fixed_code = 2;
627    
628            if (pEnc->mbParam.global_flags & XVID_HINTEDME_GET)
629            {
630                    HintedMEGet(pEnc, 1);
631            }
632    
633            return 1;                                        // intra
634    }
635    
636    
637  #define INTRA_THRESHOLD 0.5  #define INTRA_THRESHOLD 0.5
638    
639  static int FrameCodeP(Encoder * pEnc, Bitstream * bs, uint32_t *pBits, bool force_inter, bool vol_header)  static int FrameCodeP(Encoder * pEnc, Bitstream * bs, uint32_t *pBits, bool force_inter, bool vol_header)
# Line 660  Line 690 
690    
691          if (bIntra == 1)          if (bIntra == 1)
692          {          {
                 if (pEnc->mbParam.global_flags & XVID_HINTEDME_GET)  
                 {  
                         HintedMEGet(pEnc, 1);  
                 }  
693                  return FrameCodeI(pEnc, bs, pBits);                  return FrameCodeI(pEnc, bs, pBits);
694          }          }
695    

Legend:
Removed from v.101  
changed lines
  Added in v.113

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