引 言
在QuickTime Component家族中,Video Digitizer和Video Output Component(分别简称VDig和VOut Component)是重要的成员,它们掌管视频数据对硬件设备(主要通过PCI板卡)的输入输出。这里采用的范例是Apple提供的示例程序:SoftVideoOutputComponent和SoftVDigX。
第一节 Video Output Component
Video Out Component主要完成数据向硬件输出,输出的模式配置和在往驱动馈送数据之前的必要处理工作都在这里完成。 (未完待续)
第二节 Video Digitizer
和Video Output Component相对,Video Digitizer(简称VDig)负责数据从硬件输入的处理工作。此处介绍主要的selector,大多有关设置和保存的函数对均在全局变量组中有对应记录:
Open:打开组件,执行全局初始化,包括对驱动的初始化和配载工作。
Close:关闭组件,做全局的终止化工作。
Version:提供组件的版本信息。
GetMaxSrcRect:获取源视频的尺寸,返回给Rect *pMaxSrcRect指针,在全局变量组中也可以保留一份。这个数据可以从硬件中获取,也可以自行指定一个尽可能大的值,如{top = 0, left = 0, bottom = 1080, right = 1920}。
GetActiveSrcRect:获取现行视频尺寸。
SetDigitizerRect,GetDigitizerRect:设置与获取当前视频尺寸。这个尺寸由应用程序给出,很可能就是GetMaxSrcRect中提供给它的。
GetVBlankRect:获取垂直消隐矩形。如果没有垂直消隐,则返回空矩形。
SetBrightness,GetBrightness:设置与获取亮度。
SetContrast,GetContrast:设置与获取对比度。
SetHue,GetHue:设置与获取色调。
SetSaturation,GetSaturation:设置与获取饱和度。
SetSharpness,GetSharpness:设置与获取锐度。
SetBlackLevelValue,GetBlackLevelValue:设置和获取黑度值。
SetWhiteLevelValue,GetWhiteLevelValue:设置和获取白度值。
GetVideoDefaults:获取默认色彩设置(上述亮度、对比度、色调等)。
GetDigitizerInfo:获取Video Digitizer的基本信息。
GetCurrentFlags:
GetNumberOfInputs:设置输入源个数,这里返回的值是个数减一。有关输入源见SetInput函数。
GetInputFormat:
SetInput:对于同一个Video Digitizer,可以支持不同参数多个输入源(例如不同的帧尺寸、扫描方式等)。在这里对各输入源进行编号,通过编号映射,Video Digitizer决定采用相应的采集参数。这个值由上层程序(如Final Cut Pro)向Video Digizer 指定。
GetInput:返回SetInput设置的输入源编号。
SetInputStandard:
GetInputName:返回指定Input编号输入源的名称字符串。
GetDeviceNameAndFlags:
GetUniqueIDs:
SelectUniqueIDs:
SetCompression:这里对采集参数作最后的整理和确定。
CompressOneFrameAsync:
CompressDone:这是Video Digitizer关键函数。采集数据的获取和向上交付都在这里完成。数据获取往往从和驱动议定的共享地址空间(DMA方式)中得到,向应用程序提交数据通过该函数的参数返回。如果需要对采集数据进行变换(如压缩解压、尺寸变换等),也需在这里实现。
ReleaseCompressBuffer:
GetImageDescription:获取帧描述子。帧(图像)描述子在Codec Component中深入讨论过。
ResetCompressSequence:
SetCompressionOnOff:设置采集状态。
GetCompressionTypes:获取压缩参数。
SetTimeBase:时基设置。
SetFrameRate:设置输入视频素材的帧率,这是保证上层提取和下层递送的同步的关键性配置。在此处,调用者将帧率数据传入,并保存在全局变量组中。
GetDataRate:返回递送延迟、帧率和数据速率信息。数据速率即码率,对于压缩图像而言不是一个固定值。
SetDataRate:限制数据速率。一般不作限制。
GetCompressionTime:
SetPLLFilterType,GetPLLFilterType:
GetPreferredTimeScale:
GetTimeCode:
GetPreferredImageDimensions:
(未完待续)