亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? device.cpp

?? ATI顯卡Windows驅動
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
//==========================================================================;
//
//	Device - Implementation of the Bt829 CVideoDecoderDevice
//
//		$Date:   28 Aug 1998 14:44:20  $
//	$Revision:   1.2  $
//	  $Author:   Tashjian  $
//
// $Copyright:	(c) 1997 - 1998  ATI Technologies Inc.  All Rights Reserved.  $
//
//==========================================================================;

#include "register.h"
#include "defaults.h"
#include "device.h"
#include "mediums.h"
#include "capdebug.h"
#include "StrmInfo.h"

#include "initguid.h"
DEFINE_GUID(DDVPTYPE_BROOKTREE,     0x1352A560L,0xDA61,0x11CF,0x9B,0x06,0x00,0xA0,0xC9,0x03,0xA3,0xB8);


// #define BT829_VPCONNECTIONS_NUMBER  2
#define BT829_VPCONNECTIONS_NUMBER  1
#define BT829_PIXELFORMATS_NUMBER   1
#define NTSC_FRAME_RATE 30
#define PAL_FRAME_RATE 25
#define BT829_LOST_LINES	2  // BT829
#define BT829A_LOST_LINES	3   // BT829a


Device::Device( PPORT_CONFIGURATION_INFORMATION ConfigInfo,
			    PDEVICE_PARMS pDeviceParms, 
				PUINT puiError) :

		m_pDeviceParms(pDeviceParms),

        // Corresponds to KS_DEFAULTs
        hue(128),
        saturation(128),
        contrast(128),
        brightness(128),
        source(ConTuner),
        VBIEN(FALSE),
        VBIFMT(FALSE),

        // Beware of these hardcoded values

        //Paul:  Setup default for NTSC and PAL
        NTSCDecoderWidth(720),
        NTSCDecoderHeight(240),
        PALDecoderWidth(720),
        PALDecoderHeight(288),
        // Now set via registry
        defaultDecoderWidth(720),
        defaultDecoderHeight(240)
{
	*puiError = 0;

    RegisterB devRegIDCODE (0x17, RO, pDeviceParms);
    RegField devFieldPART_ID (devRegIDCODE, 4, 4);
    RegField devFieldPART_REV (devRegIDCODE, 0, 4);

    m_pDeviceParms->chipID = (int)devFieldPART_ID;
    m_pDeviceParms->chipRev = (int)devFieldPART_REV;

	DBGINFO(("Chip ID: 0x%x\n", m_pDeviceParms->chipID));
	DBGINFO(("Chip revision: 0x%x\n", m_pDeviceParms->chipRev));

    // Bt829 should have a PartID of 1110b (0xe).
    if (m_pDeviceParms->chipID != 0xe)
    {
		DBGERROR(("I2c failure or wrong decoder.\n"));
		*puiError = 1;
        return;
    }

    PDEVICE_DATA_EXTENSION pHwExt = (PDEVICE_DATA_EXTENSION)ConfigInfo->HwDeviceExtension;
    decoder = (Decoder *)	new ((PVOID)&pHwExt->CDecoder) Decoder(m_pDeviceParms);
    scaler =  (Scaler *)	new ((PVOID)&pHwExt->CScaler) Scaler(m_pDeviceParms);
    xbar =	  (CrossBar *)	new ((PVOID)&pHwExt->CXbar) CrossBar();

    UseRegistryValues(ConfigInfo);

    // According to Brooktree, 4 is the magic dividing line
    // between 829 and 829a. Apparently, there is an 829b on the
    // horizon, but I don't have the details yet.
    // This is meant to be a kind of fail-safe
/*
    if (pHwExt->chipRev < 4) {
        outputEnablePolarity = 0;
    }
*/
 
    if (defaultDecoderWidth != 360 && defaultDecoderWidth != 720)
    {
        DBGERROR(("Unexpected defaultDecoderWidth: %d.\n", defaultDecoderWidth));
        TRAP();
    }

    destRect = MRect(0, 0, defaultDecoderWidth, defaultDecoderHeight);

    RestoreState();

    // by default, outputs will be tri-stated. Transitioning to the run state will enable it.
	SetOutputEnabled(FALSE);
}

