
1. 项目概述与VDCE核心价值在嵌入式视频处理系统的开发中尤其是面对显示驱动、视频编解码前后处理这类任务时我们常常需要与一个名为“视频数据转换引擎”Video Data Conversion Engine, VDCE的硬件模块打交道。这玩意儿说白了就是一块专门负责对原始视频流进行“再加工”的硬件加速器。它的活很杂但核心离不开三件事把图像放大缩小缩放、把颜色信息从一种格式转到另一种格式色度转换、以及把几层画面叠在一起混合。听起来是不是有点像你在电脑上用软件做视频剪辑原理类似但VDCE是在芯片内部用硬件电路实时完成的速度和效率天差地别。那么软件工程师如何指挥这块硬骨头干活呢答案就是寄存器。你可以把VDCE想象成一个功能超级复杂的多功能料理机而寄存器就是它面板上那一排排的旋钮、按钮和显示屏。你想让它把图像缩小到720p那就拧动“水平缩放比例”旋钮配置RSZ_HMAG寄存器。你觉得缩放后图像边缘有锯齿想开个抗锯齿滤镜那就按下“水平抗锯齿使能”按钮设置RSZ_H_ALF_EN位。所有的操作意图最终都转化为对这些特定内存地址的读写。这个过程就是我们常说的“驱动开发”或“底层配置”的核心。今天我就结合手册和实际调试经验把这套“料理机”最常用、也最容易出错的几个“控制面板”——也就是关键寄存器组——给大家掰开揉碎了讲清楚。我们会聚焦在图像缩放、色度转换和混合控制这三个核心功能上不仅告诉你每个寄存器是干嘛的更会分享在实际项目中配置它们时踩过的坑和总结出的最佳实践。无论你是刚开始接触视频驱动的嵌入式新手还是想优化现有视频管线性能的老手相信这些硬核细节都能让你对VDCE有更透彻的理解。2. 图像缩放功能寄存器详解与实战配置图像缩放是VDCE最基础也最常用的功能比如将1080p的源图像显示在720p的屏幕上或者为编码器预处理降低分辨率。VDCE的缩放不是简单的“丢像素”或“复制像素”它支持多种插值算法并能通过抗锯齿滤波器来提升视觉质量。这一切都通过一组缩放相关的寄存器来控制。2.1 缩放模式与算法选择RSZ_MODE寄存器RSZ_MODE寄存器是缩放功能的“总开关”和“算法选择器”。它是一个32位的寄存器但有效控制位集中在低16位。我们直接来看它的核心字段位域字段名读写属性功能描述与配置要点0RSZ_H_ENR/W水平缩放使能。1启用水平方向缩放0禁用。注意即使你只想做垂直缩放通常也需要使能水平缩放并设置比例为1:1即RSZ_H_MAG256因为数据流是水平扫描的。1RSZ_H_TYPER/W水平缩放算法类型。04抽头立方卷积Cubic Convolution14抽头线性插值Linear Interpolation。立方卷积效果更平滑图像质量更高但计算量稍大线性插值速度更快资源占用少。对于从高分辨率到低分辨率的缩小操作强烈建议使用立方卷积以减少锯齿。4RSZ_V_ENR/W垂直缩放使能。1启用垂直方向缩放0禁用。5RSZ_V_TYPER/W垂直缩放算法类型。选项和选择策略同RSZ_H_TYPE。8RSZ_H_ALF_ENR/W水平抗锯齿滤波器使能。1启用0禁用。这是什么当图像被大幅缩小时高频信息会折叠回低频产生混叠失真Aliasing看起来就是锯齿或摩尔纹。抗锯齿滤波器本质上是一个低通滤波器在缩放前先衰减图像的高频成分从而抑制混叠。何时用在缩小操作RSZ_H_MAG 256且对画质要求高时建议启用。放大操作时无需开启。9RSZ_H_ALF_MODER/W水平抗锯齿滤波器系数模式。0自动计算1手动配置。在绝大多数应用场景下设置为0自动即可VDCE会根据缩放比例自动计算最优的滤波器系数。仅在你有特殊滤波需求且对滤波器频率响应有深入研究时才考虑手动模式并通过RSZ_AFILTER寄存器配置。12RSZ_V_ALF_ENR/W垂直抗锯齿滤波器使能。1启用0禁用。特别注意其特殊行为当此位为1时垂直缩放器将不进行插值运算仅做降采样。这意味着垂直方向的缩放质量会下降。因此除非在极端性能优先、画质次要的场景否则不建议启用此位。垂直抗锯齿应通过高质量的垂直插值RSZ_V_TYPE选择立方卷积来隐含实现。配置示例与心得 假设我们需要将1920x1080宽x高的图像缩放为1280x720并希望获得较好的质量。使能缩放RSZ_H_EN 1,RSZ_V_EN 1。选择算法RSZ_H_TYPE 0立方卷积RSZ_V_TYPE 0立方卷积。为了画质我们选择计算量稍大的立方卷积。抗锯齿配置因为是缩小操作开启水平抗锯齿RSZ_H_ALF_EN 1,RSZ_H_ALF_MODE 0自动。垂直抗锯齿保持关闭RSZ_V_ALF_EN 0依靠立方卷积算法保证质量。计算并设置缩放比接下来就需要配置RSZ_HMAG和RSZ_VMAG寄存器了。踩坑记录曾经在一个项目里RSZ_V_ALF_EN被错误地置为1导致垂直缩放后图像出现明显的“阶梯状”瑕疵尤其是在有细斜线的场景下。排查了很久才发现是这个位被默认配置或意外写入了1。记住这个位通常保持为0。2.2 缩放比例计算RSZ_HMAG与RSZ_VMAG寄存器这是缩放功能的核心参数寄存器。它们定义了缩放的比例。手册给出的公式是放大率 256 / (RSZ_X_MAG)。这里的X代表H或V。这个公式有点反直觉我们把它转换一下RSZ_X_MAG 256时放大率 1即不缩放。RSZ_X_MAG 256时放大率 1即缩小。例如RSZ_H_MAG 512则水平放大率 256/512 0.5即宽度缩小一半。RSZ_X_MAG 256时放大率 1即放大。但手册明确规定有效值范围是256到2048。也就是说VDCE不支持放大操作放大率1或者更准确地说它支持的放大率最大为1即1:1或缩小。这是一个非常重要的限制如何计算RSZ_X_MAG值公式为RSZ_X_MAG (源图像尺寸 * 256) / 目标图像尺寸。 计算结果需要向下取整到最接近的整数。因为寄存器值必须是整数这会导致实际缩放比例与理论值有微小偏差属于正常情况。实战计算 延续上面的例子源1920x1080 目标1280x720。水平方向RSZ_H_MAG (1920 * 256) / 1280 491520 / 1280 384垂直方向RSZ_V_MAG (1080 * 256) / 720 276480 / 720 384检查范围384在256~2048之间有效。此时实际水平放大率 256/384 ≈ 0.6667 目标宽度 1920 * 0.6667 ≈ 1280由于取整可能为1279或1281误差在一个像素内可接受。配置注意事项对齐要求手册提到结果图像的尺寸IMG_Y_RESSIZE等的最低有效位LSB必须为0。这意味着宽度和高度必须是2的倍数通常至少是偶数值。在计算目标尺寸时务必保证这一点。相位调节RSZ_HPHASE和RSZ_VPHASE寄存器用于微调缩放后第一个像素的起始相位。在绝大多数标准应用中直接设置为0即可。只有在需要做像素级精确对齐的特殊图像处理管线中才可能需要调整它。3. 色度空间转换寄存器解析与应用场景视频数据中的颜色信息通常不是用RGB直接存储的而是用亮度Y和色度Cb, Cr分量并且色度分量经常被“降采样”以节省带宽比如常见的YUV420格式。VDCE的色度转换Chrominance Conversion功能主要就是处理不同色度采样格式之间的转换例如从YUV420到YUV422或者在不同编解码标准间进行转换。3.1 色度转换模式控制CCV_MODE寄存器CCV_MODE寄存器控制色度转换的使能和算法其关键位在于区分处理MPEG-1和其他更现代的编解码标准如MPEG-2/4, H.264, VC-1。位域字段名功能描述与实战意义0CCV_RES_CODEC_MODE结果数据的编解码模式。0结果数据用于MPEG-2/4/H.264/VC-11用于MPEG-1。1CCV_SRC_CODEC_MODE源数据的编解码模式。0源数据来自MPEG-2/4/H.264/VC-11来自MPEG-1。2CCV_V_TYPE垂直方向色度转换算法。04抽头立方卷积14抽头线性插值。通常选择立方卷积以保证上采样质量。3CCV_H_TYPE水平方向色度转换算法。注意此位仅在源或结果模式中有一方为MPEG-1时才有效对于MPEG-2/4/H.264/VC-1之间的转换此位被忽略硬件使用固定算法。为什么区分MPEG-1这是一个历史兼容性问题。MPEG-1标准使用的色度采样位置Chroma Sampling Position与后来的标准如MPEG-2的“电视”标准有所不同。简单来说MPEG-1的色度像素点位于亮度像素点的“中间”而MPEG-2等标准可以位于“同位置”或“交错位置”。如果转换时模式设错会导致颜色出现轻微的、但可察觉的位移在带有锐利色彩边缘的图像上尤其明显。配置逻辑与示例 假设我们有一个H.264解码出来的YUV420视频需要转换成YUV422格式送去显示。源是H.264属于MPEG-4 AVC家族所以CCV_SRC_CODEC_MODE 0。目标是显示通常遵循MPEG-2的色度定位惯例所以CCV_RES_CODEC_MODE 0。由于两者都不是MPEG-1CCV_H_TYPE位可随意设置通常设为0实际不起作用。选择垂直转换算法CCV_V_TYPE 0立方卷积。最后别忘了在VDCE的总控制寄存器CTRL中将色度转换使能位VDCE_CCV_EN设为1。经验之谈在智能电视或机顶盒项目中99%的场景都是处理MPEG-2/4/H.264/VC-1流。除非你明确知道信号源是古老的MPEG-1编码比如一些非常老的VCD片源否则CCV_SRC_CODEC_MODE和CCV_RES_CODEC_MODE都配置为0是最安全的选择。配置错误导致的色偏问题非常隐蔽很难通过肉眼直接发现但会客观影响画质评测指标。4. 图像混合与图层控制寄存器剖析VDCE支持将一幅位图Bitmap图像叠加Blend到视频画面上。这常用于显示OSD屏幕显示菜单、字幕、台标或简单的UI元素。混合控制的核心是定义位图窗口的位置和混合的颜色查找表。4.1 位图窗口位置控制IMG_BMP_RESSTRTPOS寄存器这个寄存器定义了要混合的位图窗口相对于视频结果图像起始位置的偏移量。它包含水平和垂直两个方向的起始位置。RES_BMP_STRT_HPS(位[11:0])水平起始位置。单位是像素。注意LSB必须为0意味着水平位置必须是偶数像素对齐。这是由内存访问总线的效率决定的。RES_BMP_STRT_VPS(位[26:16])垂直起始位置。单位是行。注意LSB必须为0同样要求偶数行对齐。如何使用假设我们的结果视频画面是1280x720我们想在一个宽200像素、高100像素的位图将其左上角放置在画面坐标(50, 100)的位置。检查对齐50是偶数符合。100是偶数符合。直接配置RES_BMP_STRT_HPS 50,RES_BMP_STRT_VPS 100。重要限制这个位置是位图窗口的起始点。你还需要通过其他寄存器如IMG_BMP_RESSIZE手册中可能在其他章节来定义这个窗口的大小。并且位图数据本身在内存中的存储格式、颜色深度等也需要通过另外的寄存器配置。IMG_BMP_RESSTRTPOS只负责“贴图”的位置。4.2 混合颜色查找表BLD_LUT_xx寄存器这是混合功能中最有趣也最灵活的部分。VDCE使用一个4入口的查找表LUT来控制混合。位图数据中的每个像素通常用很少的位数如2位来表示这个值作为索引00b, 01b, 10b, 11b去查找对应的颜色和混合因子。共有四个寄存器BLD_LUT_00,BLD_LUT_01,BLD_LUT_02,BLD_LUT_03分别对应索引00, 01, 10, 11。每个寄存器32位被平均分为4个8位字段BLD_LUT_xx_FCT混合因子Alpha。0x00表示完全透明视频全显0xFF表示完全不透明位图全显中间值实现半透明混合。BLD_LUT_xx_Y该索引对应的亮度Y值。BLD_LUT_xx_Cb该索引对应的蓝色色差Cb值。BLD_LUT_xx_Cr该索引对应的红色色差Cr值。工作流程VDCE读取位图数据中的一个像素得到其索引值例如01b。根据索引值找到对应的BLD_LUT_01寄存器。取出寄存器中预定义的Y、Cb、Cr颜色值以及混合因子FCT。将这个颜色与背景视频对应像素的颜色按照混合因子进行Alpha混合。输出最终像素。实战应用实现一个简单的两色OSD假设我们想显示一个红底白字的“ERROR”标志。设计位图用1位表示像素。0代表背景红色1代表前景白色。但VDCE是2位索引我们可以简单映射00- 红色01- 白色其他两个索引10和11暂时不用。配置LUTBLD_LUT_00红色。需要查表或计算YUV值。假设纯红色在YUV范围是 (Y82, Cb90, Cr240)。设置FCT0xFF不透明Y0x52,Cb0x5A,Cr0xF0。BLD_LUT_01白色。纯白色YUV约为 (Y235, Cb128, Cr128)。设置FCT0xFF,Y0xEB,Cb0x80,Cr0x80。BLD_LUT_02和BLD_LUT_03可以设置为透明FCT0x00或任意颜色因为索引未使用。准备位图数据在内存中创建一幅单色位图像素值为0或1。由于我们映射到了2位索引的低位数据格式需要按照VDCE要求进行打包通常每个像素占2位即使我们只用了0和1两个值。高级技巧利用混合因子可以实现半透明效果。比如想让OSD半透明可以将BLD_LUT_00和BLD_LUT_01的FCT设置为0x80约50%透明度。更妙的是你可以将FCT值设置为与索引无关的固定值而是通过另一个混合因子寄存器如果支持或动态修改LUT来实现不同区域的不同透明度从而实现更复杂的UI效果。5. 结果图像定义与边界处理寄存器在配置完缩放、色度转换和混合后我们必须明确告诉VDCE最终输出的图像Result Image应该是什么样子以及如何处理图像边界。这部分由结果图像寄存器和边缘填充寄存器控制。5.1 结果图像尺寸与位置寄存器这组寄存器定义了VDCE处理流水线末端输出图像的窗口。IMG_Y_RESSIZE/IMG_C_RESSIZE定义亮度/色度结果图像的尺寸RES_Y_HSZ,RES_Y_VSZ,RES_C_HSZ,RES_C_VSZ。这里配置的就是你最终想要的图像宽和高。必须注意对齐要求LSB0。IMG_Y_RESSTRTPOS/IMG_C_RESSTRTPOS定义亮度/色度结果图像在输出缓冲区中的起始位置RES_Y_STRT_HPS,RES_C_STRT_HPS。这允许你将处理后的图像输出到帧缓冲区的特定区域而不是总是从(0,0)开始。例如实现画中画PIP功能时小窗口的画面就需要通过这个起始位置来定位。配置一致性检查 这是一个极易出错的地方。你必须确保RES_Y_HSZ和RES_C_HSZ符合你目标格式的色度水平下采样关系。例如对于YUV420色度宽度通常是亮度宽度的一半。但RES_C_HSZ寄存器存储的是色度分量的像素数所以如果亮度宽度是1280YUV420的色度宽度应该是640那么RES_C_HSZ应配置为640。起始位置RES_X_STRT_HPS必须小于处理单元大小寄存器PROC_SIZE中定义的VDCE_PRCS_UNIT_SIZE。这个PROC_SIZE通常定义了VDCE内部一次处理的数据块大小比如32字节或64字节。不满足此条件可能导致硬件访问越界或数据错误。5.2 边缘填充寄存器EPD_LUMA_WIDTH与EPD_CHROMA_WIDTH当源图像数据在SDRAM中存储而VDCE的缩放或滤波算法需要访问图像边界外的像素时例如立方卷积需要左右各2个像素的上下文就需要边缘填充功能。这两个寄存器定义了在亮度Y和色度C数据周围硬件自动扩展的像素宽度。EPD_Y_HEXT/EPD_C_HEXT水平方向扩展宽度。在图像的左边缘和右边缘各填充HEXT个像素。对于色度LSB必须为0偶数扩展。EPD_Y_VEXT/EPD_C_VEXT垂直方向扩展宽度。在图像的上边缘和下边缘各填充VEXT/2个像素。注意这里是总扩展量等于VEXT上下均分。如何确定填充值填充的像素值通常由硬件自动处理常见策略有重复边缘像素将最边缘的像素向外复制。镜像填充以边缘为轴镜像内部像素。 具体策略需查阅VDCE的用户手册或数据手册的“Edge Padding”章节。EPD_*_WIDTH寄存器只控制填充的范围。配置建议 填充宽度必须大于或等于你所使用的滤波器的支持范围。对于4抽头立方卷积滤波器核的半长为2需要左右各2个上下文。因此水平扩展EPD_Y_HEXT至少需要设置为2。为了保险和兼容性通常会设置得稍大一些比如4或8。如果还开启了抗锯齿滤波器可能需要更大的支持范围请参考滤波器章节的具体要求。不正确的边缘填充设置会导致图像边缘处出现扭曲、色块或访问内存错误。6. 高级功能与杂项寄存器除了上述核心功能VDCE还提供了一些高级控制和辅助功能寄存器。6.1 范围映射控制RGMP_CTRL寄存器视频数据特别是YUV有不同的量化范围标准。常见的有Limited Range(TV Range): Y在16-235之间Cb/Cr在16-240之间。Full Range(PC Range): Y、Cb、Cr均在0-255之间。RGMP_CTRL寄存器用于在两种范围之间进行映射转换。RANGE_MAP_Y_EN/RANGE_MAP_C_EN使能亮度/色度范围映射。RANGE_MAP_Y/RANGE_MAP_C映射系数。这些系数用于一个缩放和偏移的线性公式输出 (输入 * 系数) 偏移。具体的公式和系数表需要查阅手册的“Range Mapping”章节。使用场景 当你的视频源如解码器输出是Full Range但显示设备或编码器要求Limited Range时就需要启用范围映射并配置正确的系数否则颜色会显得灰白Full Range当Limited Range用或对比度不足Limited Range当Full Range用。6.2 抗锯齿滤波器强度RSZ_AFILTER寄存器当在RSZ_MODE寄存器中设置了手动抗锯齿滤波器模式RSZ_H_ALF_MODE1时RSZ_AFILTER寄存器用于手动控制滤波器的强度。RSZ_ALF_INTENSITY(位[7:0])滤波器强度值范围0-255。但有效值被限制在0-128之间超过128会被截断到128。该值被用于计算两个权重系数a和b对应滤波器核的抽头权重。公式如手册所述a clip(强度, 0, 64),b clip(强度, 64, 128)。clip是截断函数。如何理解强度值越小滤波器越弱图像越锐利但抗锯齿效果差。强度值越大滤波器越强图像越模糊但抗锯齿效果好。通常自动模式RSZ_H_ALF_MODE0是最佳选择。硬件会根据缩放比例自动计算一个合适的强度。只有在自动模式的效果不满足特定需求或者你在进行图像质量的主观调优时才需要尝试手动模式。7. 寄存器配置实战流程与排坑指南了解了每个寄存器后我们来看一个完整的配置流程和常见问题。7.1 一个典型的VDCE初始化配置流程假设任务将输入的YUV420SP NV12格式的1080p视频缩放并转换为YUV422格式的720p输出并在左上角(10,10)位置混合一个32x32的OSD图标。全局使能与基础配置配置总控制寄存器CTRL使能VDCE模块VDCE_EN并根据数据流格式设置输入/输出格式位。源图像设置配置源图像基地址、跨度Stride、尺寸等寄存器IMG_Y_SRC*,IMG_C_SRC*。确保这些参数与实际的NV12缓冲区匹配。缩放配置计算缩放比RSZ_H_MAG (1920*256)/1280 384,RSZ_V_MAG (1080*256)/720 384。配置RSZ_HMAG384,RSZ_VMAG384。配置RSZ_MODE使能水平和垂直缩放RSZ_H_EN1,RSZ_V_EN1选择立方卷积算法RSZ_H_TYPE0,RSZ_V_TYPE0使能水平抗锯齿并设为自动RSZ_H_ALF_EN1,RSZ_H_ALF_MODE0垂直抗锯齿关闭RSZ_V_ALF_EN0。相位寄存器RSZ_HPHASE和RSZ_VPHASE设为0。色度转换配置假设源为H.264解码目标用于显示。配置CCV_MODECCV_SRC_CODEC_MODE0,CCV_RES_CODEC_MODE0,CCV_V_TYPE0。在CTRL寄存器中使能色度转换VDCE_CCV_EN1。混合功能配置配置OSD位图的源地址、格式、尺寸。配置IMG_BMP_RESSTRTPOSRES_BMP_STRT_HPS10,RES_BMP_STRT_VPS10。配置颜色LUTBLD_LUT_00~BLD_LUT_03定义OSD的几种颜色和透明度。结果图像定义配置IMG_Y_RESSIZERES_Y_HSZ1280,RES_Y_VSZ720。配置IMG_C_RESSIZE对于YUV422色度水平尺寸与亮度相同RES_C_HSZ1280,RES_C_VSZ720。配置IMG_Y_RESSTRTPOS和IMG_C_RESSTRTPOS如果输出到帧缓冲区的(0,0)起点则设为0。边缘填充配置由于使用了立方卷积设置边缘填充。EPD_LUMA_WIDTHEPD_Y_HEXT4,EPD_Y_VEXT4。EPD_CHROMA_WIDTHEPD_C_HEXT4注意偶数,EPD_C_VEXT4。范围映射可选确认输入输出范围。如果输入是Limited Range输出也是Limited Range则无需映射RGMP_CTRL中使能位保持0。启动处理最后通过向CTRL寄存器的某个启动位如VDCE_START写入1触发VDCE开始处理。7.2 常见问题排查速查表现象可能原因排查步骤输出图像全黑/全绿/花屏1. 源图像地址或格式错误。2. 结果图像地址错误。3. 寄存器配置后未触发启动。1. 检查IMG_Y_SRC_START_ADDR等源地址寄存器。2. 检查IMG_Y_RES_START_ADDR等结果地址寄存器。3. 确认是否向启动位写了1。用调试器读取状态寄存器看是否忙或报错。缩放后图像错位或撕裂1. 源/结果图像跨度Stride配置错误。2. 图像尺寸或位置未对齐LSB不为0。3.RSZ_HPHASE/RSZ_VPHASE非0。1. 核对源图像和结果图像的内存布局确保跨度值正确通常是宽度对齐到某个值如32字节。2. 检查IMG_*_SIZE和IMG_*_STRTPOS寄存器的值确保是偶数。3. 将相位寄存器清零测试。图像边缘有锯齿或模糊1. 缩放算法选择不当线性插值用于缩小。2. 抗锯齿滤波器未启用或模式错误。3. 边缘填充宽度不足。1. 确认RSZ_H_TYPE和RSZ_V_TYPE在缩小操作时设为0立方卷积。2. 确认RSZ_H_ALF_EN1且RSZ_H_ALF_MODE0。3. 增大EPD_*_HEXT和EPD_*_VEXT的值。混合的OSD颜色不对或位置错1.BLD_LUT_xx寄存器颜色值填错YUV vs RGB。2.IMG_BMP_RESSTRTPOS位置计算错误。3. 位图数据格式或索引映射错误。1. 使用工具将RGB颜色转换为正确的YUV值再填入LUT。2. 确认位置坐标是相对于结果图像(0,0)点且满足对齐要求。3. 检查位图数据在内存中的排列方式是否与VDCE预期一致像素顺序、位深、打包方式。色度转换后颜色偏移CCV_MODE寄存器中编解码模式配置错误。确认源和目标的视频编码标准。对于现代标准H.264, MPEG-4等CCV_SRC_CODEC_MODE和CCV_RES_CODEC_MODE都应设为0。性能不达标或带宽瓶颈1. 使用了立方卷积但实际可用线性插值。2. 边缘填充设置过大导致读写带宽增加。3. 同时使能了所有高开销功能。1. 在画质可接受前提下尝试改用线性插值RSZ_*_TYPE1。2. 在满足滤波器需求下尽量减少EPD_*的填充值。3. 评估是否必须同时进行缩放、色度转换和混合能否分步处理。最后的忠告VDCE这类硬件加速器寄存器配置看似繁琐但逻辑非常直接。最好的学习方式就是结合一个具体的平台SDK或示例代码先让一个最简单的功能比如直通跑起来然后逐个寄存器修改观察输出变化。同时一定要善用芯片的寄存器查看工具和内存查看工具实时确认配置值和数据内容这比任何理论推导都来得直接有效。