예제 #1
0
파일: coreaudio.c 프로젝트: AlexSteel/wine
/**************************************************************************
 * 				DriverProc (WINECOREAUDIO.1)
 */
LRESULT CALLBACK CoreAudio_DriverProc(DWORD_PTR dwDevID, HDRVR hDriv, UINT wMsg, 
                                 LPARAM dwParam1, LPARAM dwParam2)
{
     TRACE("(%08lX, %p, %s (%08X), %08lX, %08lX)\n",
           dwDevID, hDriv, wMsg == DRV_LOAD ? "DRV_LOAD" :
           wMsg == DRV_FREE ? "DRV_FREE" :
           wMsg == DRV_OPEN ? "DRV_OPEN" :
           wMsg == DRV_CLOSE ? "DRV_CLOSE" :
           wMsg == DRV_ENABLE ? "DRV_ENABLE" :
           wMsg == DRV_DISABLE ? "DRV_DISABLE" :
           wMsg == DRV_QUERYCONFIGURE ? "DRV_QUERYCONFIGURE" :
           wMsg == DRV_CONFIGURE ? "DRV_CONFIGURE" :
           wMsg == DRV_INSTALL ? "DRV_INSTALL" :
           wMsg == DRV_REMOVE ? "DRV_REMOVE" : "UNKNOWN", 
           wMsg, dwParam1, dwParam2);

    switch(wMsg) {
    case DRV_LOAD:		return CoreAudio_drvLoad();
    case DRV_FREE:		return CoreAudio_drvFree();
    case DRV_OPEN:		return CoreAudio_drvOpen((LPSTR)dwParam1);
    case DRV_CLOSE:		return CoreAudio_drvClose(dwDevID);
    case DRV_ENABLE:		return 1;
    case DRV_DISABLE:		return 1;
    case DRV_QUERYCONFIGURE:	return 1;
    case DRV_CONFIGURE:		MessageBoxA(0, "CoreAudio driver!", "CoreAudio driver", MB_OK); return 1;
    case DRV_INSTALL:		return DRVCNF_RESTART;
    case DRV_REMOVE:		return DRVCNF_RESTART;
    default:
	return DefDriverProc(dwDevID, hDriv, wMsg, dwParam1, dwParam2);
    }
}
예제 #2
0
파일: joystick.c 프로젝트: Kelimion/wine
/**************************************************************************
 * 				DriverProc (JOYSTICK.@)
 */
LRESULT CALLBACK JSTCK_DriverProc(DWORD_PTR dwDevID, HDRVR hDriv, UINT wMsg,
                                  LPARAM dwParam1, LPARAM dwParam2)
{
    /* EPP     TRACE("(%08lX, %04X, %08lX, %08lX, %08lX)\n",  */
    /* EPP 	  dwDevID, hDriv, wMsg, dwParam1, dwParam2); */

    switch(wMsg) {
    case DRV_LOAD:		return 1;
    case DRV_FREE:		return 1;
    case DRV_OPEN:		return JSTCK_drvOpen((LPSTR)dwParam1, dwParam2);
    case DRV_CLOSE:		return JSTCK_drvClose(dwDevID);
    case DRV_ENABLE:		return 1;
    case DRV_DISABLE:		return 1;
    case DRV_QUERYCONFIGURE:	return 1;
    case DRV_CONFIGURE:		MessageBoxA(0, "JoyStick MultiMedia Driver !", "JoyStick Driver", MB_OK);	return 1;
    case DRV_INSTALL:		return DRVCNF_RESTART;
    case DRV_REMOVE:		return DRVCNF_RESTART;

    case JDD_GETNUMDEVS:	return 1;
    case JDD_GETDEVCAPS:	return JSTCK_GetDevCaps(dwDevID, (LPJOYCAPSW)dwParam1, dwParam2);
    case JDD_GETPOS:		return JSTCK_GetPos(dwDevID, (LPJOYINFO)dwParam1);
    case JDD_SETCALIBRATION:
    case JDD_CONFIGCHANGED:	return JOYERR_NOCANDO;
    case JDD_GETPOSEX:		return JSTCK_GetPosEx(dwDevID, (LPJOYINFOEX)dwParam1);
    default:
	return DefDriverProc(dwDevID, hDriv, wMsg, dwParam1, dwParam2);
    }
}
예제 #3
0
파일: entry.c 프로젝트: hoangduit/reactos
LONG WINAPI
DriverProc(
    DWORD driver_id,
    HANDLE driver_handle,
    UINT message,
    LONG parameter1,
    LONG parameter2)
{
    switch ( message )
    {
        case DRV_LOAD :
            DPRINT("DRV_LOAD\n");
            return 1L;

        case DRV_FREE :
            DPRINT("DRV_FREE\n");
            return 1L;

        case DRV_OPEN :
            DPRINT("DRV_OPEN\n");
            return 1L;

        case DRV_CLOSE :
            DPRINT("DRV_CLOSE\n");
            return 1L;

        case DRV_ENABLE :
            DPRINT("DRV_ENABLE\n");
            return 1L;

        case DRV_DISABLE :
            DPRINT("DRV_DISABLE\n");
            return 1L;

        /*
            We don't provide configuration capabilities. This used to be
            for things like I/O port, IRQ, DMA settings, etc.
        */

        case DRV_QUERYCONFIGURE :
            DPRINT("DRV_QUERYCONFIGURE\n");
            return 0L;

        case DRV_CONFIGURE :
            DPRINT("DRV_CONFIGURE\n");
            return 0L;

        case DRV_INSTALL :
            DPRINT("DRV_INSTALL\n");
            return DRVCNF_RESTART;
    };

    return DefDriverProc(driver_id,
                         driver_handle,
                         message,
                         parameter1,
                         parameter2);
}
예제 #4
0
파일: wavemap.c 프로젝트: Strongc/reactos
/**************************************************************************
 * 				DriverProc (MSACM.@)
 */
LRESULT CALLBACK WAVEMAP_DriverProc(DWORD_PTR dwDevID, HDRVR hDriv, UINT wMsg,
                                    LPARAM dwParam1, LPARAM dwParam2)
{
    TRACE("(%08lX, %p, %08X, %08lX, %08lX)\n",
	  dwDevID, hDriv, wMsg, dwParam1, dwParam2);

    switch(wMsg) {
    case DRV_LOAD:		return 1;
    case DRV_FREE:		return 1;
    case DRV_OPEN:		return WAVEMAP_drvOpen((LPSTR)dwParam1);
    case DRV_CLOSE:		return WAVEMAP_drvClose(dwDevID);
    case DRV_ENABLE:		return 1;
    case DRV_DISABLE:		return 1;
    case DRV_QUERYCONFIGURE:	return 1;
    case DRV_CONFIGURE:		MessageBoxA(0, "WAVEMAP MultiMedia Driver !", "Wave mapper Driver", MB_OK);	return 1;
    case DRV_INSTALL:		return DRVCNF_RESTART;
    case DRV_REMOVE:		return DRVCNF_RESTART;
    default:
	return DefDriverProc(dwDevID, hDriv, wMsg, dwParam1, dwParam2);
    }
}
예제 #5
0
파일: midimap.c 프로젝트: NVIDIA/winex_lgpl
/**************************************************************************
 * 				DriverProc (MIDIMAP.@)
 */
LONG CALLBACK	MIDIMAP_DriverProc(DWORD dwDevID, HDRVR hDriv, DWORD wMsg,
				   DWORD dwParam1, DWORD dwParam2)
{
/* EPP     TRACE("(%08lX, %04X, %08lX, %08lX, %08lX)\n",  */
/* EPP 	  dwDevID, hDriv, wMsg, dwParam1, dwParam2); */

    switch (wMsg)
    {
    case DRV_LOAD:		return 1;
    case DRV_FREE:		return 1;
    case DRV_OPEN:		return MIDIMAP_drvOpen((LPSTR)dwParam1);
    case DRV_CLOSE:		return MIDIMAP_drvClose(dwDevID);
    case DRV_ENABLE:		return 1;
    case DRV_DISABLE:		return 1;
    case DRV_QUERYCONFIGURE:	return 1;
    case DRV_CONFIGURE:		MessageBoxA(0, "MIDIMAP MultiMedia Driver !", "OSS Driver", MB_OK);	return 1;
    case DRV_INSTALL:		return DRVCNF_RESTART;
    case DRV_REMOVE:		return DRVCNF_RESTART;
    default:
	return DefDriverProc(dwDevID, hDriv, wMsg, dwParam1, dwParam2);
    }
}
예제 #6
0
파일: arts.c 프로젝트: howard5888/wineT
/**************************************************************************
 * 				DriverProc (WINEARTS.@)
 */
