[svn] / branches / dev-api-4 / xvidcore / vfw / src / codec.c Repository:
ViewVC logotype

Diff of /branches/dev-api-4/xvidcore/vfw/src/codec.c

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

revision 1052, Mon Jun 2 11:47:30 2003 UTC revision 1106, Sat Aug 2 10:42:23 2003 UTC
# Line 54  Line 54 
54  #include <xvid.h>  #include <xvid.h>
55  #include "debug.h"  #include "debug.h"
56  #include "codec.h"  #include "codec.h"
57    #include "status.h"
58    
59    
60  static const int pmvfast_presets[7] = {  static const int pmvfast_presets[7] = {
# Line 207  Line 208 
208    
209          if (lpbiOutput == NULL)          if (lpbiOutput == NULL)
210          {          {
211                  return sizeof(BITMAPV4HEADER);                  return sizeof(BITMAPINFOHEADER);
212          }          }
213    
214          memcpy(outhdr, inhdr, sizeof(BITMAPINFOHEADER));          memcpy(outhdr, inhdr, sizeof(BITMAPINFOHEADER));
# Line 243  Line 244 
244    
245  LRESULT compress_frames_info(CODEC * codec, ICCOMPRESSFRAMES * icf)  LRESULT compress_frames_info(CODEC * codec, ICCOMPRESSFRAMES * icf)
246  {  {
247      //DPRINTF("%i %i", icf->lStartFrame, icf->lFrameCount);  #if 0
248        DPRINTF("%i %i", icf->lStartFrame, icf->lFrameCount);
249    #endif
250          codec->fincr = icf->dwScale;          codec->fincr = icf->dwScale;
251          codec->fbase = icf->dwRate;          codec->fbase = icf->dwRate;
252          return ICERR_OK;          return ICERR_OK;
# Line 316  Line 319 
319          memset(&create, 0, sizeof(create));          memset(&create, 0, sizeof(create));
320          create.version = XVID_VERSION;          create.version = XVID_VERSION;
321    
322      // zones      /* zones */
323      create.zones = malloc(sizeof(xvid_enc_zone_t) * codec->config.num_zones);      create.zones = malloc(sizeof(xvid_enc_zone_t) * codec->config.num_zones);
324      create.num_zones = codec->config.num_zones;      create.num_zones = codec->config.num_zones;
325      for (i=0; i < create.num_zones; i++) {      for (i=0; i < create.num_zones; i++) {
# Line 331  Line 334 
334          create.zones[i].base = 100;          create.zones[i].base = 100;
335      }      }
336    
337      // plugins      /* plugins */
338          create.plugins = plugins;          create.plugins = plugins;
339          switch (codec->config.mode)          switch (codec->config.mode)
340          {          {
# Line 360  Line 363 
363          case RC_MODE_2PASS2 :          case RC_MODE_2PASS2 :
364          memset(&pass2, 0, sizeof(pass2));          memset(&pass2, 0, sizeof(pass2));
365              pass2.version = XVID_VERSION;              pass2.version = XVID_VERSION;
366            if (codec->config.use_2pass_bitrate) {
367          pass2.bitrate = codec->config.bitrate * CONFIG_KBPS;          pass2.bitrate = codec->config.bitrate * CONFIG_KBPS;
368            }else{
369                pass2.bitrate = -codec->config.desired_size;    /* kilobytes */
370            }
371                  pass2.filename = codec->config.stats;                  pass2.filename = codec->config.stats;
372    
373          pass2.keyframe_boost = codec->config.keyframe_boost;   /* keyframe boost percentage: [0..100...]; */          pass2.keyframe_boost = codec->config.keyframe_boost;   /* keyframe boost percentage: [0..100...]; */
# Line 449  Line 456 
456          codec->framenum = 0;          codec->framenum = 0;
457          codec->keyspacing = 0;          codec->keyspacing = 0;
458    
459        if (codec->config.display_status) {
460            status_destroy_always(&codec->status);
461            status_create(&codec->status, codec->fincr, codec->fbase);
462        }
463    
464          return ICERR_OK;          return ICERR_OK;
465  }  }
466    
467    
468  LRESULT compress_end(CODEC * codec)  LRESULT compress_end(CODEC * codec)
469  {  {
470          if (codec->ehandle != NULL)      if (codec->ehandle != NULL) {
         {  
471                  xvid_encore(codec->ehandle, XVID_ENC_DESTROY, NULL, NULL);                  xvid_encore(codec->ehandle, XVID_ENC_DESTROY, NULL, NULL);
472                  codec->ehandle = NULL;                  codec->ehandle = NULL;
473          }          }
474    
475        if (codec->config.display_status)
476            status_destroy(&codec->status);
477    
478          return ICERR_OK;          return ICERR_OK;
479  }  }
480    
# Line 472  Line 486 
486      for (i=0; i<config->num_zones && config->zones[i].frame <= framenum; i++) ;      for (i=0; i<config->num_zones && config->zones[i].frame <= framenum; i++) ;
487      i--;      i--;
488    
489        frame->type = config->zones[i].type;
490    
491      if (config->zones[i].greyscale) {      if (config->zones[i].greyscale) {
492          frame->vop_flags |= XVID_VOP_GREYSCALE;          frame->vop_flags |= XVID_VOP_GREYSCALE;
493      }      }
# Line 526  Line 542 
542                  frame.motion |= XVID_ME_QUARTERPELREFINE16 | XVID_ME_QUARTERPELREFINE8;                  frame.motion |= XVID_ME_QUARTERPELREFINE16 | XVID_ME_QUARTERPELREFINE8;
543          }          }
544    
545          if ((profiles[codec->config.profile].flags & PROFILE_GMC) && codec->config.gmc)          if ((profiles[codec->config.profile].flags & PROFILE_GMC) && codec->config.gmc) {
546                  frame.vol_flags |= XVID_VOL_GMC;                  frame.vol_flags |= XVID_VOL_GMC;
547                    frame.motion |= XVID_GME_REFINE;
548            }
549    
550          if ((profiles[codec->config.profile].flags & PROFILE_INTERLACE) && codec->config.interlacing)          if ((profiles[codec->config.profile].flags & PROFILE_INTERLACE) && codec->config.interlacing)
551                  frame.vol_flags |= XVID_VOL_INTERLACING;                  frame.vol_flags |= XVID_VOL_INTERLACING;
# Line 548  Line 566 
566                  frame.vop_flags |= XVID_VOP_INTER4V;                  frame.vop_flags |= XVID_VOP_INTER4V;
567    
568          if (codec->config.chromame)          if (codec->config.chromame)
569                  frame.vop_flags |= XVID_ME_CHROMA16 + XVID_ME_CHROMA8;                  frame.motion |= XVID_ME_CHROMA16 + XVID_ME_CHROMA8;
570    
571          frame.motion |= pmvfast_presets[codec->config.motion_search];          frame.motion |= pmvfast_presets[codec->config.motion_search];
572    
# Line 642  Line 660 
660                  return ICERR_UNSUPPORTED;                  return ICERR_UNSUPPORTED;
661          }          }
662    
663        if (codec->config.display_status && stats.type>0) {
664            status_update(&codec->status, stats.type, stats.length, stats.quant);
665        }
666    
667          DPRINTF("{type=%i len=%i} length=%i", stats.type, stats.length, length);          DPRINTF("{type=%i len=%i} length=%i", stats.type, stats.length, length);
668    
669      if (length == 0)    /* no encoder output */      if (length == 0)    /* no encoder output */
# Line 725  Line 747 
747    
748          if (get_colorspace(inhdr) != XVID_CSP_NULL) {          if (get_colorspace(inhdr) != XVID_CSP_NULL) {
749                  memcpy(outhdr, inhdr, sizeof(BITMAPINFOHEADER));                  memcpy(outhdr, inhdr, sizeof(BITMAPINFOHEADER));
750                  // XXX: should we set outhdr->biSize ??                  /* XXX: should we set outhdr->biSize ?? */
751                  return ICERR_OK;                  return ICERR_OK;
752          }          }
753          /* --- yv12 --- */          /* --- yv12 --- */

Legend:
Removed from v.1052  
changed lines
  Added in v.1106

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