Device::~Device()
{
    delete decoder;
    delete scaler;
    delete xbar;
}

void Device::SaveState()
{
    // save picture attributes
    hue = decoder->GetHue();
    saturation = decoder->GetSaturation();
    contrast =  decoder->GetContrast();
    brightness = decoder->GetBrightness();

    // save video source
    source = (Connector) GetVideoInput();

    // save configuration of data stream to video port
    isCodeInDataStream = IsCodeInsertionEnabled();
    is16 = Is16BitDataStream();
    
    // save VBI related settings
    VBIEN = IsVBIEN();
    VBIFMT = IsVBIFMT();

    // save scaling dimensions
    scaler->GetDigitalWin(destRect);
}

void Device::RestoreState(DWORD dwStreamsOpen)
{
    Reset();
    
    // (re)initialize image 
    decoder->SetInterlaced(FALSE);
    decoder->SetHue(hue);
    decoder->SetSaturation(saturation);
    decoder->SetContrast(contrast);
    decoder->SetBrightness(brightness);

    // (re)initialize video source
    SetVideoInput(source);

    SetOutputEnablePolarity(m_pDeviceParms->outputEnablePolarity);

    // (re)initialize corresponding xbar setting.
    // 'source' is one-based; Route expects zero-based
    Route(0, source);

    // (re)initialize configuration of data stream to video port
    SetCodeInsertionEnabled(isCodeInDataStream);
    Set16BitDataStream(is16);

    // restore VBI settings
    SetVBIEN(VBIEN);
    SetVBIFMT(VBIFMT);

    SetVideoDecoderStandard( GetVideoDecoderStandard() );
    // initialize scaling dimensions
    //SetRect(destRect);    Paul:  Use set video decoder standard instead

	if(!dwStreamsOpen)
		SetOutputEnabled(IsOutputEnabled());
}

void Device::SetRect(MRect &rect)
{
    destRect = rect;
    scaler->SetAnalogWin(rect);
    scaler->SetDigitalWin(rect);

    // for Debugging
#ifdef DBG
    scaler->DumpSomeState();
#endif
}

void Device::Reset()
{
    SoftwareReset();
}

int Device::GetDecoderWidth()
{
    MRect tmpRect;
    scaler->GetDigitalWin(tmpRect);

    return tmpRect.right;
}

int Device::GetDecoderHeight()
{
    MRect tmpRect;
    scaler->GetDigitalWin(tmpRect);

    return tmpRect.bottom;
}

int Device::GetDefaultDecoderWidth()
{
    return defaultDecoderWidth;
}

int Device::GetDefaultDecoderHeight()
{
    return defaultDecoderHeight;
}

int Device::GetPartID()
{
  return m_pDeviceParms->chipID;
}

int Device::GetPartRev()
{
  return m_pDeviceParms->chipRev;
}

NTSTATUS
Device::GetRegistryValue(
                   IN HANDLE Handle,
                   IN PWCHAR KeyNameString,
                   IN ULONG KeyNameStringLength,
                   IN PWCHAR Data,
                   IN ULONG DataLength
)
/*++

Routine Description:

    Reads the specified registry value

Arguments:

    Handle - handle to the registry key
    KeyNameString - value to read
    KeyNameStringLength - length of string
    Data - buffer to read data into
    DataLength - length of data buffer

Return Value:

    NTSTATUS returned as appropriate

--*/
{
    NTSTATUS        Status = STATUS_INSUFFICIENT_RESOURCES;
    UNICODE_STRING  KeyName;
    ULONG           Length;
    PKEY_VALUE_FULL_INFORMATION FullInfo;

    RtlInitUnicodeString(&KeyName, KeyNameString);

    Length = sizeof(KEY_VALUE_FULL_INFORMATION) +
        KeyNameStringLength + DataLength;

    FullInfo = (struct _KEY_VALUE_FULL_INFORMATION *)ExAllocatePool(PagedPool, Length);

    if (FullInfo) {
        Status = ZwQueryValueKey(Handle,
                                 &KeyName,
                                 KeyValueFullInformation,
                                 FullInfo,
                                 Length,
                                 &Length);

        if (NT_SUCCESS(Status)) {

            if (DataLength >= FullInfo->DataLength) {
                RtlCopyMemory(Data, ((PUCHAR) FullInfo) + FullInfo->DataOffset, FullInfo->DataLength);

            } else {

                TRAP();
                Status = STATUS_BUFFER_TOO_SMALL;
            }                   // buffer right length

        }                       // if success
        ExFreePool(FullInfo);

    }                           // if fullinfo
    return Status;

}