LRESULT CALLBACK ARTS_DriverProc(DWORD_PTR dwDevID, HDRVR hDriv, UINT wMsg,
                                 LPARAM dwParam1, LPARAM dwParam2)
{
/* EPP     TRACE("(%08lX, %04X, %08lX, %08lX, %08lX)\n",  */
/* EPP 	  dwDevID, hDriv, wMsg, dwParam1, dwParam2); */

    switch(wMsg) {
#ifdef HAVE_ARTS
    case DRV_LOAD:		if (ARTS_WaveInit()<0) return 0;
				return 1;
    case DRV_FREE:	        return ARTS_WaveClose();
    case DRV_OPEN:		return ARTS_drvOpen((LPSTR)dwParam1);
    case DRV_CLOSE:		return ARTS_drvClose(dwDevID);
    case DRV_ENABLE:		return 1;
    case DRV_DISABLE:		return 1;
    case DRV_QUERYCONFIGURE:	return 1;
    case DRV_CONFIGURE:		MessageBoxA(0, "aRts MultiMedia Driver!", "aRts Driver", MB_OK);	return 1;
    case DRV_INSTALL:		return DRVCNF_RESTART;
    case DRV_REMOVE:		return DRVCNF_RESTART;
#endif
    default:
	return DefDriverProc(dwDevID, hDriv, wMsg, dwParam1, dwParam2);
    }
}
예제 #7
0
/* __declspec(dllexport) */ LRESULT WINAPI DriverProc(
	DWORD_PTR dwDriverId, 
	HDRVR hDriver, 
	UINT uMsg, 
	LPARAM lParam1, 
	LPARAM lParam2) 
{
	CODEC * codec = (CODEC *)dwDriverId;

	switch(uMsg)
	{

	/* driver primitives */

	case DRV_LOAD :
	case DRV_FREE :
		return DRVCNF_OK;

	case DRV_OPEN :
		DPRINTF("DRV_OPEN");

		{
			ICOPEN * icopen = (ICOPEN *)lParam2;
			
			if (icopen != NULL && icopen->fccType != ICTYPE_VIDEO)
			{
				return DRVCNF_CANCEL;
			}

			codec = malloc(sizeof(CODEC));

			if (codec == NULL)
			{
				if (icopen != NULL)
				{
					icopen->dwError = ICERR_MEMORY;
				}
				return 0;
			}
            
			memset(codec, 0, sizeof(CODEC));
            
            codec->status.hDlg = NULL;
            codec->config.ci_valid = 0;
            codec->ehandle = codec->dhandle = NULL;
            codec->fbase = 25;
			codec->fincr = 1;
			config_reg_get(&codec->config);

#if 0
			/* bad things happen if this piece of code is activated */
			if (lstrcmp(XVID_BUILD, codec->config.build))
			{
				config_reg_default(&codec->config);
			}
#endif			

			if (icopen != NULL)
			{
				icopen->dwError = ICERR_OK;
			}
			return (LRESULT)codec;
		}

	case DRV_CLOSE :
		DPRINTF("DRV_CLOSE");
		/* compress_end/decompress_end don't always get called */
		compress_end(codec);
		decompress_end(codec);
		clean_dll_bindings(codec);
        status_destroy_always(&codec->status);
		free(codec);
		return DRVCNF_OK;

	case DRV_DISABLE :
	case DRV_ENABLE :
		return DRVCNF_OK;

	case DRV_INSTALL :
	case DRV_REMOVE :
		return DRVCNF_OK;

	case DRV_QUERYCONFIGURE :
	case DRV_CONFIGURE :
		return DRVCNF_CANCEL;


	/* info */

	case ICM_GETINFO :
		DPRINTF("ICM_GETINFO");
		
		if (lParam1 && lParam2 >= sizeof(ICINFO)) {
			ICINFO *icinfo = (ICINFO *)lParam1;

			icinfo->fccType = ICTYPE_VIDEO;
			icinfo->fccHandler = FOURCC_XVID;
			icinfo->dwFlags =
				VIDCF_FASTTEMPORALC |
				VIDCF_FASTTEMPORALD |
				VIDCF_COMPRESSFRAMES;

			icinfo->dwVersion = 0;
#if !defined(ICVERSION)
#define ICVERSION       0x0104
#endif
			icinfo->dwVersionICM = ICVERSION;
			
			wcscpy(icinfo->szName, XVID_NAME_L); 
			wcscpy(icinfo->szDescription, XVID_DESC_L);
						
			return lParam2; /* size of struct */
		}

		return 0;	/* error */
		
		/* state control */

	case ICM_ABOUT :
		DPRINTF("ICM_ABOUT");
		DialogBoxParam(g_hInst, MAKEINTRESOURCE(IDD_ABOUT), (HWND)lParam1, about_proc, 0);
		return ICERR_OK;

	case ICM_CONFIGURE :
		DPRINTF("ICM_CONFIGURE");
		if (lParam1 != -1)
		{
			CONFIG temp;

			codec->config.save = FALSE;
			memcpy(&temp, &codec->config, sizeof(CONFIG));

			DialogBoxParam(g_hInst, MAKEINTRESOURCE(IDD_MAIN), (HWND)lParam1, main_proc, (LPARAM)&temp);

			if (temp.save)
			{
				memcpy(&codec->config, &temp, sizeof(CONFIG));
				config_reg_set(&codec->config);
			}
		}
		return ICERR_OK;
			
	case ICM_GETSTATE :
		DPRINTF("ICM_GETSTATE");
		if ((void*)lParam1 == NULL)
		{
			return sizeof(CONFIG);
		}
		memcpy((void*)lParam1, &codec->config, sizeof(CONFIG));
		return ICERR_OK;

	case ICM_SETSTATE :
		DPRINTF("ICM_SETSTATE");
		if ((void*)lParam1 == NULL)
		{
			DPRINTF("ICM_SETSTATE : DEFAULT");
			config_reg_get(&codec->config);
			return 0;
		}
		memcpy(&codec->config,(void*)lParam1, sizeof(CONFIG));
		return 0; /* sizeof(CONFIG); */

	/* not sure the difference, private/public data? */

	case ICM_GET :
	case ICM_SET :
		return ICERR_OK;


	/* older-stype config */

	case ICM_GETDEFAULTQUALITY :
	case ICM_GETQUALITY :
	case ICM_SETQUALITY :
	case ICM_GETBUFFERSWANTED :
	case ICM_GETDEFAULTKEYFRAMERATE :
		return ICERR_UNSUPPORTED;


	/* compressor */

	case ICM_COMPRESS_QUERY :
		DPRINTF("ICM_COMPRESS_QUERY");
		return compress_query(codec, (BITMAPINFO *)lParam1, (BITMAPINFO *)lParam2);

	case ICM_COMPRESS_GET_FORMAT :
		DPRINTF("ICM_COMPRESS_GET_FORMAT");
		return compress_get_format(codec, (BITMAPINFO *)lParam1, (BITMAPINFO *)lParam2);

	case ICM_COMPRESS_GET_SIZE :
		DPRINTF("ICM_COMPRESS_GET_SIZE");
		return compress_get_size(codec, (BITMAPINFO *)lParam1, (BITMAPINFO *)lParam2);

	case ICM_COMPRESS_FRAMES_INFO :
		DPRINTF("ICM_COMPRESS_FRAMES_INFO");
		return compress_frames_info(codec, (ICCOMPRESSFRAMES *)lParam1);

	case ICM_COMPRESS_BEGIN :
		DPRINTF("ICM_COMPRESS_BEGIN");
		return compress_begin(codec, (BITMAPINFO *)lParam1, (BITMAPINFO *)lParam2);

	case ICM_COMPRESS_END :
		DPRINTF("ICM_COMPRESS_END");
		return compress_end(codec);

	case ICM_COMPRESS :
		DPRINTF("ICM_COMPRESS");
		return compress(codec, (ICCOMPRESS *)lParam1);

	/* decompressor */
	
	case ICM_DECOMPRESS_QUERY :
		DPRINTF("ICM_DECOMPRESS_QUERY");
		return decompress_query(codec, (BITMAPINFO *)lParam1, (BITMAPINFO *)lParam2);

	case ICM_DECOMPRESS_GET_FORMAT :
		DPRINTF("ICM_DECOMPRESS_GET_FORMAT");
		return decompress_get_format(codec, (BITMAPINFO *)lParam1, (BITMAPINFO *)lParam2);
	
	case ICM_DECOMPRESS_BEGIN :
		DPRINTF("ICM_DECOMPRESS_BEGIN");
		return decompress_begin(codec, (BITMAPINFO *)lParam1, (BITMAPINFO *)lParam2);

	case ICM_DECOMPRESS_END :
		DPRINTF("ICM_DECOMPRESS_END");
		return decompress_end(codec);

	case ICM_DECOMPRESS :
		DPRINTF("ICM_DECOMPRESS");
		return decompress(codec, (ICDECOMPRESS *)lParam1);

	case ICM_DECOMPRESS_GET_PALETTE :
	case ICM_DECOMPRESS_SET_PALETTE :
	case ICM_DECOMPRESSEX_QUERY:
	case ICM_DECOMPRESSEX_BEGIN:
	case ICM_DECOMPRESSEX_END:
	case ICM_DECOMPRESSEX:
		return ICERR_UNSUPPORTED;

    /* VFWEXT entry point */
    case ICM_USER+0x0fff :
        if (lParam1 == VFWEXT_CONFIGURE_INFO) {
            VFWEXT_CONFIGURE_INFO_T * info = (VFWEXT_CONFIGURE_INFO_T*)lParam2;
            DPRINTF("%i %i %i %i %i %i",
                info->ciWidth, info->ciHeight,
                info->ciRate, info->ciScale,
                info->ciActiveFrame, info->ciFrameCount);

            codec->config.ci_valid = 1;
            memcpy(&codec->config.ci, (void*)lParam2, sizeof(VFWEXT_CONFIGURE_INFO_T));
            return ICERR_OK;
        }
        return ICERR_UNSUPPORTED;

	default:
		if (uMsg < DRV_USER)
			return DefDriverProc(dwDriverId, hDriver, uMsg, lParam1, lParam2);
		else 
			return ICERR_UNSUPPORTED;
	}
}
예제 #8
0
파일: mcicda.c 프로젝트: NVIDIA/winex_lgpl
/**************************************************************************
 * 			DriverProc (MCICDA.@)
 */
LONG CALLBACK	MCICDA_DriverProc(DWORD dwDevID, HDRVR hDriv, DWORD wMsg,
				      DWORD dwParam1, DWORD dwParam2)
{
    switch(wMsg) {
    case DRV_LOAD:		return 1;
    case DRV_FREE:		return 1;
    case DRV_OPEN:		return MCICDA_drvOpen((LPSTR)dwParam1, (LPMCI_OPEN_DRIVER_PARMSA)dwParam2);
    case DRV_CLOSE:		return MCICDA_drvClose(dwDevID);
    case DRV_ENABLE:		return 1;
    case DRV_DISABLE:		return 1;
    case DRV_QUERYCONFIGURE:	return 1;
    case DRV_CONFIGURE:		MessageBoxA(0, "MCI audio CD driver !", "Wine Driver", MB_OK); return 1;
    case DRV_INSTALL:		return DRVCNF_RESTART;
    case DRV_REMOVE:		return DRVCNF_RESTART;
    }

    if (dwDevID == 0xFFFFFFFF) return MCIERR_UNSUPPORTED_FUNCTION;

    switch (wMsg) {
    case MCI_OPEN_DRIVER:	return MCICDA_Open(dwDevID, dwParam1, (LPMCI_OPEN_PARMSA)dwParam2);
    case MCI_CLOSE_DRIVER:	return MCICDA_Close(dwDevID, dwParam1, (LPMCI_GENERIC_PARMS)dwParam2);
    case MCI_GETDEVCAPS:	return MCICDA_GetDevCaps(dwDevID, dwParam1, (LPMCI_GETDEVCAPS_PARMS)dwParam2);
    case MCI_INFO:		return MCICDA_Info(dwDevID, dwParam1, (LPMCI_INFO_PARMSA)dwParam2);
    case MCI_STATUS:		return MCICDA_Status(dwDevID, dwParam1, (LPMCI_STATUS_PARMS)dwParam2);
    case MCI_SET:		return MCICDA_Set(dwDevID, dwParam1, (LPMCI_SET_PARMS)dwParam2);
    case MCI_PLAY:		return MCICDA_Play(dwDevID, dwParam1, (LPMCI_PLAY_PARMS)dwParam2);
    case MCI_STOP:		return MCICDA_Stop(dwDevID, dwParam1, (LPMCI_GENERIC_PARMS)dwParam2);
    case MCI_PAUSE:		return MCICDA_Pause(dwDevID, dwParam1, (LPMCI_GENERIC_PARMS)dwParam2);
    case MCI_RESUME:		return MCICDA_Resume(dwDevID, dwParam1, (LPMCI_GENERIC_PARMS)dwParam2);
    case MCI_SEEK:		return MCICDA_Seek(dwDevID, dwParam1, (LPMCI_SEEK_PARMS)dwParam2);
    /* FIXME: I wonder if those two next items are really called ? */
    case MCI_SET_DOOR_OPEN:	FIXME("MCI_SET_DOOR_OPEN called. Please report this.\n");
				return MCICDA_SetDoor(dwDevID, TRUE);
    case MCI_SET_DOOR_CLOSED:	FIXME("MCI_SET_DOOR_CLOSED called. Please report this.\n");
				return MCICDA_SetDoor(dwDevID, FALSE);
    /* commands that should be supported */
    case MCI_LOAD:
    case MCI_SAVE:
    case MCI_FREEZE:
    case MCI_PUT:
    case MCI_REALIZE:
    case MCI_UNFREEZE:
    case MCI_UPDATE:
    case MCI_WHERE:
    case MCI_STEP:
    case MCI_SPIN:
    case MCI_ESCAPE:
    case MCI_COPY:
    case MCI_CUT:
    case MCI_DELETE:
    case MCI_PASTE:
	FIXME("Unsupported yet command [%lu]\n", wMsg);
	break;
    /* commands that should report an error */
    case MCI_WINDOW:
	TRACE("Unsupported command [%lu]\n", wMsg);
	break;
    case MCI_OPEN:
    case MCI_CLOSE:
	ERR("Shouldn't receive a MCI_OPEN or CLOSE message\n");
	break;
    default:
	TRACE("Sending msg [%lu] to default driver proc\n", wMsg);
	return DefDriverProc(dwDevID, hDriv, wMsg, dwParam1, dwParam2);
    }
    return MCIERR_UNRECOGNIZED_COMMAND;
}
예제 #9
0
/***************************************************************************
 * DriverProc  -  The entry point for an installable driver.
 *
 * PARAMETERS
 * dwDriverId:  For most messages, <dwDriverId> is the DWORD
 *     value that the driver returns in response to a <DRV_OPEN> message.
 *     Each time that the driver is opened, through the <DrvOpen> API,
 *     the driver receives a <DRV_OPEN> message and can return an
 *     arbitrary, non-zero value. The installable driver interface
 *     saves this value and returns a unique driver handle to the
 *     application. Whenever the application sends a message to the
 *     driver using the driver handle, the interface routes the message
 *     to this entry point and passes the corresponding <dwDriverId>.
 *     This mechanism allows the driver to use the same or different
 *     identifiers for multiple opens but ensures that driver handles
 *     are unique at the application interface layer.
 *
 *     The following messages are not related to a particular open
 *     instance of the driver. For these messages, the dwDriverId
 *     will always be zero.
 *
 *         DRV_LOAD, DRV_FREE, DRV_ENABLE, DRV_DISABLE, DRV_OPEN
 *
 * hDriver: This is the handle returned to the application by the
 *    driver interface.
 *
 * uiMessage: The requested action to be performed. Message
 *     values below <DRV_RESERVED> are used for globally defined messages.
 *     Message values from <DRV_RESERVED> to <DRV_USER> are used for
 *     defined driver protocols. Messages above <DRV_USER> are used
 *     for driver specific messages.
 *
 * lParam1: Data for this message.  Defined separately for
 *     each message
 *
 * lParam2: Data for this message.  Defined separately for
 *     each message
 *
 * RETURNS
 *   Defined separately for each message.
 *
 ***************************************************************************/
