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

Diff of /xvidcore/src/motion/vop_type_decision.c

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

revision 1.1.2.1, Wed Sep 10 22:19:00 2003 UTC revision 1.1.2.3, Sat Nov 15 14:48:41 2003 UTC
# Line 33  Line 33 
33  #include "motion_inlines.h"  #include "motion_inlines.h"
34    
35    
36  #define INTRA_THRESH    2200  #define INTRA_THRESH    2000
37  #define INTER_THRESH    40  #define INTER_THRESH    40
38  #define INTRA_THRESH2   95  #define INTRA_THRESH2   90
39    
40  static void  static void
41  CheckCandidate32I(const int x, const int y, const SearchData * const data, const unsigned int Direction)  CheckCandidate32I(const int x, const int y, const SearchData * const data, const unsigned int Direction)
# Line 137  Line 137 
137  MEanalysis(     const IMAGE * const pRef,  MEanalysis(     const IMAGE * const pRef,
138                          const FRAMEINFO * const Current,                          const FRAMEINFO * const Current,
139                          const MBParam * const pParam,                          const MBParam * const pParam,
140                          const int maxIntra, //maximum number if non-I frames                          const int maxIntra, /* maximum number if non-I frames */
141                          const int intraCount, //number of non-I frames after last I frame; 0 if we force P/B frame                          const int intraCount, /* number of non-I frames after last I frame; 0 if we force P/B frame */
142                          const int bCount, // number of B frames in a row                          const int bCount, /* number of B frames in a row */
143                          const int b_thresh)                          const int b_thresh)
144  {  {
145          uint32_t x, y, intra = 0;          uint32_t x, y, intra = 0;
# Line 147  Line 147 
147          MACROBLOCK * const pMBs = Current->mbs;          MACROBLOCK * const pMBs = Current->mbs;
148          const IMAGE * const pCurrent = &Current->image;          const IMAGE * const pCurrent = &Current->image;
149          int IntraThresh = INTRA_THRESH, InterThresh = INTER_THRESH + b_thresh;          int IntraThresh = INTRA_THRESH, InterThresh = INTER_THRESH + b_thresh;
150          int blocks = 0;          int blocks = 10;
151          int complexity = 0;          int complexity = 0;
152    
153          int32_t iMinSAD[5], temp[5];          int32_t iMinSAD[5], temp[5];
# Line 164  Line 164 
164          Data.qpel_precision = 0;          Data.qpel_precision = 0;
165    
166          if (intraCount != 0) {          if (intraCount != 0) {
167                  if (intraCount < 10) // we're right after an I frame                  if (intraCount < 10) /* we're right after an I frame */
168                          IntraThresh += 15* (intraCount - 10) * (intraCount - 10);                          IntraThresh += 15* (intraCount - 10) * (intraCount - 10);
169                  else                  else
170                          if ( 5*(maxIntra - intraCount) < maxIntra) // we're close to maximum. 2 sec when max is 10 sec                          if ( 5*(maxIntra - intraCount) < maxIntra) /* we're close to maximum. 2 sec when max is 10 sec */
171                                  IntraThresh -= (IntraThresh * (maxIntra - 8*(maxIntra - intraCount)))/maxIntra;                                  IntraThresh -= (IntraThresh * (maxIntra - 8*(maxIntra - intraCount)))/maxIntra;
172          }          }
173    
# Line 182  Line 182 
182                          blocks += 10;                          blocks += 10;
183    
184                          if (bCount == 0) pMBs[x + y * pParam->mb_width].mvs[0] = zeroMV;                          if (bCount == 0) pMBs[x + y * pParam->mb_width].mvs[0] = zeroMV;
185                          else { //extrapolation of the vector found for last frame                          else { /* extrapolation of the vector found for last frame */
186                                  pMBs[x + y * pParam->mb_width].mvs[0].x =                                  pMBs[x + y * pParam->mb_width].mvs[0].x =
187                                          (pMBs[x + y * pParam->mb_width].mvs[0].x * (bCount+1) ) / bCount;                                          (pMBs[x + y * pParam->mb_width].mvs[0].x * (bCount+1) ) / bCount;
188                                  pMBs[x + y * pParam->mb_width].mvs[0].y =                                  pMBs[x + y * pParam->mb_width].mvs[0].y =
# Line 215  Line 215 
215    
216          sSAD /= complexity + 4*blocks;          sSAD /= complexity + 4*blocks;
217    
218          if (intraCount > 80 && sSAD > INTRA_THRESH2 ) return I_VOP;          if (intraCount > 60 && sSAD > INTRA_THRESH2 ) return I_VOP;
219          if (sSAD > InterThresh ) return P_VOP;          if (sSAD > InterThresh ) return P_VOP;
220          emms();          emms();
221          return B_VOP;          return B_VOP;

Legend:
Removed from v.1.1.2.1  
changed lines
  Added in v.1.1.2.3

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