#define MAX_REG_STRING_LENGTH  128


VOID
Device::UseRegistryValues(PPORT_CONFIGURATION_INFORMATION ConfigInfo)
/*++

Routine Description:

    Reads all registry values for the device

Arguments:

    PhysicalDeviceObject - pointer to the PDO

Return Value:

     None.

--*/

{
    NTSTATUS        Status;
    HANDLE          handle;

    WCHAR   MUX0String[] =              L"MUX0";
    WCHAR   MUX1String[] =              L"MUX1";
    WCHAR   MUX2String[] =              L"MUX2";
    WCHAR   buf[MAX_REG_STRING_LENGTH];

    ASSERT(KeGetCurrentIrql() <= PASSIVE_LEVEL);

    Status = IoOpenDeviceRegistryKey(ConfigInfo->PhysicalDeviceObject,

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久久9999亚洲精品| 日韩视频一区二区在线观看| 久久精品国产亚洲高清剧情介绍 | 午夜久久久影院| 亚洲精品欧美综合四区| 亚洲三级在线看| 亚洲日本va午夜在线影院| 国产精品动漫网站| 一区二区免费在线播放| 亚洲国产成人porn| 日韩国产一二三区| 国产一二精品视频| kk眼镜猥琐国模调教系列一区二区 | 一区二区三区在线高清| 一区二区三区四区av| 丝袜美腿亚洲色图| 久久精品国产澳门| 国产成人福利片| 色先锋资源久久综合| 欧美午夜精品一区二区三区| 欧美日韩精品一区二区三区四区| 51久久夜色精品国产麻豆| 精品精品国产高清一毛片一天堂| ww亚洲ww在线观看国产| 亚洲国产精品激情在线观看| 亚洲一区免费观看| 狠狠色综合日日| 一本到不卡精品视频在线观看| 欧美日韩国产成人在线91| 欧美不卡激情三级在线观看| 国产精品乱码一区二三区小蝌蚪| 亚洲国产精品一区二区久久恐怖片| 日本不卡高清视频| 成人av电影在线网| 91精品久久久久久久99蜜桃| 亚洲国产精品t66y| 蜜桃视频第一区免费观看| 成人av在线播放网址| 欧美精品久久一区| 国产精品伦理一区二区| 蜜桃视频一区二区三区在线观看| 国产ts人妖一区二区| 欧美精品一二三区| 中文字幕一区二区三区四区 | 亚洲一区电影777| 国产一区视频网站| 欧洲亚洲国产日韩| 久久久www成人免费毛片麻豆| 亚洲成人资源网| eeuss鲁片一区二区三区在线观看| 欧美一卡二卡三卡| 一区二区不卡在线视频 午夜欧美不卡在 | 91亚洲精品久久久蜜桃| 欧美电影免费观看高清完整版| 亚洲男人天堂av| av在线不卡电影| 国产网站一区二区三区| 麻豆视频观看网址久久| 欧洲亚洲国产日韩| 亚洲欧美精品午睡沙发| 成人黄页毛片网站| 国产欧美日韩精品在线| 老司机免费视频一区二区| 欧美精品aⅴ在线视频| 亚洲免费观看在线视频| 成人午夜电影久久影院| 国产午夜精品一区二区| 精品一区二区综合| 精品国产99国产精品| 美国三级日本三级久久99| 欧美精品少妇一区二区三区| 一区二区三区四区不卡视频| 欧美偷拍一区二区| 亚洲国产成人av| 欧美日本一区二区在线观看| 亚洲一区二区四区蜜桃| 欧美日本一区二区| 日日摸夜夜添夜夜添国产精品| 欧美日韩国产一二三| 天天亚洲美女在线视频| 欧美一级高清片| 久久国产精品区| 久久久久国色av免费看影院| 国产成人av一区二区三区在线| 久久久久久久性| www.久久久久久久久| 一区二区三区欧美| 7777精品伊人久久久大香线蕉| 午夜精品爽啪视频| 欧美videos大乳护士334| 国产一区二区三区电影在线观看| 国产亚洲精品7777| 91女厕偷拍女厕偷拍高清| 亚洲sss视频在线视频| 欧美一卡二卡在线观看| 国产成+人+日韩+欧美+亚洲| 中文字幕一区二区三中文字幕| 99精品视频一区| 亚洲成人av电影| 久久综合九色综合久久久精品综合 | 国产精品亚洲第一| 中文字幕日韩欧美一区二区三区| 91久久精品一区二区| 蜜臀av性久久久久蜜臀aⅴ | 国产精品第13页| 在线观看日韩一区| 国内不卡的二区三区中文字幕| 国产精品久久毛片av大全日韩| 欧美在线啊v一区| 久久99久久久欧美国产| 综合电影一区二区三区 | 久久久亚洲午夜电影| 91视频一区二区三区| 理论片日本一区| 亚洲乱码中文字幕| 久久无码av三级| 欧美三级在线播放| 成人精品免费看| 麻豆91在线播放免费| 依依成人精品视频| 久久久电影一区二区三区| 欧美人成免费网站| 91香蕉视频在线| 国产福利电影一区二区三区| 五月婷婷久久丁香| 亚洲乱码国产乱码精品精98午夜| 26uuu欧美| 日韩欧美综合一区| 在线观看不卡一区| 99国产精品久久久久久久久久| 国产精品资源在线观看| 日本最新不卡在线| 亚洲另类在线视频| 中文字幕亚洲区| 国产视频一区不卡| 26uuu成人网一区二区三区| 欧美一级专区免费大片| 欧美午夜精品久久久| 一本久道久久综合中文字幕| 处破女av一区二区| 国产二区国产一区在线观看| 麻豆成人91精品二区三区| 天天做天天摸天天爽国产一区 | 国产日韩欧美麻豆| 日韩欧美不卡一区| 7777精品久久久大香线蕉 | 国产99久久久久| 国产成人免费视| 国产精品夜夜嗨| 国产成人免费高清| 国产福利视频一区二区三区| 久久精品国产精品青草| 激情综合色综合久久综合| 麻豆国产一区二区| 精品一区二区三区免费播放| 日本强好片久久久久久aaa| 午夜视频在线观看一区二区 | 69堂国产成人免费视频| 91精品在线观看入口| 欧美精品18+| 日韩精品在线一区二区| 精品欧美乱码久久久久久1区2区| 欧美一区二区三区四区久久| 日韩一区二区三区视频在线观看| 欧美一激情一区二区三区| 欧美mv和日韩mv国产网站| 精品国产成人系列| 国产免费成人在线视频| 亚洲三级在线观看| 手机精品视频在线观看| 极品少妇一区二区| 成人性视频网站| 在线视频国内一区二区| 91.com视频| 中文欧美字幕免费| 亚洲综合丁香婷婷六月香| 日本va欧美va瓶| 国产精品一区二区91| 99久久精品国产毛片| 欧美久久久久久蜜桃| 久久人人超碰精品| 亚洲人吸女人奶水| 奇米777欧美一区二区| 成人黄动漫网站免费app| 欧美性猛交xxxxxxxx| 精品粉嫩aⅴ一区二区三区四区| 国产精品女上位| 日韩精品一级二级 | 成人高清av在线| 欧美影视一区二区三区| 久久久一区二区三区捆绑**| 一区二区高清在线| 国产成人久久精品77777最新版本| 在线观看一区二区视频| 精品国一区二区三区| 亚洲国产欧美在线| 国产成人精品亚洲日本在线桃色 | 日韩精品一区二区三区四区视频 | 国内成人精品2018免费看| 在线免费视频一区二区|