LRESULT PASCAL DriverProc(DWORD_PTR dwDriverID, HDRVR hDriver, UINT uiMessage, LPARAM lParam1, LPARAM lParam2) {
  CodecInst* pi = (CodecInst*)dwDriverID;
  switch (uiMessage) {
    case DRV_LOAD:
      return (LRESULT)1L;

    case DRV_FREE:
      return (LRESULT)1L;

    case DRV_OPEN:
      return (LRESULT)Open((ICOPEN*) lParam2);

    case DRV_CLOSE:
      if (pi) Close(pi);
      return (LRESULT)1L;

    /*********************************************************************

      state messages

    *********************************************************************/

    // cwk
    case DRV_QUERYCONFIGURE:    // configuration from drivers applet
      return (LRESULT)1L;

    case DRV_CONFIGURE:
      pi->Configure((HWND)lParam1);
      return DRV_OK;

    case ICM_CONFIGURE:
      //
      //  return ICERR_OK if you will do a configure box, error otherwise
      //
	  if (lParam1 == -1)
        return ICERR_OK;
      else
        return pi->Configure((HWND)lParam1);

    case ICM_ABOUT:
        return ICERR_UNSUPPORTED;

    case ICM_GETSTATE:
      return pi->GetState((LPVOID)lParam1, (DWORD)lParam2);

    case ICM_SETSTATE:
      return pi->SetState((LPVOID)lParam1, (DWORD)lParam2);

    case ICM_GETINFO:
      return pi->GetInfo((ICINFO*)lParam1, (DWORD)lParam2);

    case ICM_GETDEFAULTQUALITY:
      if (lParam1) {
        *((LPDWORD)lParam1) = 10000;
        return ICERR_OK;
      }
      break;

    /*********************************************************************

      compression messages

    *********************************************************************/

    case ICM_COMPRESS_QUERY:
      return pi->CompressQuery((LPBITMAPINFOHEADER)lParam1, (LPBITMAPINFOHEADER)lParam2);

    case ICM_COMPRESS_BEGIN:
      return pi->CompressBegin((LPBITMAPINFOHEADER)lParam1, (LPBITMAPINFOHEADER)lParam2);

    case ICM_COMPRESS_GET_FORMAT:
      return pi->CompressGetFormat((LPBITMAPINFOHEADER)lParam1, (LPBITMAPINFOHEADER)lParam2);

    case ICM_COMPRESS_GET_SIZE:
      return pi->CompressGetSize((LPBITMAPINFOHEADER)lParam1, (LPBITMAPINFOHEADER)lParam2);

    case ICM_COMPRESS:
      return pi->Compress((ICCOMPRESS*)lParam1, (DWORD)lParam2);

    case ICM_COMPRESS_END:
      return pi->CompressEnd();

    /*********************************************************************

      decompress messages

    *********************************************************************/

    case ICM_DECOMPRESS_QUERY:
		
      return pi->DecompressQuery((LPBITMAPINFOHEADER)lParam1, (LPBITMAPINFOHEADER)lParam2);

    case ICM_DECOMPRESS_BEGIN:
      return  pi->DecompressBegin((LPBITMAPINFOHEADER)lParam1, (LPBITMAPINFOHEADER)lParam2);

    case ICM_DECOMPRESS_GET_FORMAT:
      return pi->DecompressGetFormat((LPBITMAPINFOHEADER)lParam1, (LPBITMAPINFOHEADER)lParam2);

    case ICM_DECOMPRESS_GET_PALETTE:
      return pi->DecompressGetPalette((LPBITMAPINFOHEADER)lParam1, (LPBITMAPINFOHEADER)lParam2);

    case ICM_DECOMPRESS:
      return pi->Decompress((ICDECOMPRESS*)lParam1, (DWORD)lParam2);

    case ICM_DECOMPRESS_END:
      return pi->DecompressEnd();

    /*********************************************************************

      standard driver messages

    *********************************************************************/

    case DRV_DISABLE:
    case DRV_ENABLE:
      return (LRESULT)1L;

    case DRV_INSTALL:
    case DRV_REMOVE:
      return (LRESULT)DRV_OK;
  }
  
  if (uiMessage < DRV_USER)
    return DefDriverProc(dwDriverID, hDriver, uiMessage, lParam1, lParam2);
  return ICERR_UNSUPPORTED;

}
예제 #10
0
/**************************************************************************
 * 			DriverProc (MCICDA.@)
 */
