[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 1294, Sun Dec 21 16:19:41 2003 UTC revision 1326, Fri Jan 23 11:17:24 2004 UTC
# Line 271  Line 271 
271                           void *param2)                           void *param2)
272  {  {
273          switch (opt) {          switch (opt) {
         case XVID_PLG_INFO:  
274          case XVID_PLG_CREATE:          case XVID_PLG_CREATE:
275                    *((void**)param2) = NULL;
276            case XVID_PLG_INFO:
277          case XVID_PLG_DESTROY:          case XVID_PLG_DESTROY:
278          case XVID_PLG_BEFORE:          case XVID_PLG_BEFORE:
279                  return 0;                  return 0;
# Line 299  Line 300 
300          return XVID_ERR_FAIL;          return XVID_ERR_FAIL;
301  }  }
302    
303    #define XVID_DLL_NAME "xvidcore.dll"
304    
305    static int init_dll()
306    {
307            if (m_hdll != NULL) return 0;
308    
309            DPRINTF("init_dll");
310            m_hdll = LoadLibrary(XVID_DLL_NAME);
311            if (m_hdll == NULL) {
312                    DPRINTF("dll load failed");
313                    MessageBox(0, XVID_DLL_NAME " not found","Error", 0);
314                    return XVID_ERR_FAIL;
315            }
316    
317            xvid_global_func = (int (__cdecl *)(void *, int, void *, void *))GetProcAddress(m_hdll, "xvid_global");
318            if (xvid_global_func == NULL) {
319                    MessageBox(0, "xvid_global() not found", "Error", 0);
320                    return XVID_ERR_FAIL;
321            }
322    
323            xvid_encore_func = (int (__cdecl *)(void *, int, void *, void *))GetProcAddress(m_hdll, "xvid_encore");
324            if (xvid_encore_func == NULL) {
325                    MessageBox(0, "xvid_encore() not found", "Error", 0);
326                    return XVID_ERR_FAIL;
327            }
328    
329            xvid_decore_func = (int (__cdecl *)(void *, int, void *, void *))GetProcAddress(m_hdll, "xvid_decore");
330            if (xvid_decore_func == NULL) {
331                    MessageBox(0, "xvid_decore() not found", "Error", 0);
332                    return XVID_ERR_FAIL;
333            }
334    
335            xvid_plugin_single_func =
336                    (int (__cdecl *)(void *, int, void *, void *))(GetProcAddress(m_hdll, "xvid_plugin_single"));
337            xvid_plugin_2pass1_func =
338                    (int (__cdecl *)(void *, int, void *, void *))(GetProcAddress(m_hdll, "xvid_plugin_2pass1"));
339            xvid_plugin_2pass2_func =
340                    (int (__cdecl *)(void *, int, void *, void *))(GetProcAddress(m_hdll, "xvid_plugin_2pass2"));
341            xvid_plugin_lumimasking_func =
342                    (int (__cdecl *)(void *, int, void *, void *))(GetProcAddress(m_hdll, "xvid_plugin_lumimasking"));
343            xvid_plugin_psnr_func =
344                    (int (__cdecl *)(void *, int, void *, void *))(GetProcAddress(m_hdll, "xvid_plugin_psnr"));
345    
346            return 0;
347    }
348    
349    
350  LRESULT compress_begin(CODEC * codec, BITMAPINFO * lpbiInput, BITMAPINFO * lpbiOutput)  LRESULT compress_begin(CODEC * codec, BITMAPINFO * lpbiInput, BITMAPINFO * lpbiOutput)
# Line 311  Line 357 
357          xvid_plugin_2pass2_t pass2;          xvid_plugin_2pass2_t pass2;
358      int i;      int i;
359    
360            if (init_dll() != 0) return ICERR_ERROR;
361      /* destroy previously created codec */      /* destroy previously created codec */
362          if(codec->ehandle) {          if(codec->ehandle) {
363                  xvid_encore(codec->ehandle, XVID_ENC_DESTROY, NULL, NULL);                  xvid_encore_func(codec->ehandle, XVID_ENC_DESTROY, NULL, NULL);
364                  codec->ehandle = NULL;                  codec->ehandle = NULL;
365          }          }
366    
# Line 321  Line 368 
368          init.version = XVID_VERSION;          init.version = XVID_VERSION;
369          init.cpu_flags = codec->config.cpu;          init.cpu_flags = codec->config.cpu;
370      init.debug = codec->config.debug;      init.debug = codec->config.debug;
371          xvid_global(0, XVID_GBL_INIT, &init, NULL);          xvid_global_func(0, XVID_GBL_INIT, &init, NULL);
372    
373          memset(&create, 0, sizeof(create));          memset(&create, 0, sizeof(create));
374          create.version = XVID_VERSION;          create.version = XVID_VERSION;
# Line 352  Line 399 
399          single.reaction_delay_factor = codec->config.rc_reaction_delay_factor;          single.reaction_delay_factor = codec->config.rc_reaction_delay_factor;
400                  single.averaging_period = codec->config.rc_averaging_period;                  single.averaging_period = codec->config.rc_averaging_period;
401                  single.buffer = codec->config.rc_buffer;                  single.buffer = codec->config.rc_buffer;
402          plugins[create.num_plugins].func = xvid_plugin_single;                  plugins[create.num_plugins].func = xvid_plugin_single_func;
403          plugins[create.num_plugins].param = &single;          plugins[create.num_plugins].param = &single;
404          create.num_plugins++;          create.num_plugins++;
405          break;          break;
# Line 362  Line 409 
409              pass1.version = XVID_VERSION;              pass1.version = XVID_VERSION;
410          pass1.filename = codec->config.stats;          pass1.filename = codec->config.stats;
411    
412          plugins[create.num_plugins].func = xvid_plugin_2pass1;                  plugins[create.num_plugins].func = xvid_plugin_2pass1_func;
413          plugins[create.num_plugins].param = &pass1;          plugins[create.num_plugins].param = &pass1;
414          create.num_plugins++;          create.num_plugins++;
415                  break;                  break;
# Line 387  Line 434 
434          pass2.kfthreshold = codec->config.kfthreshold;          pass2.kfthreshold = codec->config.kfthreshold;
435          pass2.container_frame_overhead = 24;    /* AVI */          pass2.container_frame_overhead = 24;    /* AVI */
436    
437          plugins[create.num_plugins].func = xvid_plugin_2pass2;                  plugins[create.num_plugins].func = xvid_plugin_2pass2_func;
438          plugins[create.num_plugins].param = &pass2;          plugins[create.num_plugins].param = &pass2;
439          create.num_plugins++;          create.num_plugins++;
440                  break;                  break;
# Line 400  Line 447 
447          }          }
448    
449          if ((profiles[codec->config.profile].flags & PROFILE_ADAPTQUANT) && codec->config.lum_masking) {          if ((profiles[codec->config.profile].flags & PROFILE_ADAPTQUANT) && codec->config.lum_masking) {
450          plugins[create.num_plugins].func = xvid_plugin_lumimasking;                  plugins[create.num_plugins].func = xvid_plugin_lumimasking_func;
451          plugins[create.num_plugins].param = NULL;          plugins[create.num_plugins].param = NULL;
452          create.num_plugins++;          create.num_plugins++;
453          }          }
# Line 442  Line 489 
489    
490      create.num_threads = codec->config.num_threads;      create.num_threads = codec->config.num_threads;
491    
492          switch(xvid_encore(0, XVID_ENC_CREATE, &create, NULL))          switch(xvid_encore_func(0, XVID_ENC_CREATE, &create, NULL))
493          {          {
494          case XVID_ERR_FAIL :          case XVID_ERR_FAIL :
495                  return ICERR_ERROR;                  return ICERR_ERROR;
# Line 472  Line 519 
519    
520  LRESULT compress_end(CODEC * codec)  LRESULT compress_end(CODEC * codec)
521  {  {
522            if (m_hdll != NULL) {
523      if (codec->ehandle != NULL) {      if (codec->ehandle != NULL) {
524                  xvid_encore(codec->ehandle, XVID_ENC_DESTROY, NULL, NULL);                          xvid_encore_func(codec->ehandle, XVID_ENC_DESTROY, NULL, NULL);
525                  codec->ehandle = NULL;                  codec->ehandle = NULL;
526          }          }
527                    FreeLibrary(m_hdll);
528                    m_hdll = NULL;
529            }
530    
531      if (codec->config.display_status)      if (codec->config.display_status)
532          status_destroy(&codec->status);          status_destroy(&codec->status);
# Line 669  Line 720 
720          memset(&stats, 0, sizeof(stats));          memset(&stats, 0, sizeof(stats));
721          stats.version = XVID_VERSION;          stats.version = XVID_VERSION;
722    
723      length = xvid_encore(codec->ehandle, XVID_ENC_ENCODE, &frame, &stats);          length = xvid_encore_func(codec->ehandle, XVID_ENC_ENCODE, &frame, &stats);
724          switch (length)          switch (length)
725          {          {
726          case XVID_ERR_FAIL :          case XVID_ERR_FAIL :
# Line 798  Line 849 
849          return ICERR_OK;          return ICERR_OK;
850  }  }
851    
852    #define REG_GET_N(X, Y, Z) \
853    { \
854            DWORD size = sizeof(int); \
855            if (RegQueryValueEx(hKey, X, 0, 0, (LPBYTE)&Y, &size) != ERROR_SUCCESS) { \
856                    Y=Z; \
857            } \
858    }while(0)
859    
860  LRESULT decompress_begin(CODEC * codec, BITMAPINFO * lpbiInput, BITMAPINFO * lpbiOutput)  LRESULT decompress_begin(CODEC * codec, BITMAPINFO * lpbiInput, BITMAPINFO * lpbiOutput)
861  {  {
862          xvid_gbl_init_t init;          xvid_gbl_init_t init;
863          xvid_dec_create_t create;          xvid_dec_create_t create;
864            HKEY hKey;
865    
866            if (init_dll() != 0) return ICERR_ERROR;
867    
868          memset(&init, 0, sizeof(init));          memset(&init, 0, sizeof(init));
869          init.version = XVID_VERSION;          init.version = XVID_VERSION;
870          init.cpu_flags = codec->config.cpu;          init.cpu_flags = codec->config.cpu;
871          xvid_global(0, XVID_GBL_INIT, &init, NULL);          xvid_global_func(0, XVID_GBL_INIT, &init, NULL);
872    
873          memset(&create, 0, sizeof(create));          memset(&create, 0, sizeof(create));
874          create.version = XVID_VERSION;          create.version = XVID_VERSION;
875          create.width = lpbiInput->bmiHeader.biWidth;          create.width = lpbiInput->bmiHeader.biWidth;
876          create.height = lpbiInput->bmiHeader.biHeight;          create.height = lpbiInput->bmiHeader.biHeight;
877    
878          switch(xvid_decore(0, XVID_DEC_CREATE, &create, NULL))          switch(xvid_decore_func(0, XVID_DEC_CREATE, &create, NULL))
879          {          {
880          case XVID_ERR_FAIL :          case XVID_ERR_FAIL :
881                  return ICERR_ERROR;                  return ICERR_ERROR;
# Line 831  Line 892 
892    
893          codec->dhandle = create.handle;          codec->dhandle = create.handle;
894    
895            RegOpenKeyEx(XVID_REG_KEY, XVID_REG_PARENT "\\" XVID_REG_CHILD, 0, KEY_READ, &hKey);
896    
897            REG_GET_N("Deblock_Y",  pp_dy, 0)
898            REG_GET_N("Deblock_UV", pp_duv, 0)
899            REG_GET_N("Dering",  pp_dr, 0)
900            REG_GET_N("FilmEffect", pp_fe, 0)
901    
902            RegCloseKey(hKey);
903    
904          return ICERR_OK;          return ICERR_OK;
905  }  }
906    
907    
908  LRESULT decompress_end(CODEC * codec)  LRESULT decompress_end(CODEC * codec)
909  {  {
910          if (codec->dhandle != NULL)          if (m_hdll != NULL) {
911          {                  if (codec->dhandle != NULL) {
912                  xvid_decore(codec->dhandle, XVID_DEC_DESTROY, NULL, NULL);                          xvid_decore_func(codec->dhandle, XVID_DEC_DESTROY, NULL, NULL);
913                  codec->dhandle = NULL;                  codec->dhandle = NULL;
914          }          }
915                    FreeLibrary(m_hdll);
916                    m_hdll = NULL;
917            }
918    
919          return ICERR_OK;          return ICERR_OK;
920  }  }
921    
# Line 887  Line 961 
961                  convert.interlacing = 0;                  convert.interlacing = 0;
962                  if (convert.input.csp == XVID_CSP_NULL ||                  if (convert.input.csp == XVID_CSP_NULL ||
963                          convert.output.csp == XVID_CSP_NULL ||                          convert.output.csp == XVID_CSP_NULL ||
964                          xvid_global(0, XVID_GBL_CONVERT, &convert, NULL) < 0)                          xvid_global_func(0, XVID_GBL_CONVERT, &convert, NULL) < 0)
965                  {                  {
966                           return ICERR_BADFORMAT;                           return ICERR_BADFORMAT;
967                  }                  }
# Line 917  Line 991 
991                  frame.output.csp = XVID_CSP_NULL;                  frame.output.csp = XVID_CSP_NULL;
992          }          }
993    
994          switch (xvid_decore(codec->dhandle, XVID_DEC_DECODE, &frame, NULL))          if (pp_dy)frame.general |= XVID_DEBLOCKY;
995            if (pp_duv) frame.general |= XVID_DEBLOCKUV;
996    /*      if (pp_dr) frame.general |= XVID_DERING; */
997            if (pp_fe) frame.general |= XVID_FILMEFFECT;
998    
999            switch (xvid_decore_func(codec->dhandle, XVID_DEC_DECODE, &frame, NULL))
1000          {          {
1001          case XVID_ERR_FAIL :          case XVID_ERR_FAIL :
1002                  return ICERR_ERROR;                  return ICERR_ERROR;

Legend:
Removed from v.1294  
changed lines
  Added in v.1326

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