LRESULT decompress_begin(CODEC * codec, BITMAPINFO * lpbiInput, BITMAPINFO * lpbiOutput) { xvid_gbl_init_t init; xvid_dec_create_t create; HKEY hKey; if (init_dll(codec) != 0) return ICERR_ERROR; memset(&init, 0, sizeof(init)); init.version = XVID_VERSION; init.cpu_flags = codec->config.cpu; codec->xvid_global_func(0, XVID_GBL_INIT, &init, NULL); memset(&create, 0, sizeof(create)); create.version = XVID_VERSION; create.width = lpbiInput->bmiHeader.biWidth; create.height = lpbiInput->bmiHeader.biHeight; switch(codec->xvid_decore_func(0, XVID_DEC_CREATE, &create, NULL)) { case XVID_ERR_FAIL : return ICERR_ERROR; case XVID_ERR_MEMORY : return ICERR_MEMORY; case XVID_ERR_FORMAT : return ICERR_BADFORMAT; case XVID_ERR_VERSION : return ICERR_UNSUPPORTED; } codec->dhandle = create.handle; RegOpenKeyEx(XVID_REG_KEY, XVID_REG_PARENT "\\" XVID_REG_CHILD, 0, KEY_READ, &hKey); REG_GET_N("Deblock_Y", pp_dy, 0) REG_GET_N("Deblock_UV", pp_duv, 0) REG_GET_N("Dering", pp_dr, 0) REG_GET_N("FilmEffect", pp_fe, 0) RegCloseKey(hKey); return ICERR_OK; }
LRESULT decompress_begin(CODEC * codec, BITMAPINFO * lpbiInput, BITMAPINFO * lpbiOutput) { BITMAPINFOHEADER * inhdr = &lpbiInput->bmiHeader; xvid_gbl_init_t init; xvid_gbl_info_t info; xvid_dec_create_t create; HKEY hKey; if (init_dll(codec) != 0) return ICERR_ERROR; memset(&init, 0, sizeof(init)); init.version = XVID_VERSION; init.cpu_flags = codec->config.cpu; init.debug = codec->config.debug; codec->xvid_global_func(0, XVID_GBL_INIT, &init, NULL); memset(&info, 0, sizeof(info)); info.version = XVID_VERSION; codec->xvid_global_func(0, XVID_GBL_INFO, &info, NULL); memset(&create, 0, sizeof(create)); create.version = XVID_VERSION; create.width = lpbiInput->bmiHeader.biWidth; create.height = lpbiInput->bmiHeader.biHeight; create.fourcc = inhdr->biCompression; /* Decoder threads */ if (codec->config.cpu & XVID_CPU_FORCE) create.num_threads = codec->config.num_threads; else create.num_threads = info.num_threads; /* Autodetect */ switch(codec->xvid_decore_func(0, XVID_DEC_CREATE, &create, NULL)) { case XVID_ERR_FAIL : return ICERR_ERROR; case XVID_ERR_MEMORY : return ICERR_MEMORY; case XVID_ERR_FORMAT : return ICERR_BADFORMAT; case XVID_ERR_VERSION : return ICERR_UNSUPPORTED; } codec->dhandle = create.handle; RegOpenKeyEx(XVID_REG_KEY, XVID_REG_PARENT "\\" XVID_REG_CHILD, 0, KEY_READ, &hKey); REG_GET_N("Brightness", pp_brightness, 0); REG_GET_N("Deblock_Y", pp_dy, 0); REG_GET_N("Deblock_UV", pp_duv, 0); REG_GET_N("Dering_Y", pp_dry, 0); REG_GET_N("Dering_UV", pp_druv, 0); REG_GET_N("FilmEffect", pp_fe, 0); RegCloseKey(hKey); return ICERR_OK; }