LRESULT CALLBACK MCICDA_DriverProc(DWORD_PTR dwDevID, HDRVR hDriv, UINT wMsg,
                                   LPARAM dwParam1, LPARAM dwParam2)
{
    switch(wMsg) {
    case DRV_LOAD:		return 1;
    case DRV_FREE:		return 1;
    case DRV_OPEN:		return MCICDA_drvOpen((LPCWSTR)dwParam1, (LPMCI_OPEN_DRIVER_PARMSW)dwParam2);
    case DRV_CLOSE:		return MCICDA_drvClose(dwDevID);
    case DRV_ENABLE:		return 1;
    case DRV_DISABLE:		return 1;
    case DRV_QUERYCONFIGURE:	return 1;
    case DRV_CONFIGURE:		MessageBoxA(0, "MCI audio CD driver !", "Wine Driver", MB_OK); return 1;
    case DRV_INSTALL:		return DRVCNF_RESTART;
    case DRV_REMOVE:		return DRVCNF_RESTART;
    }

    if (dwDevID == 0xFFFFFFFF) return MCIERR_UNSUPPORTED_FUNCTION;

    switch (wMsg) {
    case MCI_OPEN_DRIVER:	return MCICDA_Open(dwDevID, dwParam1, (LPMCI_OPEN_PARMSW)dwParam2);
    case MCI_CLOSE_DRIVER:	return MCICDA_Close(dwDevID, dwParam1, (LPMCI_GENERIC_PARMS)dwParam2);
    case MCI_GETDEVCAPS:	return MCICDA_GetDevCaps(dwDevID, dwParam1, (LPMCI_GETDEVCAPS_PARMS)dwParam2);
    case MCI_INFO:		return MCICDA_Info(dwDevID, dwParam1, (LPMCI_INFO_PARMSW)dwParam2);
    case MCI_STATUS:		return MCICDA_Status(dwDevID, dwParam1, (LPMCI_STATUS_PARMS)dwParam2);
    case MCI_SET:		return MCICDA_Set(dwDevID, dwParam1, (LPMCI_SET_PARMS)dwParam2);
    case MCI_PLAY:		return MCICDA_Play(dwDevID, dwParam1, (LPMCI_PLAY_PARMS)dwParam2);
    case MCI_STOP:		return MCICDA_Stop(dwDevID, dwParam1, (LPMCI_GENERIC_PARMS)dwParam2);
    case MCI_PAUSE:		return MCICDA_Pause(dwDevID, dwParam1, (LPMCI_GENERIC_PARMS)dwParam2);
    case MCI_RESUME:		return MCICDA_Resume(dwDevID, dwParam1, (LPMCI_GENERIC_PARMS)dwParam2);
    case MCI_SEEK:		return MCICDA_Seek(dwDevID, dwParam1, (LPMCI_SEEK_PARMS)dwParam2);
    /* commands that should report an error as they are not supported in
     * the native version */
    case MCI_RECORD:
    case MCI_LOAD:
    case MCI_SAVE:
	return MCIERR_UNSUPPORTED_FUNCTION;
    case MCI_BREAK:
    case MCI_FREEZE:
    case MCI_PUT:
    case MCI_REALIZE:
    case MCI_UNFREEZE:
    case MCI_UPDATE:
    case MCI_WHERE:
    case MCI_STEP:
    case MCI_SPIN:
    case MCI_ESCAPE:
    case MCI_COPY:
    case MCI_CUT:
    case MCI_DELETE:
    case MCI_PASTE:
    case MCI_WINDOW:
	TRACE("Unsupported command [0x%x]\n", wMsg);
	break;
    case MCI_OPEN:
    case MCI_CLOSE:
	ERR("Shouldn't receive a MCI_OPEN or CLOSE message\n");
	break;
    default:
	TRACE("Sending msg [0x%x] to default driver proc\n", wMsg);
	return DefDriverProc(dwDevID, hDriv, wMsg, dwParam1, dwParam2);
    }
    return MCIERR_UNRECOGNIZED_COMMAND;
}
예제 #11
0
extern "C" __declspec(dllexport) LRESULT WINAPI DriverProc(DWORD dwDriverId, HDRVR hDriver, UINT uMsg, LPARAM lParam1, LPARAM lParam2)
{
    Iffacm2 *ffacm = (Iffacm2*)dwDriverId;
    switch (uMsg) {
        case DRV_LOAD:
            return DRV_OK;
        case DRV_FREE:
            if (hdll) {
                FreeModule(hdll);
                hdll = NULL;
            }
            return DRV_OK;
        case DRV_OPEN: {
            ACMDRVOPENDESCW *icopen = (ACMDRVOPENDESCW*)lParam2;
            if (icopen != NULL && icopen->fccType != ACMDRIVERDETAILS_FCCTYPE_AUDIOCODEC) {
                return DRVCNF_CANCEL;
            }
            if (!hdll) {
                TregOpRegRead r(HKEY_CLASSES_ROOT, "CLSID\\{F6E8FC04-8B05-48B1-9399-848229502A06}\\InprocServer32");
                char pth[MAX_PATH];
                r._REG_OP_S(0, "", pth, MAX_PATH, "");
                hdll = LoadLibrary(pth);
            }
            typedef Iffacm2creator* (__stdcall * Tcreate)(void);
            Tcreate create = (Tcreate)GetProcAddress(hdll, "ffacm2creator");
            if (!create) {
                return DRVCNF_CANCEL;
            }
            Iffacm2creator *creator = create();
            if (!creator) {
                return DRVCNF_CANCEL;
            }
            //if (FAILED(CoCreateInstance(CLSID_FFACM2CREATOR,NULL,CLSCTX_INPROC_SERVER,IID_Iffacm2creator,(void**)&creator))) return DRVCNF_CANCEL;
            int size = creator->getSize();
            ffacm = (Iffacm2*)LocalAlloc(LPTR, size);
            if (!ffacm) {
                creator->Release();
                return DRVCNF_CANCEL;
            }
            creator->create(ffacm);
            creator->Release();
            if (icopen != NULL) {
                icopen->dwError = DRV_OK;
            }
            DPRINTF("ACM DRV_OPEN %i %p", hDriver, ffacm);
            return (LRESULT)ffacm;
        }
        case DRV_CLOSE:
            DPRINTF("ACM DRV_CLOSE %i %p", hDriver, ffacm);
            if (ffacm) {
                LocalFree(ffacm);
            }
            return DRV_OK;
        case DRV_CONFIGURE:
            return DRVCNF_OK;
        case DRV_QUERYCONFIGURE:
            return FALSE;
        case DRV_INSTALL:
            return DRVCNF_RESTART;
        case DRV_REMOVE:
            return DRVCNF_RESTART;
            // ACM
        case ACMDM_DRIVER_DETAILS:
            DPRINTF("ACM ACMDM_DRIVER_DETAILS %i %p", hDriver, ffacm);
            return ffacm->driverDetails((LPACMDRIVERDETAILSW)lParam1);
        case ACMDM_DRIVER_ABOUT:
            DPRINTF("ACM ACMDM_DRIVER_ABOUT %i %p", hDriver, ffacm);
            return ffacm->driverAbout((HWND)lParam1);
        case ACMDM_FORMAT_SUGGEST:
            DPRINTF("ACM ACMDM_FORMAT_SUGGEST %i %p", hDriver, ffacm);
            return ffacm->formatSuggest((LPACMDRVFORMATSUGGEST)lParam1);
        case ACMDM_FORMATTAG_DETAILS:
            DPRINTF("ACM ACMDM_FORMATTAG_DETAILS %i %p", hDriver, ffacm);
            return ffacm->formatTagDetails((LPACMFORMATTAGDETAILSW)lParam1, (DWORD)lParam2);
        case ACMDM_FORMAT_DETAILS:
            DPRINTF("ACM ACMDM_FORMAT_DETAILS %i %p", hDriver, ffacm);
            //lr = acmdFormatDetails(pdi, (LPACMFORMATDETAILS)lParam1, (DWORD)lParam2);
            return 0;
        case ACMDM_STREAM_OPEN:
            DPRINTF("ACM ACMDM_STREAM_OPEN %i %p", hDriver, ffacm);
            return ffacm->streamOpen((LPACMDRVSTREAMINSTANCE)lParam1);
        case ACMDM_STREAM_CLOSE:
            DPRINTF("ACM ACMDM_STREAM_CLOSE %i %p", hDriver, ffacm);
            return ffacm->streamClose((LPACMDRVSTREAMINSTANCE)lParam1);
        case ACMDM_STREAM_SIZE:
            DPRINTF("ACM ACMDM_STREAM_SIZE %i %p", hDriver, ffacm);
            return ffacm->streamSize((LPACMDRVSTREAMINSTANCE)lParam1, (LPACMDRVSTREAMSIZE)lParam2);
        case ACMDM_STREAM_CONVERT:
            DPRINTF("ACM ACMDM_STREAM_SIZE %i %p", hDriver, ffacm);
            return ffacm->convert((LPACMDRVSTREAMINSTANCE) lParam1, (LPACMDRVSTREAMHEADER)lParam2);
        default:
            if (uMsg < DRV_USER) {
                return DefDriverProc(dwDriverId, hDriver, uMsg, lParam1, lParam2);
            }
    }
    return MMSYSERR_NOTSUPPORTED;
}
예제 #12
0
파일: mciqtz.c 프로젝트: Kelimion/wine
/**************************************************************************
 *                              DriverProc (MCIQTZ.@)
 */
