X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=plugins%2Fidct%2Fidctclassic.c;h=b47fcaf31f642bab000379d5b2694731523066b3;hb=45f3f2825f878822ca99b07b3eb9a6134e0224ea;hp=ef148665c160112f21f2749052209c5110ad42c7;hpb=f56c4db12e0f8cacd9bc23cafc3be0b63498b145;p=vlc diff --git a/plugins/idct/idctclassic.c b/plugins/idct/idctclassic.c index ef148665c1..b47fcaf31f 100644 --- a/plugins/idct/idctclassic.c +++ b/plugins/idct/idctclassic.c @@ -2,7 +2,7 @@ * idctclassic.c : Classic IDCT module ***************************************************************************** * Copyright (C) 1999, 2000 VideoLAN - * $Id: idctclassic.c,v 1.3 2001/01/16 02:16:38 sam Exp $ + * $Id: idctclassic.c,v 1.14 2001/08/22 17:21:45 massiot Exp $ * * Authors: Gaƫl Hendryckx * @@ -22,6 +22,7 @@ *****************************************************************************/ #define MODULE_NAME idctclassic +#include "modules_inner.h" /***************************************************************************** * Preamble @@ -34,28 +35,19 @@ #include "common.h" #include "threads.h" #include "mtime.h" +#include "tests.h" -#include "video.h" -#include "video_output.h" - -#include "video_decoder.h" +#include "vdec_idct.h" #include "modules.h" -#include "modules_inner.h" - -#include "idct.h" +#include "modules_export.h" /***************************************************************************** * Local and extern prototypes. *****************************************************************************/ static void idct_getfunctions( function_list_t * p_function_list ); - static int idct_Probe ( probedata_t *p_data ); -static void vdec_InitIDCT ( vdec_thread_t * p_vdec); - void vdec_SparseIDCT ( vdec_thread_t * p_vdec, dctelem_t * p_block, - int i_sparse_pos); -static void vdec_IDCT ( vdec_thread_t * p_vdec, dctelem_t * p_block, - int i_idontcare ); +static void vdec_NormScan ( u8 ppi_scan[2][64] ); /***************************************************************************** @@ -64,64 +56,20 @@ static void vdec_IDCT ( vdec_thread_t * p_vdec, dctelem_t * p_block, MODULE_CONFIG_START ADD_WINDOW( "Configuration for classic IDCT module" ) ADD_COMMENT( "Ha, ha -- nothing to configure yet" ) -MODULE_CONFIG_END - -/***************************************************************************** - * InitModule: get the module structure and configuration. - ***************************************************************************** - * We have to fill psz_name, psz_longname and psz_version. These variables - * will be strdup()ed later by the main application because the module can - * be unloaded later to save memory, and we want to be able to access this - * data even after the module has been unloaded. - *****************************************************************************/ -int InitModule( module_t * p_module ) -{ - p_module->psz_name = MODULE_STRING; - p_module->psz_longname = "classic C IDCT module"; - p_module->psz_version = VERSION; +MODULE_CONFIG_STOP +MODULE_INIT_START p_module->i_capabilities = MODULE_CAPABILITY_NULL | MODULE_CAPABILITY_IDCT; + p_module->psz_longname = "classic IDCT module"; +MODULE_INIT_STOP - return( 0 ); -} - -/***************************************************************************** - * ActivateModule: set the module to an usable state. - ***************************************************************************** - * This function fills the capability functions and the configuration - * structure. Once ActivateModule() has been called, the i_usage can - * be set to 0 and calls to NeedModule() be made to increment it. To unload - * the module, one has to wait until i_usage == 0 and call DeactivateModule(). - *****************************************************************************/ -int ActivateModule( module_t * p_module ) -{ - p_module->p_functions = malloc( sizeof( module_functions_t ) ); - if( p_module->p_functions == NULL ) - { - return( -1 ); - } - +MODULE_ACTIVATE_START idct_getfunctions( &p_module->p_functions->idct ); +MODULE_ACTIVATE_STOP - p_module->p_config = p_config; - - return( 0 ); -} - -/***************************************************************************** - * DeactivateModule: make sure the module can be unloaded. - ***************************************************************************** - * This function must only be called when i_usage == 0. If it successfully - * returns, i_usage can be set to -1 and the module unloaded. Be careful to - * lock usage_lock during the whole process. - *****************************************************************************/ -int DeactivateModule( module_t * p_module ) -{ - free( p_module->p_functions ); - - return( 0 ); -} +MODULE_DEACTIVATE_START +MODULE_DEACTIVATE_STOP /* Following functions are local */ @@ -132,9 +80,15 @@ int DeactivateModule( module_t * p_module ) static void idct_getfunctions( function_list_t * p_function_list ) { p_function_list->pf_probe = idct_Probe; - p_function_list->functions.idct.pf_init = vdec_InitIDCT; - p_function_list->functions.idct.pf_sparse_idct = vdec_SparseIDCT; - p_function_list->functions.idct.pf_idct = vdec_IDCT; +#define F p_function_list->functions.idct + F.pf_idct_init = _M( vdec_InitIDCT ); + F.pf_sparse_idct = _M( vdec_SparseIDCT ); + F.pf_idct = _M( vdec_IDCT ); + F.pf_norm_scan = vdec_NormScan; + F.pf_decode_init = _M( vdec_InitDecode ); + F.pf_addblock = _M( vdec_AddBlock ); + F.pf_copyblock = _M( vdec_CopyBlock ); +#undef F } /***************************************************************************** @@ -142,33 +96,28 @@ static void idct_getfunctions( function_list_t * p_function_list ) *****************************************************************************/ static int idct_Probe( probedata_t *p_data ) { + if( TestMethod( IDCT_METHOD_VAR, "idctclassic" ) + || TestMethod( IDCT_METHOD_VAR, "classic" ) ) + { + return( 999 ); + } + /* This plugin always works */ return( 100 ); } /***************************************************************************** - * vdec_InitIDCT : initialize datas for vdec_SparseIDCT + * vdec_NormScan : Unused in this IDCT *****************************************************************************/ -static void vdec_InitIDCT (vdec_thread_t * p_vdec) +static void vdec_NormScan( u8 ppi_scan[2][64] ) { - int i; - - dctelem_t * p_pre = p_vdec->p_pre_idct; - memset( p_pre, 0, 64*64*sizeof(dctelem_t) ); - - for( i=0 ; i < 64 ; i++ ) - { - p_pre[i*64+i] = 1 << SPARSE_SCALE_FACTOR; - vdec_IDCT( p_vdec, &p_pre[i*64], 0) ; - } - return; } /***************************************************************************** * vdec_IDCT : IDCT function for normal matrices *****************************************************************************/ -static void vdec_IDCT( vdec_thread_t * p_vdec, dctelem_t * p_block, - int i_idontcare ) +void _M( vdec_IDCT )( void * p_unused_data, dctelem_t * p_block, + int i_idontcare ) { /* dct classique: pour tester la meilleure entre la classique et la */ /* no classique */ @@ -293,7 +242,7 @@ static void vdec_IDCT( vdec_thread_t * p_vdec, dctelem_t * p_block, * may be commented out. */ -#ifndef NO_ZERO_COLUMN_TEST /*ajoute un test mais evite des calculs */ +#ifndef NO_ZERO_COLUMN_TEST /* Adds a test but avoids calculus */ if ((dataptr[DCTSIZE*1] | dataptr[DCTSIZE*2] | dataptr[DCTSIZE*3] | dataptr[DCTSIZE*4] | dataptr[DCTSIZE*5] | dataptr[DCTSIZE*6] | dataptr[DCTSIZE*7]) == 0)