NDIS_STATUS MiniportInitialize ( IN NDIS_HANDLE MiniportAdapterHandle, IN NDIS_HANDLE MiniportDriverContext, IN PNDIS_MINIPORT_INIT_PARAMETERS MiniportInitParameters ) { PADAPTER adapter = NULL; NDIS_STATUS ndisStatus; PDEVICE_OBJECT pdo; NTSTATUS status; UNREFERENCED_PARAMETER(MiniportDriverContext); UNREFERENCED_PARAMETER(MiniportInitParameters); Trace("====>\n"); status = AllocAdapter(&adapter); if (!NT_SUCCESS(status) || adapter == NULL) { ndisStatus = NDIS_STATUS_RESOURCES; goto exit; } RtlZeroMemory(adapter, sizeof (ADAPTER)); pdo = NULL; NdisMGetDeviceProperty(MiniportAdapterHandle, &pdo, NULL, NULL, NULL, NULL); status = QueryVifInterface(pdo, adapter); if (!NT_SUCCESS(status)) { ndisStatus = NDIS_STATUS_ADAPTER_NOT_FOUND; goto exit; } adapter->AcquiredInterfaces = TRUE; ndisStatus = AdapterInitialize(adapter, MiniportAdapterHandle); if (ndisStatus != NDIS_STATUS_SUCCESS) { goto exit; } exit: if (ndisStatus != NDIS_STATUS_SUCCESS) { if (adapter != NULL) { AdapterDelete(&adapter); } } Trace("<====\n"); return ndisStatus; }
int InitializeVideoDecoder(VideoDecoder* pDecoder, VideoStreamInfo* pVideoInfo, VConfig* pVconfig) { VideoDecoderContext* p; int nStreamBufferSize; int i = 0; logv("InitializeVideoDecoder, pDecoder=%p, pVideoInfo=%p", pDecoder, pVideoInfo); p = (VideoDecoderContext*)pDecoder; //* check codec format. if(pVideoInfo->eCodecFormat > VIDEO_CODEC_FORMAT_MAX || pVideoInfo->eCodecFormat < VIDEO_CODEC_FORMAT_MIN) { loge("codec format(0x%x) invalid.", pVideoInfo->eCodecFormat); return -1; } // SecureMemAdapterOpen(); // SecureMemAdapterClose(); if(AdapterInitialize() != 0) { loge("can not set up video engine runtime environment."); return 0; } //* print video stream information. { logv("Video Stream Information:"); logv(" codec = %s", strCodecFormat[pVideoInfo->eCodecFormat - VIDEO_CODEC_FORMAT_MIN]); logv(" width = %d pixels", pVideoInfo->nWidth); logv(" height = %d pixels", pVideoInfo->nHeight); logv(" frame rate = %d", pVideoInfo->nFrameRate); logv(" frame duration = %d us", pVideoInfo->nFrameDuration); logv(" aspect ratio = %d", pVideoInfo->nAspectRatio); logv(" csd data len = %d", pVideoInfo->nCodecSpecificDataLen); } //* save the video stream information. p->videoStreamInfo.eCodecFormat = pVideoInfo->eCodecFormat; p->videoStreamInfo.nWidth = pVideoInfo->nWidth; p->videoStreamInfo.nHeight = pVideoInfo->nHeight; p->videoStreamInfo.nFrameRate = pVideoInfo->nFrameRate; p->videoStreamInfo.nFrameDuration = pVideoInfo->nFrameDuration; p->videoStreamInfo.nAspectRatio = pVideoInfo->nAspectRatio; p->videoStreamInfo.nCodecSpecificDataLen = pVideoInfo->nCodecSpecificDataLen; if(p->videoStreamInfo.nCodecSpecificDataLen > 0) { int nSize = p->videoStreamInfo.nCodecSpecificDataLen; char* pMem = (char*)malloc(nSize); if(pMem == NULL) { p->videoStreamInfo.nCodecSpecificDataLen = 0; loge("memory alloc fail."); return -1; } memcpy(pMem, pVideoInfo->pCodecSpecificData, nSize); p->videoStreamInfo.pCodecSpecificData = pMem; } memcpy(&p->vconfig, pVconfig, sizeof(VConfig)); //* create stream buffer. nStreamBufferSize = DecideStreamBufferSize(p); p->pSbm = SbmCreate(nStreamBufferSize); if(p->pSbm == NULL) { loge("create stream buffer fail."); return -1; } //* check and fix the configuration for decoder. // CheckConfiguration(p); //* create video engine. AdapterLockVideoEngine(); p->pVideoEngine = VideoEngineCreate(&p->vconfig, &p->videoStreamInfo); AdapterUnLockVideoEngine(); if(p->pVideoEngine == NULL) { loge("create video engine fail."); return -1; } //* set stream buffer to video engine. AdapterLockVideoEngine(); VideoEngineSetSbm(p->pVideoEngine, p->pSbm, i); AdapterUnLockVideoEngine(); return 0; }
NDIS_STATUS MiniportInitialize ( IN NDIS_HANDLE MiniportAdapterHandle, IN NDIS_HANDLE MiniportDriverContext, IN PNDIS_MINIPORT_INIT_PARAMETERS MiniportInitParameters ) { PADAPTER adapter = NULL; NDIS_STATUS ndisStatus; PCHAR path; PDEVICE_OBJECT pdo; PCHAR xenbusPath = NULL; int i; UNREFERENCED_PARAMETER(MiniportDriverContext); UNREFERENCED_PARAMETER(MiniportInitParameters); TraceVerbose(("====> '%s'.\n", __FUNCTION__)); // // Wait for xenbus to come up. SMP guests sometimes try and // initialise xennet and xenvbd in parallel when they come back // from hibernation, and that causes problems. // if (!xenbus_await_initialisation()) { ndisStatus = NDIS_STATUS_DEVICE_FAILED; goto exit; } // // 8021P support is disabled by default. // It can be turned on by specifying the appropriate PV boot option. // if (XenPVFeatureEnabled(DEBUG_NIC_8021_P)) { XennetMacOptions |= NDIS_MAC_OPTION_8021P_PRIORITY; } xenbus_write(XBT_NIL, "drivers/xenwnet", XENNET_VERSION); NdisMGetDeviceProperty(MiniportAdapterHandle, &pdo, NULL, NULL, NULL, NULL); xenbusPath = xenbus_find_frontend(pdo); if (!xenbusPath) { ndisStatus = NDIS_STATUS_ADAPTER_NOT_FOUND; goto exit; } TraceNotice(("Found '%s' frontend.\n", xenbusPath)); adapter = XmAllocateZeroedMemory(sizeof(ADAPTER)); if (adapter == NULL) { ndisStatus = NDIS_STATUS_RESOURCES; goto exit; } path = xenbusPath; xenbusPath = NULL; i = 0; do { ndisStatus = AdapterInitialize(adapter, MiniportAdapterHandle, path); if (ndisStatus != NDIS_STATUS_SUCCESS) { TraceWarning (("Waiting for backend...\n")); NdisMSleep (1000000); // 1 sec } } while ((ndisStatus != NDIS_STATUS_SUCCESS) && (++i < 30)); if (ndisStatus != NDIS_STATUS_SUCCESS) { goto exit; } exit: if (ndisStatus != NDIS_STATUS_SUCCESS) { if (adapter) { XmFreeMemory(adapter->BackendPath); adapter->BackendPath = NULL; AdapterDelete(&adapter); } if (xenbusPath) { XmFreeMemory(xenbusPath); } } TraceVerbose(("<==== '%s'.\n", __FUNCTION__)); return ndisStatus; }