LRESULT CALLBACK MCIQTZ_DriverProc(DWORD_PTR dwDevID, HDRVR hDriv, UINT wMsg,
                                   LPARAM dwParam1, LPARAM dwParam2)
{
    TRACE("(%08lX, %p, %08X, %08lX, %08lX)\n",
          dwDevID, hDriv, wMsg, dwParam1, dwParam2);

    switch (wMsg) {
        case DRV_LOAD:                  return 1;
        case DRV_FREE:                  return 1;
        case DRV_OPEN:                  return MCIQTZ_drvOpen((LPCWSTR)dwParam1, (LPMCI_OPEN_DRIVER_PARMSW)dwParam2);
        case DRV_CLOSE:                 return MCIQTZ_drvClose(dwDevID);
        case DRV_ENABLE:                return 1;
        case DRV_DISABLE:               return 1;
        case DRV_QUERYCONFIGURE:        return 1;
        case DRV_CONFIGURE:             return MCIQTZ_drvConfigure(dwDevID);
        case DRV_INSTALL:               return DRVCNF_RESTART;
        case DRV_REMOVE:                return DRVCNF_RESTART;
    }

    /* session instance */
    if (dwDevID == 0xFFFFFFFF)
        return 1;

    switch (wMsg) {
        case MCI_OPEN_DRIVER:   return MCIQTZ_mciOpen      (dwDevID, dwParam1, (LPMCI_DGV_OPEN_PARMSW)     dwParam2);
        case MCI_CLOSE_DRIVER:  return MCIQTZ_mciClose     (dwDevID, dwParam1, (LPMCI_GENERIC_PARMS)       dwParam2);
        case MCI_PLAY:          return MCIQTZ_mciPlay      (dwDevID, dwParam1, (LPMCI_PLAY_PARMS)          dwParam2);
        case MCI_SEEK:          return MCIQTZ_mciSeek      (dwDevID, dwParam1, (LPMCI_SEEK_PARMS)          dwParam2);
        case MCI_STOP:          return MCIQTZ_mciStop      (dwDevID, dwParam1, (LPMCI_GENERIC_PARMS)       dwParam2);
        case MCI_PAUSE:         return MCIQTZ_mciPause     (dwDevID, dwParam1, (LPMCI_GENERIC_PARMS)       dwParam2);
        case MCI_GETDEVCAPS:    return MCIQTZ_mciGetDevCaps(dwDevID, dwParam1, (LPMCI_GETDEVCAPS_PARMS)    dwParam2);
        case MCI_SET:           return MCIQTZ_mciSet       (dwDevID, dwParam1, (LPMCI_DGV_SET_PARMS)       dwParam2);
        case MCI_STATUS:        return MCIQTZ_mciStatus    (dwDevID, dwParam1, (LPMCI_DGV_STATUS_PARMSW)   dwParam2);
        case MCI_WHERE:         return MCIQTZ_mciWhere     (dwDevID, dwParam1, (LPMCI_DGV_RECT_PARMS)      dwParam2);
        /* Digital Video specific */
        case MCI_SETAUDIO:      return MCIQTZ_mciSetAudio  (dwDevID, dwParam1, (LPMCI_DGV_SETAUDIO_PARMSW) dwParam2);
        case MCI_UPDATE:
            return MCIQTZ_mciUpdate(dwDevID, dwParam1, (LPMCI_DGV_UPDATE_PARMS)dwParam2);
        case MCI_WINDOW:
            return MCIQTZ_mciWindow(dwDevID, dwParam1, (LPMCI_DGV_WINDOW_PARMSW)dwParam2);
        case MCI_PUT:
        case MCI_RECORD:
        case MCI_RESUME:
        case MCI_INFO:
        case MCI_LOAD:
        case MCI_SAVE:
        case MCI_FREEZE:
        case MCI_REALIZE:
        case MCI_UNFREEZE:
        case MCI_STEP:
        case MCI_COPY:
        case MCI_CUT:
        case MCI_DELETE:
        case MCI_PASTE:
        case MCI_CUE:
        /* Digital Video specific */
        case MCI_CAPTURE:
        case MCI_MONITOR:
        case MCI_RESERVE:
        case MCI_SIGNAL:
        case MCI_SETVIDEO:
        case MCI_QUALITY:
        case MCI_LIST:
        case MCI_UNDO:
        case MCI_CONFIGURE:
        case MCI_RESTORE:
            FIXME("Unimplemented command [%08X]\n", wMsg);
            break;
        case MCI_SPIN:
        case MCI_ESCAPE:
            WARN("Unsupported command [%08X]\n", wMsg);
            break;
        case MCI_OPEN:
        case MCI_CLOSE:
            FIXME("Shouldn't receive a MCI_OPEN or CLOSE message\n");
            break;
        default:
            TRACE("Sending msg [%08X] to default driver proc\n", wMsg);
            return DefDriverProc(dwDevID, hDriv, wMsg, dwParam1, dwParam2);
    }

    return MCIERR_UNRECOGNIZED_COMMAND;
}
예제 #13
0
//***************************************************************************
long FAR PASCAL EXPORT MCIDrawProc(DWORD id, HDRVR hDriver, UINT message, LPARAM lParam1, LPARAM lParam2)
//***************************************************************************
{
	PINSTINFO pi;

	switch (message)
	{
	// First, all the messages we ignore
	case DRV_LOAD:
	case DRV_FREE:
	case DRV_CONFIGURE:
	case DRV_DISABLE:
	case DRV_ENABLE:
	case DRV_INSTALL:
	case DRV_REMOVE:
		return 1L; //ICERR_UNSUPPORTED; // JMM try unsupported instead of 1L
	
	case ICM_CONFIGURE:
	case ICM_ABOUT:
	case ICM_DRAW_START_PLAY:
		return ICERR_UNSUPPORTED;
		
	// Next, all the messages we ignore and just return ICERR_OK (0):
	// Note, these may be used to store state information.
	// It is unclear if they will definitetly be called.
	case DRV_QUERYCONFIGURE:
	case ICM_GETSTATE:
	case ICM_SETSTATE:
	case ICM_DRAW_QUERY: // Determine if the input can be processed
	case ICM_DRAW_SUGGESTFORMAT: // Suggest the output format
	case ICM_DRAW_END: // Cleanup after a draw operation
		return ICERR_OK;

	// The draw messages we care about
	case DRV_OPEN: // Open the rendering driver
		return AVIDrawOpen((ICOPEN FAR *)lParam2);
	case ICM_DRAW_BEGIN: // Prepare to draw the video data
		return AVIDrawBegin((PINSTINFO)id, (ICDRAWBEGIN FAR *) lParam1, lParam2);
	case ICM_GETINFO:
		return AVIDrawGetInfo((ICINFO FAR *)lParam1, lParam2);
	case ICM_DRAW: // Draw the video data
		return AVIDraw((PINSTINFO)id, (ICDRAW FAR *)lParam1, lParam2);
	case ICM_DRAW_CHANGEPALETTE:
		return AVIDrawChangePalette((PINSTINFO)id, (LPBITMAPINFOHEADER) lParam1);
	case ICM_DRAW_GET_PALETTE:
		if ( !(pi = (PINSTINFO)id) )	return ICERR_UNSUPPORTED;
		if (!pi->hdc || !pi->hdd)		return ICERR_UNSUPPORTED;
		return (UINT)DrawDibGetPalette(pi->hdd);
	case ICM_DRAW_REALIZE:
		if ( !(pi = (PINSTINFO)id) )	return ICERR_UNSUPPORTED;
		pi->hdc = (HDC)lParam1;
		if (!pi->hdc || !pi->hdd)		return ICERR_UNSUPPORTED;
		return DrawDibRealize(pi->hdd, pi->hdc, (BOOL) lParam2);
	case DRV_CLOSE: // Close the rendering driver
		return AVIDrawClose((PINSTINFO)id);

	default:
		if (message < DRV_USER)
			return DefDriverProc(id, hDriver, message, lParam1, lParam2);
		else
			return ICERR_UNSUPPORTED;
	}

	return ICERR_UNSUPPORTED;
}
예제 #14
0
LONG ACM::DriverProcedure(const HDRVR hdrvr, const UINT msg, LONG lParam1, LONG lParam2)
{
    DWORD dwRes = 0L;

//my_debug.OutPut(DEBUG_LEVEL_MSG, "message 0x%08X for ThisACM 0x%08X", msg, this);

switch (msg) {
    case DRV_INSTALL:
		my_debug.OutPut(DEBUG_LEVEL_MSG, "DRV_INSTALL");
		// Sent when the driver is installed.
		dwRes = DRVCNF_OK;  // Can also return 
		break;              // DRVCNF_CANCEL
							// and DRV_RESTART

	case DRV_REMOVE:
		// Sent when the driver is removed.
		my_debug.OutPut(DEBUG_LEVEL_MSG, "DRV_REMOVE");
		dwRes = 1L;  // return value ignored
		break;

    case DRV_QUERYCONFIGURE:
		my_debug.OutPut(DEBUG_LEVEL_MSG, "DRV_QUERYCONFIGURE");
		// Sent to determine if the driver can be
		// configured.
		dwRes = 1L;  // Zero indicates configuration
		break;       // NOT supported

	case DRV_CONFIGURE:
		my_debug.OutPut(DEBUG_LEVEL_MSG, "DRV_CONFIGURE");
		// Sent to display the configuration
		// dialog box for the driver.
//		dwRes = Configure( (HWND) lParam1, (LPDRVCONFIGINFO) lParam2 );
		if (my_EncodingProperties.Config(my_hModule, (HWND) lParam1))
		{
			dwRes = DRVCNF_OK; // Can also return
					// DRVCNF_CANCEL
					// and DRVCNF_RESTART
		} else {
			dwRes = DRVCNF_CANCEL;
		}
		break;

	/**************************************
	// ACM additional messages
	***************************************/

	case ACMDM_DRIVER_ABOUT:
		my_debug.OutPut(DEBUG_LEVEL_MSG, "ACMDM_DRIVER_ABOUT");

		dwRes = About( (HWND) lParam1 );

        break;

	case ACMDM_DRIVER_DETAILS: // acmDriverDetails
		// Fill-in general informations about the driver/codec
		my_debug.OutPut(DEBUG_LEVEL_MSG, "ACMDM_DRIVER_DETAILS");

		dwRes = OnDriverDetails(hdrvr, (LPACMDRIVERDETAILS) lParam1);
        
		break;

	case ACMDM_FORMATTAG_DETAILS: // acmFormatTagDetails
		my_debug.OutPut(DEBUG_LEVEL_MSG, "ACMDM_FORMATTAG_DETAILS");

		dwRes = OnFormatTagDetails((LPACMFORMATTAGDETAILS) lParam1, lParam2);

        break;

	case ACMDM_FORMAT_DETAILS: // acmFormatDetails
		my_debug.OutPut(DEBUG_LEVEL_MSG, "ACMDM_FORMAT_DETAILS");

		dwRes = OnFormatDetails((LPACMFORMATDETAILS) lParam1, lParam2);
		
        break;           

    case ACMDM_FORMAT_SUGGEST: // acmFormatSuggest
		// Sent to determine if the driver can be
		// configured.
		my_debug.OutPut(DEBUG_LEVEL_MSG, "ACMDM_FORMAT_SUGGEST");
		dwRes = OnFormatSuggest((LPACMDRVFORMATSUGGEST) lParam1);
        break; 

	/**************************************
	// ACM stream messages
	***************************************/

	case ACMDM_STREAM_OPEN:
	// Sent to determine if the driver can be
	// configured.
		my_debug.OutPut(DEBUG_LEVEL_MSG, "ACMDM_STREAM_OPEN");
		dwRes = OnStreamOpen((LPACMDRVSTREAMINSTANCE) lParam1);
        break; 

	case ACMDM_STREAM_SIZE:
	// returns a recommended size for a source 
	// or destination buffer on an ACM stream
		my_debug.OutPut(DEBUG_LEVEL_MSG, "ACMDM_STREAM_SIZE");
		dwRes = OnStreamSize((LPACMDRVSTREAMINSTANCE)lParam1, (LPACMDRVSTREAMSIZE)lParam2);
        break; 

	case ACMDM_STREAM_PREPARE:
	// prepares an ACMSTREAMHEADER structure for
	// an ACM stream conversion
		my_debug.OutPut(DEBUG_LEVEL_MSG, "ACMDM_STREAM_PREPARE");
		dwRes = OnStreamPrepareHeader((LPACMDRVSTREAMINSTANCE)lParam1, (LPACMSTREAMHEADER) lParam2);
        break; 

	case ACMDM_STREAM_UNPREPARE:
	// cleans up the preparation performed by
	// the ACMDM_STREAM_PREPARE message for an ACM stream
		my_debug.OutPut(DEBUG_LEVEL_MSG, "ACMDM_STREAM_UNPREPARE");
		dwRes = OnStreamUnPrepareHeader((LPACMDRVSTREAMINSTANCE)lParam1, (LPACMSTREAMHEADER) lParam2);
        break; 

	case ACMDM_STREAM_CONVERT:
	// perform a conversion on the specified conversion stream
		my_debug.OutPut(DEBUG_LEVEL_MSG, "ACMDM_STREAM_CONVERT");
		dwRes = OnStreamConvert((LPACMDRVSTREAMINSTANCE)lParam1, (LPACMDRVSTREAMHEADER) lParam2);
		
        break; 

	case ACMDM_STREAM_CLOSE:
	// closes an ACM conversion stream
		my_debug.OutPut(DEBUG_LEVEL_MSG, "ACMDM_STREAM_CLOSE");
		dwRes = OnStreamClose((LPACMDRVSTREAMINSTANCE)lParam1);
        break;

	/**************************************
	// Unknown message
	***************************************/

	default:
	// Process any other messages.
		my_debug.OutPut(DEBUG_LEVEL_MSG, "ACM::DriverProc unknown message (0x%08X), lParam1 = 0x%08X, lParam2 = 0x%08X", msg, lParam1, lParam2);
		return DefDriverProc ((DWORD)this, hdrvr, msg, lParam1, lParam2);
    }

    return dwRes;
}
예제 #15
0
파일: msgsm32.c 프로젝트: dylanahsmith/wine
/**************************************************************************
 * 			GSM_DriverProc			[exported]
 */
