[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 189, Fri Jun 7 10:36:08 2002 UTC revision 192, Sun Jun 9 13:16:26 2002 UTC
# Line 36  Line 36 
36   *             MinChen <chenm001@163.com>   *             MinChen <chenm001@163.com>
37   *  14.04.2002 added FrameCodeB()   *  14.04.2002 added FrameCodeB()
38   *   *
39   *  $Id: encoder.c,v 1.38 2002-06-07 10:36:08 edgomez Exp $   *  $Id: encoder.c,v 1.39 2002-06-09 13:16:26 edgomez Exp $
40   *   *
41   ***************************************************************************/   ***************************************************************************/
42    
# Line 64  Line 64 
64  #define ENC_CHECK(X) if(!(X)) return XVID_ERR_FORMAT  #define ENC_CHECK(X) if(!(X)) return XVID_ERR_FORMAT
65  #define SWAP(A,B)    { void * tmp = A; A = B; B = tmp; }  #define SWAP(A,B)    { void * tmp = A; A = B; B = tmp; }
66    
67    static int FrameCodeI(Encoder * pEnc,
68                          Bitstream * bs,
69                          uint32_t *pBits);
70    
71    static int FrameCodeP(Encoder * pEnc,
72                          Bitstream * bs,
73                          uint32_t *pBits,
74                          bool force_inter,
75                          bool vol_header);
76    
77  static int FrameCodeI(Encoder * pEnc, Bitstream * bs, uint32_t *pBits);  #ifdef BFRAMES
78  static int FrameCodeP(Encoder * pEnc, Bitstream * bs, uint32_t *pBits, bool force_inter, bool vol_header);  static void FrameCodeB(Encoder * pEnc,
79  static void FrameCodeB(Encoder * pEnc, FRAMEINFO * frame, Bitstream * bs, uint32_t *pBits);                         FRAMEINFO * frame,
80                           Bitstream * bs,
81                           uint32_t *pBits);
82    #endif
83    
84  static int DQtab[4] =  static int DQtab[4] =
85  {  {
# Line 100  Line 112 
112          ENC_CHECK(!(pParam->width % 2));          ENC_CHECK(!(pParam->width % 2));
113          ENC_CHECK(!(pParam->height % 2));          ENC_CHECK(!(pParam->height % 2));
114    
115            /* Fps */
116    
117          if (pParam->fincr <= 0 || pParam->fbase <= 0)          if (pParam->fincr <= 0 || pParam->fbase <= 0)
118          {          {
119                  pParam->fincr = 1;                  pParam->fincr = 1;
120                  pParam->fbase = 25;                  pParam->fbase = 25;
121          }          }
122    
123          // simplify the "fincr/fbase" fraction          /*
124          // (neccessary, since windows supplies us with huge numbers)           * Simplify the "fincr/fbase" fraction
125             * (neccessary, since windows supplies us with huge numbers)
126             */
127    
128          i = pParam->fincr;          i = pParam->fincr;
129          while (i > 1)          while (i > 1)
# Line 129  Line 145 
145                  pParam->fincr = (int)(pParam->fincr / div);                  pParam->fincr = (int)(pParam->fincr / div);
146          }          }
147    
148            /* Bitrate allocator defaults */
149    
150          if (pParam->rc_bitrate <= 0)          if (pParam->rc_bitrate <= 0)
151                  pParam->rc_bitrate = 900000;                  pParam->rc_bitrate = 900000;
152    
# Line 141  Line 159 
159          if (pParam->rc_buffer <= 0)          if (pParam->rc_buffer <= 0)
160                  pParam->rc_buffer = 100;                  pParam->rc_buffer = 100;
161    
162            /* Max and min quantizers */
163    
164          if ((pParam->min_quantizer <= 0) || (pParam->min_quantizer > 31))          if ((pParam->min_quantizer <= 0) || (pParam->min_quantizer > 31))
165                  pParam->min_quantizer = 1;                  pParam->min_quantizer = 1;
166    
167          if ((pParam->max_quantizer <= 0) || (pParam->max_quantizer > 31))          if ((pParam->max_quantizer <= 0) || (pParam->max_quantizer > 31))
168                  pParam->max_quantizer = 31;                  pParam->max_quantizer = 31;
169    
         if (pParam->max_key_interval == 0)              /* 1 keyframe each 10 seconds */  
                 pParam->max_key_interval = 10 * pParam->fincr / pParam->fbase;  
   
170          if (pParam->max_quantizer < pParam->min_quantizer)          if (pParam->max_quantizer < pParam->min_quantizer)
171                  pParam->max_quantizer = pParam->min_quantizer;                  pParam->max_quantizer = pParam->min_quantizer;
172    
173          if ((pEnc = (Encoder *) xvid_malloc(sizeof(Encoder), CACHE_LINE)) == NULL)          /* 1 keyframe each 10 seconds */
174    
175            if (pParam->max_key_interval == 0)
176                    pParam->max_key_interval = 10 * pParam->fincr / pParam->fbase;
177    
178    
179            pEnc = (Encoder *) xvid_malloc(sizeof(Encoder), CACHE_LINE);
180            if (pEnc == NULL)
181                  return XVID_ERR_MEMORY;                  return XVID_ERR_MEMORY;
182    
183          /* Fill members of Encoder structure */          /* Fill members of Encoder structure */
# Line 181  Line 205 
205    
206          /* try to allocate frame memory */          /* try to allocate frame memory */
207    
208          pEnc->current = NULL;          pEnc->current = xvid_malloc(sizeof(FRAMEINFO), CACHE_LINE);
209          pEnc->reference = NULL;          pEnc->reference = xvid_malloc(sizeof(FRAMEINFO), CACHE_LINE);
210          if ( (pEnc->current = xvid_malloc(sizeof(FRAMEINFO), CACHE_LINE)) == NULL ||  
211                   (pEnc->reference = xvid_malloc(sizeof(FRAMEINFO), CACHE_LINE)) == NULL)          if ( pEnc->current == NULL || pEnc->reference == NULL)
212          {                  goto xvid_err_memory1;
                 if (pEnc->current) xvid_free(pEnc->current);  
                 xvid_free(pEnc);  
                 return XVID_ERR_MEMORY;  
         }  
213    
214          /* try to allocate mb memory */          /* try to allocate mb memory */
215    
216          pEnc->current->mbs = NULL;          pEnc->current->mbs = xvid_malloc(sizeof(MACROBLOCK) * \
217          pEnc->reference->mbs = NULL;                                           pEnc->mbParam.mb_width * \
218                                             pEnc->mbParam.mb_height,
219                                             CACHE_LINE);
220            pEnc->reference->mbs = xvid_malloc(sizeof(MACROBLOCK) * \
221                                               pEnc->mbParam.mb_width * \
222                                               pEnc->mbParam.mb_height,
223                                               CACHE_LINE);
224    
225          if ((pEnc->current->mbs = xvid_malloc(sizeof(MACROBLOCK) * pEnc->mbParam.mb_width * pEnc->mbParam.mb_height, CACHE_LINE)) == NULL ||          if (pEnc->current->mbs == NULL || pEnc->reference->mbs == NULL)
226                  (pEnc->reference->mbs = xvid_malloc(sizeof(MACROBLOCK) * pEnc->mbParam.mb_width * pEnc->mbParam.mb_height, CACHE_LINE)) == NULL)                  goto xvid_err_memory2;
         {  
                 if (pEnc->current->mbs) xvid_free(pEnc->current->mbs);  
                 xvid_free(pEnc->current);  
                 xvid_free(pEnc->reference);  
                 xvid_free(pEnc);  
         }  
227    
228          /* try to allocate image memory */          /* try to allocate image memory */
229    
# Line 223  Line 243 
243          image_null(&pEnc->vInterHV);          image_null(&pEnc->vInterHV);
244          image_null(&pEnc->vInterHVf);          image_null(&pEnc->vInterHVf);
245    
         if (  
 #ifdef _DEBUG  
                 image_create(&pEnc->sOriginal, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height) < 0 ||  
 #endif  
 #ifdef BFRAMES  
                 image_create(&pEnc->f_refh, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height) < 0 ||  
                 image_create(&pEnc->f_refv, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height) < 0 ||  
                 image_create(&pEnc->f_refhv, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height) < 0 ||  
 #endif  
                 image_create(&pEnc->current->image, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height) < 0 ||  
                 image_create(&pEnc->reference->image, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height) < 0 ||  
                 image_create(&pEnc->vInterH, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height) < 0 ||  
                 image_create(&pEnc->vInterV, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height) < 0 ||  
                 image_create(&pEnc->vInterVf, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height) < 0 ||  
                 image_create(&pEnc->vInterHV, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height) < 0 ||  
                 image_create(&pEnc->vInterHVf, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height) < 0)  
         {  
246  #ifdef _DEBUG  #ifdef _DEBUG
247                  image_destroy(&pEnc->sOriginal, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);          if (image_create(&pEnc->sOriginal,
248                             pEnc->mbParam.edged_width,
249                             pEnc->mbParam.edged_height) < 0)
250                    goto xvid_err_memory3;
251  #endif  #endif
252  #ifdef BFRAMES  #ifdef BFRAMES
253                  image_destroy(&pEnc->f_refh, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);          if (image_create(&pEnc->f_refh,
254                  image_destroy(&pEnc->f_refv, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);                           pEnc->mbParam.edged_width,
255                  image_destroy(&pEnc->f_refhv, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);                           pEnc->mbParam.edged_height) < 0)
256                    goto xvid_err_memory3;
257            if (image_create(&pEnc->f_refv,
258                             pEnc->mbParam.edged_width,
259                             pEnc->mbParam.edged_height) < 0)
260                    goto xvid_err_memory3;
261            if (image_create(&pEnc->f_refhv,
262                             pEnc->mbParam.edged_width,
263                             pEnc->mbParam.edged_height) < 0)
264                    goto xvid_err_memory3;
265  #endif  #endif
266                  image_destroy(&pEnc->current->image, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);          if (image_create(&pEnc->current->image,
267                  image_destroy(&pEnc->reference->image, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);                           pEnc->mbParam.edged_width,
268                  image_destroy(&pEnc->vInterH, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);                           pEnc->mbParam.edged_height) < 0)
269                  image_destroy(&pEnc->vInterV, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);                  goto xvid_err_memory3;
270                  image_destroy(&pEnc->vInterVf, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);          if (image_create(&pEnc->reference->image,
271                  image_destroy(&pEnc->vInterHV, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);                           pEnc->mbParam.edged_width,
272                  image_destroy(&pEnc->vInterHVf, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);                           pEnc->mbParam.edged_height) < 0)
273                    goto xvid_err_memory3;
274            if (image_create(&pEnc->vInterH,
275                             pEnc->mbParam.edged_width,
276                             pEnc->mbParam.edged_height) < 0)
277                    goto xvid_err_memory3;
278            if (image_create(&pEnc->vInterV,
279                             pEnc->mbParam.edged_width,
280                             pEnc->mbParam.edged_height) < 0)
281                    goto xvid_err_memory3;
282            if (image_create(&pEnc->vInterVf,
283                             pEnc->mbParam.edged_width,
284                             pEnc->mbParam.edged_height) < 0)
285                    goto xvid_err_memory3;
286            if (image_create(&pEnc->vInterHV,
287                             pEnc->mbParam.edged_width,
288                             pEnc->mbParam.edged_height) < 0)
289                    goto xvid_err_memory3;
290            if (image_create(&pEnc->vInterHVf,
291                             pEnc->mbParam.edged_width,
292                             pEnc->mbParam.edged_height) < 0)
293                    goto xvid_err_memory3;
294    
295    
                 xvid_free(pEnc->current);  
                 xvid_free(pEnc->reference);  
                 xvid_free(pEnc);  
                 return XVID_ERR_MEMORY;  
         }  
296    
297  // ==============================================================================          /* B Frames specific init */
298  #ifdef BFRAMES  #ifdef BFRAMES
299    
         // TODO: handle malloc() == NULL  
300          pEnc->mbParam.max_bframes = pParam->max_bframes;          pEnc->mbParam.max_bframes = pParam->max_bframes;
301          pEnc->bquant_ratio = pParam->bquant_ratio;          pEnc->bquant_ratio = pParam->bquant_ratio;
302            pEnc->bframes = NULL;
303    
304          if (pEnc->mbParam.max_bframes > 0)          if (pEnc->mbParam.max_bframes > 0)
305          {          {
306                  int n;                  int n;
307    
308                  pEnc->bframes = malloc(pEnc->mbParam.max_bframes * sizeof(FRAMEINFO *));                  pEnc->bframes = xvid_malloc(pEnc->mbParam.max_bframes * \
309                                                sizeof(FRAMEINFO *),
310                                                CACHE_LINE);
311    
312                    if (pEnc->bframes == NULL)
313                            goto xvid_err_memory3;
314    
315                  for (n = 0; n < pEnc->mbParam.max_bframes; n++)                  for (n = 0; n < pEnc->mbParam.max_bframes; n++)
316                  {                          pEnc->bframes[n] = NULL;
317                          pEnc->bframes[n] = malloc(sizeof(FRAMEINFO));  
                         pEnc->bframes[n]->mbs = malloc(sizeof(MACROBLOCK) * pEnc->mbParam.mb_width * pEnc->mbParam.mb_height);  
318    
319                          if (image_create(&pEnc->bframes[n]->image, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height) < 0)                  for (n = 0; n < pEnc->mbParam.max_bframes; n++)
320                          {                          {
321                                  return XVID_ERR_MEMORY;                          pEnc->bframes[n] = xvid_malloc(sizeof(FRAMEINFO),
322                          }                                                         CACHE_LINE);
323    
324                            if (pEnc->bframes[n] == NULL)
325                                    goto xvid_err_memory4;
326    
327                            pEnc->bframes[n]->mbs = xvid_malloc(sizeof(MACROBLOCK) * \
328                                                                pEnc->mbParam.mb_width * \
329                                                                pEnc->mbParam.mb_height,
330                                                                CACHE_LINE);
331    
332                            if (pEnc->bframes[n]->mbs == NULL)
333                                    goto xvid_err_memory4;
334    
335                            image_null(&pEnc->bframes[n]->image);
336    
337                            if (image_create(&pEnc->bframes[n]->image,
338                                             pEnc->mbParam.edged_width,
339                                             pEnc->mbParam.edged_height) < 0)
340                                    goto xvid_err_memory4;
341    
342                  }                  }
343          }          }
344    
345          pEnc->bframenum_head = 0;          pEnc->bframenum_head = 0;
346          pEnc->bframenum_tail = 0;          pEnc->bframenum_tail = 0;
347          pEnc->flush_bframes = 0;          pEnc->flush_bframes = 0;
# Line 293  Line 350 
350          pEnc->mbParam.m_ticks = 0;          pEnc->mbParam.m_ticks = 0;
351  #endif  #endif
352    
   
 // ==============================================================================  
   
   
353          pParam->handle = (void *)pEnc;          pParam->handle = (void *)pEnc;
354    
355          if (pParam->rc_bitrate)          if (pParam->rc_bitrate)
# Line 314  Line 367 
367          init_timer();          init_timer();
368    
369          return XVID_ERR_OK;          return XVID_ERR_OK;
370    
371            /*
372             * We handle all XVID_ERR_MEMORY here, this makes the code lighter
373             *
374             * ToDo?: We could avoid that piece of code if encoder_destroy could
375             *        handle different destroy levels
376             */
377    #ifdef BFRAMES
378     xvid_err_memory4:
379            for (i=0; i<pEnc->mbParam.max_bframes; i++)
380            {
381    
382                    if (pEnc->bframes[i] == NULL) continue;
383    
384                    image_destroy(&pEnc->bframes[i]->image,
385                                  pEnc->mbParam.edged_width,
386                                  pEnc->mbParam.edged_height);
387    
388                    xvid_free(pEnc->bframes[i]->mbs);
389    
390                    xvid_free(pEnc->bframes[i]);
391    
392  }  }
393    
394            xvid_free(pEnc->bframes);
395    
396    #endif
397    
398     xvid_err_memory3:
399    #ifdef _DEBUG
400            image_destroy(&pEnc->sOriginal,
401                          pEnc->mbParam.edged_width,
402                          pEnc->mbParam.edged_height);
403    #endif
404    
405    #ifdef BFRAMES
406            image_destroy(&pEnc->f_refh,
407                          pEnc->mbParam.edged_width,
408                          pEnc->mbParam.edged_height);
409            image_destroy(&pEnc->f_refv,
410                          pEnc->mbParam.edged_width,
411                          pEnc->mbParam.edged_height);
412            image_destroy(&pEnc->f_refhv,
413                          pEnc->mbParam.edged_width,
414                          pEnc->mbParam.edged_height);
415    #endif
416    
417            image_destroy(&pEnc->current->image,
418                          pEnc->mbParam.edged_width,
419                          pEnc->mbParam.edged_height);
420            image_destroy(&pEnc->reference->image,
421                          pEnc->mbParam.edged_width,
422                          pEnc->mbParam.edged_height);
423            image_destroy(&pEnc->vInterH,
424                          pEnc->mbParam.edged_width,
425                          pEnc->mbParam.edged_height);
426            image_destroy(&pEnc->vInterV,
427                          pEnc->mbParam.edged_width,
428                          pEnc->mbParam.edged_height);
429            image_destroy(&pEnc->vInterVf,
430                          pEnc->mbParam.edged_width,
431                          pEnc->mbParam.edged_height);
432            image_destroy(&pEnc->vInterHV,
433                          pEnc->mbParam.edged_width,
434                          pEnc->mbParam.edged_height);
435            image_destroy(&pEnc->vInterHVf,
436                          pEnc->mbParam.edged_width,
437                          pEnc->mbParam.edged_height);
438    
439     xvid_err_memory2:
440            xvid_free(pEnc->current->mbs);
441            xvid_free(pEnc->reference->mbs);
442    
443     xvid_err_memory1:
444            xvid_free(pEnc->current);
445            xvid_free(pEnc->reference);
446            xvid_free(pEnc);
447    
448            return XVID_ERR_MEMORY;
449    }
450    
451  int encoder_destroy(Encoder * pEnc)  int encoder_destroy(Encoder * pEnc)
452  {  {
453          ENC_CHECK(pEnc);          ENC_CHECK(pEnc);
454    
455  // =================================================================          /* B Frames specific */
456  #ifdef BFRAMES  #ifdef BFRAMES
457          if (pEnc->mbParam.max_bframes > 0)          int i;
458          {  
459                  int n;          for (i=0; i<pEnc->mbParam.max_bframes; i++)
                 for (n = 0; n < pEnc->mbParam.max_bframes; n++)  
460                  {                  {
461                          image_destroy(&pEnc->bframes[n]->image, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);  
462                          free(pEnc->bframes[n]->mbs);                  if (pEnc->bframes[i] == NULL) continue;
463                          free(pEnc->bframes[n]);  
464                  }                  image_destroy(&pEnc->bframes[i]->image,
465                  free(pEnc->bframes);                                pEnc->mbParam.edged_width,
466                                  pEnc->mbParam.edged_height);
467    
468                    xvid_free(pEnc->bframes[i]->mbs);
469    
470                    xvid_free(pEnc->bframes[i]);
471    
472          }          }
473    
474            xvid_free(pEnc->bframes);
475    
476  #endif  #endif
 //====================================================================  
477    
478          image_destroy(&pEnc->current->image, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);          /* All images, reference, current etc ... */
479          image_destroy(&pEnc->reference->image, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);  
480          image_destroy(&pEnc->vInterH, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);          image_destroy(&pEnc->current->image,
481          image_destroy(&pEnc->vInterV, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);                        pEnc->mbParam.edged_width,
482          image_destroy(&pEnc->vInterVf, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);                        pEnc->mbParam.edged_height);
483          image_destroy(&pEnc->vInterHV, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);          image_destroy(&pEnc->reference->image,
484          image_destroy(&pEnc->vInterHVf, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);                        pEnc->mbParam.edged_width,
485                          pEnc->mbParam.edged_height);
486            image_destroy(&pEnc->vInterH,
487                          pEnc->mbParam.edged_width,
488                          pEnc->mbParam.edged_height);
489            image_destroy(&pEnc->vInterV,
490                          pEnc->mbParam.edged_width,
491                          pEnc->mbParam.edged_height);
492            image_destroy(&pEnc->vInterVf,
493                          pEnc->mbParam.edged_width,
494                          pEnc->mbParam.edged_height);
495            image_destroy(&pEnc->vInterHV,
496                          pEnc->mbParam.edged_width,
497                          pEnc->mbParam.edged_height);
498            image_destroy(&pEnc->vInterHVf,
499                          pEnc->mbParam.edged_width,
500                          pEnc->mbParam.edged_height);
501  #ifdef BFRAMES  #ifdef BFRAMES
502          image_destroy(&pEnc->f_refh, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);          image_destroy(&pEnc->f_refh,
503          image_destroy(&pEnc->f_refv, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);                        pEnc->mbParam.edged_width,
504          image_destroy(&pEnc->f_refhv, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);                        pEnc->mbParam.edged_height);
505            image_destroy(&pEnc->f_refv,
506                          pEnc->mbParam.edged_width,
507                          pEnc->mbParam.edged_height);
508            image_destroy(&pEnc->f_refhv,
509                          pEnc->mbParam.edged_width,
510                          pEnc->mbParam.edged_height);
511  #endif  #endif
512  #ifdef _DEBUG  #ifdef _DEBUG
513                  image_destroy(&pEnc->sOriginal, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height);          image_destroy(&pEnc->sOriginal,
514                          pEnc->mbParam.edged_width,
515                          pEnc->mbParam.edged_height);
516  #endif  #endif
517    
518            /* Encoder structure */
519    
520          xvid_free(pEnc->current->mbs);          xvid_free(pEnc->current->mbs);
521          xvid_free(pEnc->current);          xvid_free(pEnc->current);
522    
# Line 359  Line 524 
524          xvid_free(pEnc->reference);          xvid_free(pEnc->reference);
525    
526          xvid_free(pEnc);          xvid_free(pEnc);
527    
528          return XVID_ERR_OK;          return XVID_ERR_OK;
529  }  }
530    
# Line 396  Line 562 
562                  {                  {
563                          // we have reached end of stream without getting a future reference                          // we have reached end of stream without getting a future reference
564                          // .. so encode last final frame a pframe                          // .. so encode last final frame a pframe
565                          dprintf("--- PFRAME (final frame correction) --- ");                          //dprintf("--- PFRAME (final frame correction) --- ");
566                          pEnc->bframenum_tail--;                          pEnc->bframenum_tail--;
567                          SWAP(pEnc->current, pEnc->reference);                          SWAP(pEnc->current, pEnc->reference);
568    
# Line 411  Line 577 
577                          return XVID_ERR_OK;                          return XVID_ERR_OK;
578                  }                  }
579    
580                  dprintf("--- BFRAME (flush) --- ");                  //dprintf("--- BFRAME (flush) --- ");
581                  FrameCodeB(pEnc,                  FrameCodeB(pEnc,
582                          pEnc->bframes[pEnc->bframenum_head],                          pEnc->bframes[pEnc->bframenum_head],
583                           &bs, &bits);                           &bs, &bits);
# Line 509  Line 675 
675                  (pFrame->intra < 0 && (pEnc->iMaxKeyInterval > 0 && pEnc->iFrameNum >= pEnc->iMaxKeyInterval)) ||                  (pFrame->intra < 0 && (pEnc->iMaxKeyInterval > 0 && pEnc->iFrameNum >= pEnc->iMaxKeyInterval)) ||
676                  image_mad(&pEnc->reference->image, &pEnc->current->image, pEnc->mbParam.edged_width, pEnc->mbParam.width, pEnc->mbParam.height) > 30)                  image_mad(&pEnc->reference->image, &pEnc->current->image, pEnc->mbParam.edged_width, pEnc->mbParam.width, pEnc->mbParam.height) > 30)
677          {          {
678                  dprintf("--- IFRAME ---");                  //dprintf("--- IFRAME ---");
679    
680                  FrameCodeI(pEnc, &bs, &bits);                  FrameCodeI(pEnc, &bs, &bits);
681    
# Line 521  Line 687 
687          }          }
688          else if (pEnc->bframenum_tail >= pEnc->mbParam.max_bframes)          else if (pEnc->bframenum_tail >= pEnc->mbParam.max_bframes)
689          {          {
690                  dprintf("--- PFRAME ---");                  //dprintf("--- PFRAME ---");
691    
692                  FrameCodeP(pEnc, &bs, &bits, 1, 0);                  FrameCodeP(pEnc, &bs, &bits, 1, 0);
693                  pFrame->intra = 0;                  pFrame->intra = 0;
# Line 529  Line 695 
695          }          }
696          else          else
697          {          {
698                  dprintf("--- BFRAME (store) ---  head=%i tail=%i", pEnc->bframenum_head, pEnc->bframenum_tail);                  //dprintf("--- BFRAME (store) ---  head=%i tail=%i", pEnc->bframenum_head, pEnc->bframenum_tail);
699    
700                  if (pFrame->bquant < 1)                  if (pFrame->bquant < 1)
701                  {                  {

Legend:
Removed from v.189  
changed lines
  Added in v.192

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