LRESULT CALLBACK GSM_DriverProc(DWORD_PTR dwDevID, HDRVR hDriv, UINT wMsg,
					 LPARAM dwParam1, LPARAM dwParam2)
{
    TRACE("(%08lx %p %04x %08lx %08lx);\n",
          dwDevID, hDriv, wMsg, dwParam1, dwParam2);

    switch (wMsg)
    {
    case DRV_LOAD:		return 1;
    case DRV_FREE:		return GSM_drvFree();
    case DRV_OPEN:		return 1;
    case DRV_CLOSE:		return 1;
    case DRV_ENABLE:		return 1;
    case DRV_DISABLE:		return 1;
    case DRV_QUERYCONFIGURE:	return 1;
    case DRV_CONFIGURE:		MessageBoxA(0, "GSM 06.10 codec", "Wine Driver", MB_OK); return 1;
    case DRV_INSTALL:		return DRVCNF_RESTART;
    case DRV_REMOVE:		return DRVCNF_RESTART;

    case ACMDM_DRIVER_NOTIFY:
	/* no caching from other ACM drivers is done so far */
	return MMSYSERR_NOERROR;

    case ACMDM_DRIVER_DETAILS:
	return GSM_DriverDetails((PACMDRIVERDETAILSW)dwParam1);

    case ACMDM_FORMATTAG_DETAILS:
	return GSM_FormatTagDetails((PACMFORMATTAGDETAILSW)dwParam1, dwParam2);

    case ACMDM_FORMAT_DETAILS:
	return GSM_FormatDetails((PACMFORMATDETAILSW)dwParam1, dwParam2);

    case ACMDM_FORMAT_SUGGEST:
	return GSM_FormatSuggest((PACMDRVFORMATSUGGEST)dwParam1);

#ifdef SONAME_LIBGSM
    case ACMDM_STREAM_OPEN:
	return GSM_StreamOpen((PACMDRVSTREAMINSTANCE)dwParam1);

    case ACMDM_STREAM_CLOSE:
	return GSM_StreamClose((PACMDRVSTREAMINSTANCE)dwParam1);

    case ACMDM_STREAM_SIZE:
	return GSM_StreamSize((PACMDRVSTREAMINSTANCE)dwParam1, (PACMDRVSTREAMSIZE)dwParam2);

    case ACMDM_STREAM_CONVERT:
	return GSM_StreamConvert((PACMDRVSTREAMINSTANCE)dwParam1, (PACMDRVSTREAMHEADER)dwParam2);
#else
    case ACMDM_STREAM_OPEN: ERR("libgsm support not compiled in!\n");
    case ACMDM_STREAM_CLOSE:
    case ACMDM_STREAM_SIZE:
    case ACMDM_STREAM_CONVERT:
        return MMSYSERR_NOTSUPPORTED;
#endif

    case ACMDM_HARDWARE_WAVE_CAPS_INPUT:
    case ACMDM_HARDWARE_WAVE_CAPS_OUTPUT:
	/* this converter is not a hardware driver */
    case ACMDM_FILTERTAG_DETAILS:
    case ACMDM_FILTER_DETAILS:
	/* this converter is not a filter */
    case ACMDM_STREAM_RESET:
	/* only needed for asynchronous driver... we aren't, so just say it */
	return MMSYSERR_NOTSUPPORTED;
    case ACMDM_STREAM_PREPARE:
    case ACMDM_STREAM_UNPREPARE:
	/* nothing special to do here... so don't do anything */
	return MMSYSERR_NOERROR;

    default:
	return DefDriverProc(dwDevID, hDriv, wMsg, dwParam1, dwParam2);
    }
}
예제 #16
0
/* This little puppy handles the calls which vfw programs send out to the codec */
LRESULT WINAPI DriverProc( DWORD dwDriverId, HDRVR hDriver, UINT uMsg, LPARAM lParam1, LPARAM lParam2 )
{
    CODEC *codec = (CODEC *)dwDriverId;

    switch( uMsg )
    {
        case DRV_LOAD:
        case DRV_FREE:
            return DRV_OK;

        case DRV_OPEN:
        {
            ICOPEN *icopen = (ICOPEN *)lParam2;

            if( icopen != NULL && icopen->fccType != ICTYPE_VIDEO )
                return DRV_CANCEL;

            if( ( codec = malloc( sizeof( CODEC ) ) ) == NULL )
            {
                if( icopen != NULL )
                    icopen->dwError = ICERR_MEMORY;
                return 0;
            }

            memset( codec, 0, sizeof( CODEC ) );
            config_reg_load( &codec->config );
            codec->h = NULL;

            if( icopen != NULL )
                icopen->dwError = ICERR_OK;
            return (LRESULT)codec;
        }

        case DRV_CLOSE:
            /* From xvid: compress_end/decompress_end don't always get called */
            compress_end(codec);
            free( codec );
            return DRV_OK;

        case DRV_DISABLE:
        case DRV_ENABLE:
            return DRV_OK;

        case DRV_INSTALL:
        case DRV_REMOVE:
            return DRV_OK;

        case DRV_QUERYCONFIGURE:
        case DRV_CONFIGURE:
            return DRV_CANCEL;

        /* info */
        case ICM_GETINFO:
        {
            ICINFO *icinfo = (ICINFO *)lParam1;

            /* return a description */
            icinfo->fccType      = ICTYPE_VIDEO;
            icinfo->fccHandler   = FOURCC_X264;
            icinfo->dwFlags      = VIDCF_COMPRESSFRAMES | VIDCF_FASTTEMPORALC;

            icinfo->dwVersion    = 0;
            icinfo->dwVersionICM = ICVERSION;

            wcscpy( icinfo->szName, X264_NAME_L);
            wcscpy( icinfo->szDescription, X264_DESC_L);

            return lParam2; /* size of struct */
        }

        case ICM_ABOUT:
            if( lParam1 != -1 )
            {
                DialogBoxParam(g_hInst, MAKEINTRESOURCE(IDD_ABOUT), (HWND)lParam1, callback_about, 0 );
            }
            return ICERR_OK;

        case ICM_CONFIGURE:
            if( lParam1 != -1 )
            {
                CONFIG temp;

                codec->config.b_save = FALSE;
                memcpy( &temp, &codec->config, sizeof(CONFIG) );

                DialogBoxParam( g_hInst, MAKEINTRESOURCE(IDD_MAINCONFIG), (HWND)lParam1, callback_main, (LPARAM)&temp );

                if( temp.b_save )
                {
                    memcpy( &codec->config, &temp, sizeof(CONFIG) );
                    config_reg_save( &codec->config );
                }
            }
            return ICERR_OK;

        case ICM_GETSTATE:
            if( (void*)lParam1 == NULL )
            {
                return sizeof( CONFIG );
            }
            memcpy( (void*)lParam1, &codec->config, sizeof( CONFIG ) );
            return ICERR_OK;

        case ICM_SETSTATE:
            if( (void*)lParam1 == NULL )
            {
                config_reg_load( &codec->config );
                return 0;
            }
            memcpy( &codec->config, (void*)lParam1, sizeof( CONFIG ) );
            return 0;

        /* not sure the difference, private/public data? */
        case ICM_GET:
        case ICM_SET:
            return ICERR_OK;


        /* older-stype config */
        case ICM_GETDEFAULTQUALITY:
        case ICM_GETQUALITY:
        case ICM_SETQUALITY:
        case ICM_GETBUFFERSWANTED:
        case ICM_GETDEFAULTKEYFRAMERATE:
            return ICERR_UNSUPPORTED;


        /* compressor */
        case ICM_COMPRESS_QUERY:
            return compress_query(codec, (BITMAPINFO *)lParam1, (BITMAPINFO *)lParam2);

        case ICM_COMPRESS_GET_FORMAT:
            return compress_get_format(codec, (BITMAPINFO *)lParam1, (BITMAPINFO *)lParam2);

        case ICM_COMPRESS_GET_SIZE:
            return compress_get_size(codec, (BITMAPINFO *)lParam1, (BITMAPINFO *)lParam2);

        case ICM_COMPRESS_FRAMES_INFO:
            return compress_frames_info(codec, (ICCOMPRESSFRAMES *)lParam1);

        case ICM_COMPRESS_BEGIN:
            return compress_begin(codec, (BITMAPINFO *)lParam1, (BITMAPINFO *)lParam2);

        case ICM_COMPRESS_END:
            return compress_end(codec);

        case ICM_COMPRESS:
            return compress(codec, (ICCOMPRESS *)lParam1);

        /* decompressor : not implemented */
        case ICM_DECOMPRESS_QUERY:
        case ICM_DECOMPRESS_GET_FORMAT:
        case ICM_DECOMPRESS_BEGIN:
        case ICM_DECOMPRESS_END:
        case ICM_DECOMPRESS:
        case ICM_DECOMPRESS_GET_PALETTE:
        case ICM_DECOMPRESS_SET_PALETTE:
        case ICM_DECOMPRESSEX_QUERY:
        case ICM_DECOMPRESSEX_BEGIN:
        case ICM_DECOMPRESSEX_END:
        case ICM_DECOMPRESSEX:
            return ICERR_UNSUPPORTED;

        default:
        if (uMsg < DRV_USER)
            return DefDriverProc(dwDriverId, hDriver, uMsg, lParam1, lParam2);
        else 
            return ICERR_UNSUPPORTED;
    }
}
예제 #17
0
BGBBTJ_API LRESULT WINAPI DriverProc(
	DWORD_PTR dwDriverId, 
	HDRVR hDriver, 
	UINT uMsg, 
	LPARAM lParam1, 
	LPARAM lParam2) 
{
	ICOPEN * icopen;
	ICINFO *icinfo;
	BGBBTJ_VidCodecCTX *ctx;
	
	ctx=(BGBBTJ_VidCodecCTX *)dwDriverId;

//	BTJPG_DriverInit();
//	btjpg_printf("DriverProc: %d %p %p\n",
//		uMsg, (void *)lParam1, (void *)lParam2);

	switch(uMsg)
	{
	case DRV_LOAD:
	case DRV_FREE:
		return(DRVCNF_OK);

	case DRV_OPEN:
		btjpg_printf("DriverProc: DRV_OPEN: %d %p %p\n",
			uMsg, (void *)lParam1, (void *)lParam2);

		icopen=(ICOPEN *)lParam2;
		if(icopen && (icopen->fccType!=ICTYPE_VIDEO))
			{ return(DRVCNF_CANCEL); }

		if(icopen)
		{
			btjpg_printf("\tdwSize=%d\n", icopen->dwSize);
			btjpg_printf("\tfccType=0x%08X (%.4s)\n",
				icopen->fccType, &(icopen->fccType));
			btjpg_printf("\tfccHandler=0x%08X (%.4s)\n",
				icopen->fccHandler, &(icopen->fccHandler));
			btjpg_printf("\tdwVersion=0x%08X\n", icopen->dwVersion);
			btjpg_printf("\tdwFlags=0x%08X\n", icopen->dwFlags);
			btjpg_printf("\tdwError=0x%08X\n", icopen->dwError);
			btjpg_printf("\tpV1Reserved=%p\n", icopen->pV1Reserved);
			btjpg_printf("\tpV2Reserved=%p\n", icopen->pV2Reserved);
			btjpg_printf("\tdnDevNode=0x%08X\n", icopen->dnDevNode);
		}

		BTJPG_DriverInit();

//		ctx = malloc(sizeof(CODEC));
		ctx=BGBBTJ_VidCodecCTX_New();
		ctx->viFlags=0;

		if(!ctx)
		{
			if(icopen)
				{ icopen->dwError = ICERR_MEMORY; }
			return(0);
		}

//		ctx->viQuality=75*100;
		ctx->viQuality=100*100;

		if(icopen)
		{
			if((icopen->dwFlags&ICMODE_FASTCOMPRESS)==ICMODE_FASTCOMPRESS)
				{ ctx->viFlags|=BGBBTJ_VIFL_FASTENCODE; }
			if((icopen->dwFlags&ICMODE_FASTDECOMPRESS)==ICMODE_FASTDECOMPRESS)
				{ ctx->viFlags|=BGBBTJ_VIFL_FASTDECODE; }
			icopen->dwError=ICERR_OK;
		}
		return((LRESULT)ctx);

	case DRV_CLOSE :
//		compress_end(ctx);
//		decompress_end(ctx);
//		clean_dll_bindings(ctx);
//		status_destroy_always(&ctx->status);
//		free(ctx);
		BGBBTJ_VidCodecCTX_Destroy(ctx);
		BTJPG_DriverDeinit();
		return(DRVCNF_OK);

	case DRV_DISABLE:
	case DRV_ENABLE:
		return(DRVCNF_OK);

	case DRV_INSTALL:
	case DRV_REMOVE:
		return(DRVCNF_OK);

	case DRV_QUERYCONFIGURE:
	case DRV_CONFIGURE:
		return(DRVCNF_CANCEL);

	case ICM_GETINFO:
		btjpg_printf("ICM_GETINFO: %p %p\n",
			(void *)lParam1, (void *)lParam2);

		if (lParam1 && (lParam2>=sizeof(ICINFO)))
		{
			icinfo = (ICINFO *)lParam1;

			icinfo->fccType = ICTYPE_VIDEO;
			icinfo->fccHandler = RIFF_TAG_BTIC;
			icinfo->dwFlags =
				VIDCF_FASTTEMPORALC |
				VIDCF_FASTTEMPORALD |
				VIDCF_QUALITY |
				VIDCF_TEMPORAL |
				VIDCF_COMPRESSFRAMES;

			icinfo->dwVersion = 0;
#if !defined(ICVERSION)
#define ICVERSION       0x0104
#endif
			icinfo->dwVersionICM = ICVERSION;
			
//			wcscpy(icinfo->szName, XVID_NAME_L); 
//			wcscpy(icinfo->szDescription, XVID_DESC_L);

			wcscpy(icinfo->szName, L"BTIC"); 
			wcscpy(icinfo->szDescription, L"BGBTech Image Codec");
						
			return(lParam2);
		}

		return(0);
		
	case ICM_ABOUT :
		btjpg_printf("ICM_ABOUT: %p %p\n",
			(void *)lParam1, (void *)lParam2);
		return(ICERR_UNSUPPORTED);
//		DialogBoxParam(g_hInst,
//			MAKEINTRESOURCE(IDD_ABOUT),
//			(HWND)lParam1, about_proc, 0);
//		return(ICERR_OK);

	case ICM_CONFIGURE:
	case ICM_GETSTATE:
	case ICM_SETSTATE:
		btjpg_printf("ICM_CONFIGURE: %p %p\n",
			(void *)lParam1, (void *)lParam2);
		return(ICERR_UNSUPPORTED);

	case ICM_GET:
		btjpg_printf("ICM_GET: %p %p\n",
			(void *)lParam1, (void *)lParam2);
		return(ICERR_UNSUPPORTED);
	case ICM_SET:
		btjpg_printf("ICM_SET: %p %p\n",
			(void *)lParam1, (void *)lParam2);
		return(ICERR_UNSUPPORTED);

	case ICM_GETDEFAULTQUALITY:
		btjpg_printf("ICM_GETDEFAULTQUALITY: %p %p\n",
			(void *)lParam1, (void *)lParam2);
		*(DWORD *)lParam1=90*100;
		return(ICERR_OK);
	case ICM_GETQUALITY:
		btjpg_printf("ICM_GETQUALITY: %p %p\n",
			(void *)lParam1, (void *)lParam2);
		*(DWORD *)lParam1=ctx->viQuality;
		return(ICERR_OK);
	case ICM_SETQUALITY:
		btjpg_printf("ICM_SETQUALITY: %p %p\n",
			(void *)lParam1, (void *)lParam2);
		ctx->viQuality=*(DWORD *)lParam1;
		btjpg_printf("ICM_SETQUALITY: Q=%d%%\n",
			ctx->viQuality/100);
		return(ICERR_OK);

	case ICM_GETBUFFERSWANTED:
		btjpg_printf("ICM_GETBUFFERSWANTED: %p %p\n",
			(void *)lParam1, (void *)lParam2);
		ctx->viQuality=*(DWORD *)lParam1;
		return(ICERR_UNSUPPORTED);

	case ICM_GETDEFAULTKEYFRAMERATE:
		btjpg_printf("ICM_GETDEFAULTKEYFRAMERATE: %p %p\n",
			(void *)lParam1, (void *)lParam2);
		ctx->viQuality=*(DWORD *)lParam1;
		return(ICERR_UNSUPPORTED);

	case ICM_COMPRESS_QUERY:
		return(btjvfw_compress_query(ctx,
			(BITMAPINFO *)lParam1, (BITMAPINFO *)lParam2));
	case ICM_COMPRESS_GET_FORMAT:
		return(btjvfw_compress_get_format(ctx,
			(BITMAPINFO *)lParam1, (BITMAPINFO *)lParam2));
	case ICM_COMPRESS_GET_SIZE:
		return(btjvfw_compress_get_size(ctx,
			(BITMAPINFO *)lParam1, (BITMAPINFO *)lParam2));
	case ICM_COMPRESS_FRAMES_INFO:
		return(btjvfw_compress_frames_info(ctx,
			(ICCOMPRESSFRAMES *)lParam1));
	case ICM_COMPRESS_BEGIN:
		return(btjvfw_compress_begin(ctx,
			(BITMAPINFO *)lParam1, (BITMAPINFO *)lParam2));
	case ICM_COMPRESS_END:
		return(btjvfw_compress_end(ctx));
	case ICM_COMPRESS:
		return(btjvfw_compress(ctx, (ICCOMPRESS *)lParam1));

	case ICM_DECOMPRESS_QUERY:
		return(btjvfw_decompress_query(ctx,
			(BITMAPINFO *)lParam1, (BITMAPINFO *)lParam2));
	case ICM_DECOMPRESS_GET_FORMAT:
		return(btjvfw_decompress_get_format(ctx,
			(BITMAPINFO *)lParam1, (BITMAPINFO *)lParam2));
	case ICM_DECOMPRESS_BEGIN:
		return(btjvfw_decompress_begin(ctx,
			(BITMAPINFO *)lParam1, (BITMAPINFO *)lParam2));
	case ICM_DECOMPRESS_END:
		return(btjvfw_decompress_end(ctx));
	case ICM_DECOMPRESS:
		return(btjvfw_decompress(ctx, (ICDECOMPRESS *)lParam1));

	case ICM_DECOMPRESS_GET_PALETTE:
		btjpg_printf("ICM_DECOMPRESS_GET_PALETTE: %p %p\n",
			(void *)lParam1, (void *)lParam2);
		return(ICERR_UNSUPPORTED);
	case ICM_DECOMPRESS_SET_PALETTE:
		btjpg_printf("ICM_DECOMPRESS_SET_PALETTE: %p %p\n",
			(void *)lParam1, (void *)lParam2);
		return(ICERR_UNSUPPORTED);

	case ICM_DECOMPRESSEX_QUERY:
	case ICM_DECOMPRESSEX_BEGIN:
	case ICM_DECOMPRESSEX_END:
	case ICM_DECOMPRESSEX:
		btjpg_printf("ICM_DECOMPRESSEX: %p %p\n",
			(void *)lParam1, (void *)lParam2);
		return(ICERR_UNSUPPORTED);

    /* VFWEXT entry point */
    case ICM_USER+0x0fff :
		btjpg_printf("ICM_USER: %p %p\n",
			(void *)lParam1, (void *)lParam2);
        return(ICERR_UNSUPPORTED);

	default:
		btjpg_printf("Default: %d %p %p\n", uMsg,
			(void *)lParam1, (void *)lParam2);
		if(uMsg<DRV_USER)
		{
			return(DefDriverProc(dwDriverId,
				hDriver, uMsg, lParam1, lParam2));
		}
		else 
			{ return(ICERR_UNSUPPORTED); }
	}
}
예제 #18
0
LPARAM YUVCodecDriver::Default(DWORD dwDriverID, HDRVR hDriver, UINT uiMessage, LPARAM lParam1, LPARAM lParam2) {
	return DefDriverProc(dwDriverID, hDriver, uiMessage, lParam1, lParam2);
}
예제 #19
0
LONG WINAPI DriverProc(DWORD dwDriverId, HDRVR hdrvr, UINT msg, LONG lParam1, LONG lParam2)
{

	switch (msg)
	{
		case DRV_OPEN: // acmDriverOpen
		{
			if (debug == NULL) {
				debug = new ADbg(DEBUG_LEVEL_CREATION);
				debug->setPrefix("LAMEdrv");
			}

			if (debug != NULL)
			{
				// Sent when the driver is opened.
				if (lParam2 != NULL)
					debug->OutPut(DEBUG_LEVEL_MSG, "DRV_OPEN (ID 0x%08X), pDesc = 0x%08X",dwDriverId,lParam2);
				else
					debug->OutPut(DEBUG_LEVEL_MSG, "DRV_OPEN (ID 0x%08X), pDesc = NULL",dwDriverId);
			}

			if (lParam2 != NULL) {
				LPACMDRVOPENDESC pDesc = (LPACMDRVOPENDESC)lParam2;

				if (pDesc->fccType != ACMDRIVERDETAILS_FCCTYPE_AUDIOCODEC) {
					if (debug != NULL)
					{
						debug->OutPut(DEBUG_LEVEL_FUNC_CODE, "wrong pDesc->fccType (0x%08X)",pDesc->fccType);
					}
					return NULL;
				}
			} else {
				if (debug != NULL)
				{
					debug->OutPut(DEBUG_LEVEL_FUNC_CODE, "pDesc == NULL");
				}
			}

			ACM * ThisACM = new ACM(GetDriverModuleHandle(hdrvr));

			if (debug != NULL)
			{
				debug->OutPut(DEBUG_LEVEL_FUNC_CODE, "OPENED instance 0x%08X",ThisACM);
			}

			return (LONG)ThisACM;// returns 0L to fail
								// value subsequently used
								// for dwDriverId.
		}
		break;

		case DRV_CLOSE: // acmDriverClose
		{
			if (debug != NULL)
			{
				// Sent when the driver is closed. Drivers are
				// unloaded when the open count reaches zero.
				debug->OutPut(DEBUG_LEVEL_MSG, "DRV_CLOSE");
			}

			ACM * ThisACM = (ACM *)dwDriverId;
			delete ThisACM;
			if (debug != NULL)
			{
				debug->OutPut(DEBUG_LEVEL_FUNC_CODE, "CLOSED instance 0x%08X",ThisACM);
				delete debug;
				debug = NULL;
			}
			return 1L;  // returns 0L to fail
		}
		break;

		case DRV_LOAD:
		{
			// nothing to do
			if (debug != NULL)
			{
//				debug->OutPut(DEBUG_LEVEL_MSG, "DRV_LOAD, version %s %s %s", ACM_VERSION, __DATE__, __TIME__);
				debug->OutPut(DEBUG_LEVEL_MSG, "DRV_LOAD, %s %s",  __DATE__, __TIME__);
			}
			return 1L;
		}
		break;

		case DRV_ENABLE:
		{
			// nothing to do
			if (debug != NULL)
			{
				debug->OutPut(DEBUG_LEVEL_MSG, "DRV_ENABLE");
			}
			return 1L;
		}
		break;

		case DRV_DISABLE:
		{
			// nothing to do
			if (debug != NULL)
			{
				debug->OutPut(DEBUG_LEVEL_MSG, "DRV_DISABLE");
			}
			return 1L;
		}
		break;

		case DRV_FREE:
		{
			if (debug != NULL)
			{
				debug->OutPut(DEBUG_LEVEL_MSG, "DRV_FREE");
			}
			return 1L;
		}
		break;

		default:
		{
			ACM * ThisACM = (ACM *)dwDriverId;

			if (ThisACM != NULL)
				return ThisACM->DriverProcedure(hdrvr, msg, lParam1, lParam2);
			else
			{
				if (debug != NULL)
				{
					debug->OutPut(DEBUG_LEVEL_MSG, "Driver not opened, unknown message (0x%08X), lParam1 = 0x%08X, lParam2 = 0x%08X", msg, lParam1, lParam2);
				}

				return DefDriverProc (dwDriverId, hdrvr, msg, lParam1, lParam2);
			}
		}
		break;
	}
}
예제 #20
0
파일: sndblst.c 프로젝트: GYGit/reactos
LONG APIENTRY
DriverProc(
    DWORD DriverId,
    HANDLE DriverHandle,
    UINT Message,
    LONG Parameter1,
    LONG Parameter2)
{
    MMRESULT Result;

    switch ( Message )
    {
        case DRV_LOAD :
        {
            SND_TRACE(L"DRV_LOAD\n");

            Result = InitEntrypointMutexes();

            if ( ! MMSUCCESS(Result) )
                return 0L;

            Result = EnumerateNt4ServiceSoundDevices(L"sndblst",
                                                     0,
                                                     FoundDevice);

            if ( ! MMSUCCESS(Result) )
            {
                CleanupEntrypointMutexes();

                UnlistAllSoundDevices();

                return 0L;
            }

/*
            PSOUND_DEVICE snd;
            GetSoundDevice(WAVE_OUT_DEVICE_TYPE, 0, &snd);
            GetSoundDevice(AUX_DEVICE_TYPE, 0, &snd);
            GetSoundDevice(AUX_DEVICE_TYPE, 1, &snd);
            GetSoundDevice(AUX_DEVICE_TYPE, 2, &snd);
*/

            SND_TRACE(L"Initialisation complete\n");

            return 1L;
        }

        case DRV_FREE :
        {
            SND_TRACE(L"DRV_FREE\n");

            /* TODO: Clean up the path names! */
            UnlistAllSoundDevices();

            CleanupEntrypointMutexes();

            SND_TRACE(L"Unfreed memory blocks: %d\n",
                      GetMemoryAllocationCount());

            return 1L;
        }

        case DRV_ENABLE :
        case DRV_DISABLE :
        {
            SND_TRACE(L"DRV_ENABLE / DRV_DISABLE\n");
            return 1L;
        }

        case DRV_OPEN :
        case DRV_CLOSE :
        {
            SND_TRACE(L"DRV_OPEN / DRV_CLOSE\n");
            return 1L;
        }

        case DRV_QUERYCONFIGURE :
        {
            SND_TRACE(L"DRV_QUERYCONFIGURE");
            return 0L;
        }
        case DRV_CONFIGURE :
            return DRVCNF_OK;

        default :
            SND_TRACE(L"Unhandled message %d\n", Message);
            return DefDriverProc(DriverId,
                                 DriverHandle,
                                 Message,
                                 Parameter1,
                                 Parameter2);
    }
}
예제 #21
0
LRESULT	CALLBACK
DriverProc(DWORD dwDriverID,
	HDRVR hDriver,
	UINT uMsg,
	LPARAM lParam1,
	LPARAM lParam2)
{
	LPDRVCONFIGINFO lpDrvConfigInfo;
	LPSTR lpszOpenParam;
	DWORD dwOpenParam;
	DWORD dwCloseParam1, dwCloseParam2;
	HWND hConfigWndParent;

	LPMCI_OPEN_DRIVER_PARMS lpMciOpenDriverParms;
	DWORD dwMciOpenFlags;
	LPMCI_OPEN_PARMS lpMciOpenParms;
	DWORD dwMciGenericFlags;
	LPMCI_GENERIC_PARMS lpMciGenericParms;
	DWORD dwMciGetDevCapsFlags;
	LPMCI_GETDEVCAPS_PARMS lpMciGetDevCapsParms;
	DWORD dwMciInfoFlags;
	LPMCI_INFO_PARMS lpMciInfoParms;
	DWORD dwMciStatusFlags;
	LPMCI_STATUS_PARMS lpMciStatusParms;

	switch (uMsg)
	{
	case DRV_INSTALL:
		lpDrvConfigInfo = (LPDRVCONFIGINFO) lParam2;
		return XXXX_Install(dwDriverID, hDriver,
			lpDrvConfigInfo);
	case DRV_REMOVE:
		return XXXX_Remove(dwDriverID, hDriver);
	case DRV_LOAD:
		return XXXX_Load(dwDriverID, hDriver);
	case DRV_FREE:
		return XXXX_Free(dwDriverID, hDriver);
	case DRV_ENABLE:
		return XXXX_Enable(dwDriverID, hDriver);
	case DRV_DISABLE:
		return XXXX_Disable(dwDriverID, hDriver);
	case DRV_OPEN:
		lpszOpenParam = (LPSTR) lParam1;
		dwOpenParam = (DWORD) lParam2;
		lpMciOpenDriverParms = (LPMCI_OPEN_DRIVER_PARMS) dwOpenParam;
		return XXXX_mciOpen(dwDriverID, hDriver,
			lpszOpenParam, lpMciOpenDriverParms);
	case DRV_CLOSE:
		dwCloseParam1 = (DWORD) lParam1;
		dwCloseParam2 = (DWORD) lParam2;
		return XXXX_Close(dwDriverID, hDriver,
			dwCloseParam1, dwCloseParam2);
	case DRV_QUERYCONFIGURE:
		return XXXX_QueryConfigure(dwDriverID, hDriver);
	case DRV_CONFIGURE:
		hConfigWndParent = (HWND) lParam1;
		lpDrvConfigInfo = (LPDRVCONFIGINFO) lParam2;
		return XXXX_Configure(dwDriverID, hDriver,
			hConfigWndParent, lpDrvConfigInfo);
	case MCI_OPEN_DRIVER:
		dwMciOpenFlags = (DWORD) lParam1;
		lpMciOpenParms = (LPMCI_OPEN_PARMS) lParam2;
		return XXXX_mciOpenDriver(dwDriverID, hDriver,
			dwMciOpenFlags, lpMciOpenParms);
	case MCI_CLOSE_DRIVER:
		dwMciGenericFlags = (DWORD) lParam1;
		lpMciGenericParms = (LPMCI_GENERIC_PARMS) lParam2;
		return XXXX_mciCloseDriver(dwDriverID, hDriver,
			dwMciGenericFlags, lpMciGenericParms);
	case MCI_GETDEVCAPS:
		dwMciGetDevCapsFlags = (DWORD) lParam1;
		lpMciGetDevCapsParms = (LPMCI_GETDEVCAPS_PARMS) lParam2;
		return XXXX_mciGetDevCaps(dwDriverID, hDriver,
			dwMciGetDevCapsFlags, lpMciGetDevCapsParms);
	case MCI_INFO:
		dwMciInfoFlags = (DWORD) lParam1;
		lpMciInfoParms = (LPMCI_INFO_PARMS) lParam2;
		return XXXX_mciInfo(dwDriverID, hDriver,
			dwMciInfoFlags, lpMciInfoParms);
	case MCI_STATUS:
		dwMciStatusFlags = (DWORD) lParam1;
		lpMciStatusParms = (LPMCI_STATUS_PARMS) lParam2;
		return XXXX_mciStatus(dwDriverID, hDriver,
			dwMciStatusFlags, lpMciStatusParms);
	}

	return DefDriverProc(dwDriverID, hDriver, uMsg, lParam1, lParam2);

}
예제 #22
0
// this is the drawproc that vfw calls.  It basically just hands
// stuff off to other functions later in this file.  A few things
// are handled here.  This is message-handling proc just like a
// Window Proc or a VBX Control Proc...
LONG FAR PASCAL _export ICAVIDrawProc(DWORD id, HDRVR hDriver,
	UINT uiMessage, LPARAM lParam1, LPARAM lParam2)
{
	PINSTINFO pi = (PINSTINFO)id;

	switch (uiMessage)
	{
	case DRV_LOAD:
	case DRV_FREE:
		return 1;
	
	case DRV_OPEN:
		if (lParam2 == 0L)
		{
			// Uh-oh, no data to use...
			return 1;
		}
		return AVIDrawOpen((ICOPEN FAR *)lParam2);
	
	case DRV_CLOSE:
		return AVIDrawClose(pi);
	
	case DRV_QUERYCONFIGURE:
		return 0;
	case DRV_CONFIGURE:
		return 1;
	case ICM_CONFIGURE:
	case ICM_ABOUT:
		return ICERR_UNSUPPORTED;
	case ICM_GETSTATE:
		return 0L;
		
	case ICM_GETINFO:
		return AVIDrawGetInfo((ICINFO FAR *)lParam1, lParam2);
	
	case ICM_DRAW_QUERY:
		return AVIDrawQuery(pi, (LPBITMAPINFOHEADER)lParam1);
	
	case ICM_DRAW_SUGGESTFORMAT:
		return AVIDrawSuggestFormat(pi, (ICDRAWSUGGEST FAR *) lParam1, lParam2);
	
	case ICM_DRAW_BEGIN:
		return AVIDrawBegin(pi, (ICDRAWBEGIN FAR *) lParam1, lParam2);
	
	case ICM_DRAW_REALIZE:
		pi->hdc = (HDC) lParam1;
		if (!pi->hdc || !pi->hdd)
		{
			// we aren't initialized yet.
			break;
		}
		return DrawDibRealize(pi->hdd, pi->hdc, (BOOL) lParam2);
	
	case ICM_DRAW_GET_PALETTE:
		if (!pi->hdd)
		{
			break;
		}
		return (LONG) (UINT) DrawDibGetPalette(pi->hdd);
	
	case ICM_DRAW:
		return AVIDraw(pi, (ICDRAW FAR *)lParam1, lParam2);
	
	case ICM_DRAW_CHANGEPALETTE:
		return AVIDrawChangePalette(pi, (LPBITMAPINFOHEADER) lParam1);
	
	case ICM_DRAW_END:
		return AVIDrawEnd(pi);
	
	case DRV_DISABLE:
	case DRV_ENABLE:
		return 1;
	case DRV_INSTALL:
	case DRV_REMOVE:
		return 1;
	}
	if (uiMessage < DRV_USER)
	{
		return DefDriverProc(id,hDriver,uiMessage,lParam1,lParam2);
	}
	else
	{
		return ICERR_UNSUPPORTED;
	}
}
예제 #23
0
LONG
FAR PASCAL
DriverProc(
    DWORD driver_id,
    HDRVR driver_handle,
    UINT message,
    LONG parameter1,
    LONG parameter2)
{
    switch ( message )
    {
        case DRV_LOAD :
            DPRINT("DRV_LOAD\n");
            the_device = NULL;
            return 1L;

        case DRV_FREE :
            DPRINT("DRV_FREE\n");
            return 1L;

        case DRV_OPEN :
            DPRINT("DRV_OPEN\n");
            InitializeCriticalSection(&device_lock);
            return 1L;

        case DRV_CLOSE :
            DPRINT("DRV_CLOSE\n");
            return 1L;

        case DRV_ENABLE :
            DPRINT("DRV_ENABLE\n");
            return 1L;

        case DRV_DISABLE :
            DPRINT("DRV_DISABLE\n");
            return 1L;

        /*
            We don't provide configuration capabilities. This used to be
            for things like I/O port, IRQ, DMA settings, etc.
        */

        case DRV_QUERYCONFIGURE :
            DPRINT("DRV_QUERYCONFIGURE\n");
            return 0L;

        case DRV_CONFIGURE :
            DPRINT("DRV_CONFIGURE\n");
            return 0L;

        case DRV_INSTALL :
            DPRINT("DRV_INSTALL\n");
            return DRVCNF_RESTART;
    };

    DPRINT("???\n");

    return DefDriverProc(driver_id,
                         driver_handle,
                         message,
                         parameter1,
                         parameter2);
}