FPGA基于TW2867解码PAL视频,Video Processing Subsystem去隔行,提供3套工程源码和技术支持


FPGA基于TW2867解码PAL视频,Video Processing Subsystem去隔行,提供3套工程源码和技术支持

1、前言

大自然的信号都是模拟的,视频信号也不例外。视频信号是指电视信号、静止图象信号和可视电视图像信号。视频信号分为三种制式:PAL、NTSC 和 SECAM。既然 PAL、NTSC、SECAM 都是模拟信号,FPGA 处理的是数字信号(有些 FPGA内部自带 AD,可以处理模拟信号,例如 Altera 的 MAX10),因此中间需要一个芯片做转换,也就是一个 ADC,学名叫做视频解码芯片。本设计使用TW2867作为视频解码芯片采集PAL视频。

工程概述

本设计基于Xilinx系列FPGA为平台,搭建实时PAL视频解码图传方案;视频输入为PAL制式的CCD模拟相机,输入分辨率为标准的720x576的PAL隔行视频;PAL视频解码方案为TW2867芯片,TW2867可输出PAL或者NTSC,本设计配置为PAL制式,出4路BT656视频,本设计只使用其中一路;FPGA接收到BT656视频视频后送入4通道分离模块,该模块用于分离出4路复合视频;然后分离出的复合视频送入BT565解码模块,该模块用于将BT565视频解码为YUV422视频;YUV422视频再送入Xiinx官方的Video In To AXI4-Stream IP核转换为AXI4-Stream视频流输出;然后再送入Xiinx官方的VDMA IP核做图像缓存,VDMA配置为4帧缓存,缓存介质为DDR3或DDR4;缓存视频从DDR读出后送入Xiinx官方的Video Processing Subsystem IP核做去隔行处理,将隔行视频转换为逐行视频;然后再送入Xiinx官方的Video Mixer IP核做视频格式转换和视频叠加处理,将YUV422转换为RGB888,同时在1920x1080黑色背景下叠加720x576的PAL视频;然后再送入Xiinx官方的AXI4-Stream to Video Out IP核做视频流转换,将AXI4-Stream视频流转换为Native视频流;最后Native视频流送入RGB888转HDMI模块输出HDMI差分视频流;再外接显示器即可显示采集到的PAL视频;针对市场主流需求,本博客设计并提供3套工程源码,具体如下:
在这里插入图片描述
工程源码1

开发板FPGA型号为Xilinx-Kintex7–35T–xc7k325tffg676-2;视频输入为PAL制式的CCD模拟相机,输入分辨率为标准的720x576的PAL隔行视频;PAL视频解码方案为TW2867芯片,TW2867可输出PAL或者NTSC,本设计配置为PAL制式,出4路BT656视频,本设计只使用其中一路;FPGA接收到BT656视频视频后送入4通道分离模块,该模块用于分离出4路复合视频;然后分离出的复合视频送入BT565解码模块,该模块用于将BT565视频解码为YUV422视频;YUV422视频再送入Xiinx官方的Video In To AXI4-Stream IP核转换为AXI4-Stream视频流输出;然后再送入Xiinx官方的VDMA IP核做图像缓存,VDMA配置为4帧缓存,缓存介质为DDR3;缓存视频从DDR读出后送入Xiinx官方的Video Processing Subsystem IP核做去隔行处理,将隔行视频转换为逐行视频;然后再送入Xiinx官方的Video Mixer IP核做视频格式转换和视频叠加处理,将YUV422转换为RGB888,同时在1920x1080黑色背景下叠加720x576的PAL视频;然后再送入Xiinx官方的AXI4-Stream to Video Out IP核做视频流转换,将AXI4-Stream视频流转换为Native视频流;最后Native视频流送入RGB888转HDMI模块输出HDMI差分视频流;再外接显示器即可显示采集到的PAL视频;该方案适用于Xilinx 7系列FPGA做PAL视频解码方案;

工程源码2

开发板FPGA型号为Xilinx–>Virtex7–690T–xc7vx690tffg1761-3;视频输入为PAL制式的CCD模拟相机,输入分辨率为标准的720x576的PAL隔行视频;PAL视频解码方案为TW2867芯片,TW2867可输出PAL或者NTSC,本设计配置为PAL制式,出4路BT656视频,本设计只使用其中一路;FPGA接收到BT656视频视频后送入4通道分离模块,该模块用于分离出4路复合视频;然后分离出的复合视频送入BT565解码模块,该模块用于将BT565视频解码为YUV422视频;YUV422视频再送入Xiinx官方的Video In To AXI4-Stream IP核转换为AXI4-Stream视频流输出;然后再送入Xiinx官方的VDMA IP核做图像缓存,VDMA配置为4帧缓存,缓存介质为DDR3;缓存视频从DDR读出后送入Xiinx官方的Video Processing Subsystem IP核做去隔行处理,将隔行视频转换为逐行视频;然后再送入Xiinx官方的Video Mixer IP核做视频格式转换和视频叠加处理,将YUV422转换为RGB888,同时在1920x1080黑色背景下叠加720x576的PAL视频;然后再送入Xiinx官方的AXI4-Stream to Video Out IP核做视频流转换,将AXI4-Stream视频流转换为Native视频流;最后Native视频流送入RGB888转HDMI模块输出HDMI差分视频流;再外接显示器即可显示采集到的PAL视频;该方案适用于Xilinx 7系列FPGA做PAL视频解码方案;

工程源码3

开发板FPGA型号为Xilinx–>Kintex UltraScale–xcku060-ffva1156-2-i;视频输入为PAL制式的CCD模拟相机,输入分辨率为标准的720x576的PAL隔行视频;PAL视频解码方案为TW2867芯片,TW2867可输出PAL或者NTSC,本设计配置为PAL制式,出4路BT656视频,本设计只使用其中一路;FPGA接收到BT656视频视频后送入4通道分离模块,该模块用于分离出4路复合视频;然后分离出的复合视频送入BT565解码模块,该模块用于将BT565视频解码为YUV422视频;YUV422视频再送入Xiinx官方的Video In To AXI4-Stream IP核转换为AXI4-Stream视频流输出;然后再送入Xiinx官方的VDMA IP核做图像缓存,VDMA配置为4帧缓存,缓存介质为DDR4;缓存视频从DDR读出后送入Xiinx官方的Video Processing Subsystem IP核做去隔行处理,将隔行视频转换为逐行视频;然后再送入Xiinx官方的Video Mixer IP核做视频格式转换和视频叠加处理,将YUV422转换为RGB888,同时在1920x1080黑色背景下叠加720x576的PAL视频;然后再送入Xiinx官方的AXI4-Stream to Video Out IP核做视频流转换,将AXI4-Stream视频流转换为Native视频流;最后Native视频流送入RGB888转HDMI模块输出HDMI差分视频流;再外接显示器即可显示采集到的PAL视频;该方案适用于Xilinx UltraScale系列FPGA做PAL视频解码方案;

本博客详细描述了Xilinx系列FPGA基于TW2867芯片实现PAL视频解码方案的设计方案,工程代码可综合编译上板调试,可直接项目移植,适用于在校学生、研究生项目开发,也适用于在职工程师做学习提升,可应用于医疗、军工等行业的高速接口或图像处理领域;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;

免责声明

本工程及其源码即有自己写的一部分,也有网络公开渠道获取的一部分(包括CSDN、Xilinx官网、Altera官网以及其他开源免费获取渠道等等),若大佬们觉得有所冒犯,请私信批评教育;部分模块源码转载自上述网络,版权归原作者所有,如有侵权请联系我们删除;基于此,本工程及其源码仅限于读者或粉丝个人学习和研究,禁止用于商业用途,若由于读者或粉丝自身原因用于商业用途所导致的法律问题,与本博客及博主无关,请谨慎使用。。。

2、相关方案推荐

我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目

其实一直有朋友反馈,说我的博客文章太多了,乱花渐欲迷人,自己看得一头雾水,不方便快速定位找到自己想要的项目,所以本博文置顶,列出我目前已有的所有项目,并给出总目录,每个项目的文章链接,当然,本博文实时更新。。。以下是博客地址:
点击直接前往

我这里已有的PAL视频解码方案

我这里有多种FPGA解码PAL视频的方案,既有PAL解码HDMI输出,也有缩放拼接输出等等,感兴趣的可以去看我的PAL视频解码专栏,专栏地址:
点击直接前往

3、工程详细设计方案

工程设计原理框图

工程设计原理框图如下:
在这里插入图片描述

输入PAL相机

视频输入为PAL制式的CCD模拟相机,输入分辨率为标准的720x576的PAL隔行视频;某宝价格也就几十块钱,我用的如下:
在这里插入图片描述
需要注意的是,PAL制式的CCD相机是隔行的模拟视频;大自然的信号都是模拟的,视频信号也不例外。视频信号是指电视信号、静止图象信号和可视电视图像信号。视频信号分为三种制式:PAL、NTSC 和 SECAM,接下来简单介绍一下这对于后期调试电路很有帮助。PAL 制又称为帕尔制。PAL 是英文 Phase Alteration Line 的缩写,意思是逐行倒相,也属于同时制。“PAL”有时亦被用来指 625 线,每秒 25 格,隔行扫描,PAL 色彩编码的电视制式。NTSC 是 National Television Standards Committee 的缩写,意思是“(美国)国家电视标准委员会”。NTSC 负责开发一套美国标准电视广播传输和接收协议。SECAM 制式,又称塞康制,SECAM 是法文 Sequentiel Couleur A Memoire 缩写,意为“按顺序传送彩色与存储”,是一个首先用在法国模拟彩色电视系统。这只是简单的概述,关于 PAL、NTSC 和 SECAM 更详细的资料请参考视频技术手册。既然 PAL、NTSC、SECAM 都是模拟信号,FPGA 处理的是数字信号(有些 FPGA内部自带 AD,可以处理模拟信号,例如 Altera 的 MAX10),因此中间需要一个芯片做转换,也就是一个 ADC,学名叫做视频解码芯片,本设计使用TW2867作为视频解码芯片。

然后简单区分一下隔行扫描(Interlace scan)和逐行扫描(Progressive scan)的概念。如下图所示,这是隔行扫描示意图,也就是先显示奇数行,然后再显示偶数行,这只是其中一种隔行扫描的方式,用途比较广泛,除此之外还有隔 2 行、隔 3 行扫描。
在这里插入图片描述
如下图所示,这是逐行扫描示意图,也就从第一行扫描,一直扫描到最后一行。目前显示器是逐行扫描的。
在这里插入图片描述

TW2867芯片解读

本次设计使用的是专用模拟视频解码芯片 TW2867,支持 4 路模拟视频输入,4 路模拟音频输入,1 路音频输出,视频输出是标准 BT656 格式。由于 FPGA 引脚限制,MIS603 音频部分没有做;TW2867输入 4 路模拟视频信号,输出YUV422数字视频流,每路视频流是 BT656 格式,BT656 视频时钟 27MHz,4 路复合 =27MHzx4=108MHz,视频接口连接到 FPGA。TW2867视频输出引脚说明如下:
在这里插入图片描述
对于 4 路复合视频时钟 108MHz,对硬件要求很高,数据线和时钟线等长布线。TW2867 内部有很多寄存器,在此给出几个常用的寄存器及其含义,更多的内容请参考 TW2867 数据手册。输出使能控制和时钟输出控制:
在这里插入图片描述
在这个寄存器中主要关心bit6配置为1,输出使能;bit3-2配置为0,CLKNO1输出27MHz时钟,bit1-0 配置为 2,CLKPO1 输出108MHz 时钟,通过这 2 个时钟可以把 4 路视频信号分开。这个寄存器配置为 0x42。
在这里插入图片描述
Bit6:配置为 1,标准 ITU-R656 格式。
Bit5-4:选择视频复合后输出引脚,配置为 1,从 CHID1 输出。
Bit3:配置为 0,正常 ITU-R656 格式。
Bit2:配置为 0,输出视频中有 EAV-SAV 信号。
Bit1:配置为 1,bit7-4 是 EAV/SAV 编码。
Bit0:配置为 0,奇数场和偶数场行数相等。
综上,这个寄存器配置为 0x52。
视频通道输出控制:
在这里插入图片描述
这个寄存器配置为 0x02,4 路视频通过时分复用到 VD1[7:0]输出,硬件设计连接到 VD1。视频功能控制如下:
在这里插入图片描述
Bit7:配置为 0,视频视频数据输出限制到 0-254。
Bit6:配置为 1,ACKG 的输入参考是 ASYNP。
Bit5:配置为 0,输出格式是 YUV422 格式。
Bit4:配置为 1。
Bit3:配置为 0,仅用于测试。
Bit2:配置为 0,消隐时数据输出 0x80 和 0x10。
Bit1:配置为 0,ITU-R BT656 同步信号在消隐部分。
Bit0:配置为 1,HACTIVE 在垂直消隐期间使能。
这个寄存器配置为 0x51。

之前介绍了 BT656 格式时钟 27MHz 的来源,TW2867 支持 4 路实时 BT656 视频,采样时分复用,最大时钟频率是 108MHz,因此需要一个 108MHz 的时钟输入引脚,考虑到方便解调出每路视频信号增加了一个 27MHz 的时钟输入信号,再加上 8 根数据,这样 10 根线就可以输入 4 路视频信号,在硬件设计上大大简化,降低了布线的复杂度。如下图所示,TW2867 在 4 路视频复合时的时序图,那就是 4 个通道视频轮流输出,即通道 1 视频数据、通道 2 视频数据、通道 3 视频数据、通道 4 视频数据,然后重复。
在这里插入图片描述
通过了解视频数据复合方式,那解复合程序就可以设计了,那面说说思路。采用时分复用,每个通道数据轮流输出,那就需要一个计数器实现把每个通道的数据分离,即将 108MHz 时钟数据分成 4 个 27MHz 时钟数据。由于是 4 路视频,需要产生一个模长为 4 的计数器,根据计数器的数据把数据分配到 4 个视频通道上。详细内容请参考工程代码。

4通道复合视频分离模块

4通道复合视频分离模块将TW2867解码后的4路复合视频分离出来,功能非常简单,顶层接口如下:
在这里插入图片描述
将模块顶层直接拖入Block Design中,如下:
在这里插入图片描述

BT656视频解码模块

BT656视频解码模块将TW2867解码后的BT656视频解码为YUV422视频,其中BT656数据格式如下:
在这里插入图片描述
如上图所示是一行 BT656 数据结构,分成 4 段:EAV(4-byte)、BLANKING(280-byte)、SAV(4-byte)和有效数据(1440-byte),接下来分别介绍。BLANKING:280-byte,0x80 和 0x10 交替出现。有效数据:1440-byte,一共 720 个像素,Y 占 720 个数据,Cb 和 Cr 分别占 360 个数据。EAV 和 SAV:分别占 4-byte,前三个字节相同,是 0XFF,0X00,0X00,最后一个不同,根据这个字节进行解码。
在这里插入图片描述
EAV 和 SAV 的结构如上图所示,其中 F、V、H 含义:
在这里插入图片描述
F 是场信号,0 表示场 1,1 表示场 2,也就是奇偶场。V 表示场有效,0 表示场数据有效,1 表示是垂直消隐。H 区分 EAV 和 SAV 信号。P3-P0 只是校验保护位,由 F、V、H 进行异或运算得到。如下图所示,这是一帧 BT656 数据格式,一共包括 625 行,每行 1728 个字节,有效数据大小是 720x576,分成 2 场,每场 720x288,其余行是消隐信号。
在这里插入图片描述
BT656 规定一行有 1728 个字节,一帧有 625 行,每秒传输 25 帧数据,8bit 总线并行传输。1728x625x25=27000000=27M,经过计算就知道 27MHz 的来历了。在这 625行中有用的数据是 576 行,在 BT656 视频格式中有效视频大小是 720x576,其余的当做消隐处理。BT656视频解码模块顶层接口如下:
在这里插入图片描述
将模块顶层直接拖入Block Design中,如下:
在这里插入图片描述

Video In To AXI4-Stream

解码后的YUV422视频再送入Xiinx官方的Video In To AXI4-Stream IP核转换为AXI4-Stream视频流输出;Block Design中如下:
在这里插入图片描述

VDMA图像缓存

解码后的YUV422视频再送入Xiinx官方的VDMA IP核做图像缓存,VDMA配置为4帧缓存,缓存介质为DDR3或DDR4;Block Design中如下:
在这里插入图片描述

Video Processing Subsystem 去隔行

缓存视频从DDR读出后送入Xiinx官方的Video Processing Subsystem IP核做去隔行处理,将隔行视频转换为逐行视频;Video Processing Subsystem集成了多种功能,本设计配置为去隔行,如下:
在这里插入图片描述
Video Processing Subsystem在Block Design中如下:
在这里插入图片描述

Video Mixer 视频叠加

去隔行后的视频再送入Xiinx官方的Video Mixer IP核做视频格式转换和视频叠加处理,将YUV422转换为RGB888,同时在1920x1080黑色背景下叠加720x576的PAL视频;Video Mixer在Block Design中如下:
在这里插入图片描述

HDMI 视频输出

然后再送入Xiinx官方的AXI4-Stream to Video Out IP核做视频流转换,将AXI4-Stream视频流转换为Native视频流;最后Native视频流送入RGB888转HDMI模块输出HDMI差分视频流;再外接显示器即可显示采集到的PAL视频;Block Design中如下:
在这里插入图片描述

工程源码架构

本设计提供3套工程源码,以工程源码1为例,工程Block Design截图如下:
在这里插入图片描述
本设计提供3套工程源码,以工程源码1为例,综合后的源码截图如下:
在这里插入图片描述
工程源码需要运行MicroBlaze软核,用于配置VDMA、VPSS、Video Mixer等;SDK工程架构如下:
在这里插入图片描述
工程编译后资源消耗低、功耗低、时序收敛,符合工程项目应用要求,如下:
在这里插入图片描述

4、工程源码1详解:Kintex7-325T 版本

开发板FPGA型号:Xilinx–Kintex7–xc7k325tffg676-2;
开发环境:Vivado2019.1;
输入:PAL制式的CCD模拟相机,720x576的PAL隔行视频;
输出:HDMI,1080P黑色背景下的720x576有效视频区域;
PAL视频解码方案:TW2867芯片方案;
图像缓存方案:Xilinx官方VDMA方案,4帧缓存,板载DDR3为介质;
视频叠加输出方案:Xilinx官方Video Mixer方案
工程作用:此工程目的是让读者掌握FPGA基于TW2867实现PAL视频解码的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第3章节“工程源码架构“小节内容;
工程的资源消耗和功耗如下:
在这里插入图片描述

5、工程源码2详解:Virtex7-690T 版本

开发板FPGA型号:Xilinx–Virtex7–690T–xc7vx690tffg1761-3;
开发环境:Vivado2019.1;
输入:PAL制式的CCD模拟相机,720x576的PAL隔行视频;
输出:HDMI,1080P黑色背景下的720x576有效视频区域;
PAL视频解码方案:TW2867芯片方案;
图像缓存方案:Xilinx官方VDMA方案,4帧缓存,板载DDR3为介质;
视频叠加输出方案:Xilinx官方Video Mixer方案
工程作用:此工程目的是让读者掌握FPGA基于TW2867实现PAL视频解码的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第3章节“工程源码架构“小节内容;
工程的资源消耗和功耗如下:
在这里插入图片描述

6、工程源码3详解:KU060 版本

开发板FPGA型号:Xilinx–Kintex UltraScale–xcku060-ffva1156-2-i;
开发环境:Vivado2019.1;
输入:PAL制式的CCD模拟相机,720x576的PAL隔行视频;
输出:HDMI,1080P黑色背景下的720x576有效视频区域;
PAL视频解码方案:TW2867芯片方案;
图像缓存方案:Xilinx官方VDMA方案,4帧缓存,板载DDR4为介质;
视频叠加输出方案:Xilinx官方Video Mixer方案
工程作用:此工程目的是让读者掌握FPGA基于TW2867实现PAL视频解码的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第3章节“工程源码架构“小节内容;
工程的资源消耗和功耗如下:
在这里插入图片描述

7、工程移植说明

vivado版本不一致处理

1:如果你的vivado版本与本工程vivado版本一致,则直接打开工程;
2:如果你的vivado版本低于本工程vivado版本,则需要打开工程后,点击文件–>另存为;但此方法并不保险,最保险的方法是将你的vivado版本升级到本工程vivado的版本或者更高版本;
在这里插入图片描述
3:如果你的vivado版本高于本工程vivado版本,解决如下:
在这里插入图片描述
打开工程后会发现IP都被锁住了,如下:
在这里插入图片描述
此时需要升级IP,操作如下:
在这里插入图片描述
在这里插入图片描述

FPGA型号不一致处理

如果你的FPGA型号与我的不一致,则需要更改FPGA型号,操作如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
更改FPGA型号后还需要升级IP,升级IP的方法前面已经讲述了;

其他注意事项

1:由于每个板子的DDR不一定完全一样,所以MIG IP需要根据你自己的原理图进行配置,甚至可以直接删掉我这里原工程的MIG并重新添加IP,重新配置;
2:根据你自己的原理图修改引脚约束,在xdc文件中修改即可;
3:纯FPGA移植到Zynq需要在工程中添加zynq软核;

8、上板调试验证

准备工作

需要准备的器材如下:
FPGA开发板,可联系博主获得;
TW2867转接板,可联系博主获得;
PAL摄像头,可联系博主获得;
BNC线缆,可联系博主获得;
HDMI显示器;
我的开发板了连接如下:
在这里插入图片描述

PAL视频采集输出演示

PAL视频采集输出演示如下:

PALX1

9、工程代码的获取

代码太大,无法邮箱发送,以某度网盘链接方式发送,
资料获取方式:私,或者文章末尾的V名片。
网盘资料如下:
在这里插入图片描述
此外,有很多朋友给本博主提了很多意见和建议,希望能丰富服务内容和选项,因为不同朋友的需求不一样,所以本博主还提供以下服务:
在这里插入图片描述

### FFmpeg中的视频处理子系统 FFmpeg 提供了一个用于硬件加速的子系统,这使得它能够支持多种视频编码解码操作[^1]。该子系统不仅限于软件实现,还通过集成各种硬件加速技术来提升性能。这些技术通常依赖特定指令集架构的支持,从而优化多媒体数据流的处理效率[^2]。 #### 架构概述 视频处理子系统的架构设计主要围绕以下几个核心模块展开: 1. **输入/输出管理** 输入设备捕获原始视频帧并将其传递给后续处理阶段。此过程可能涉及文件读取、网络传输或其他形式的数据源接入。 2. **编解码器接口** 编解码器负责压缩或解压视频数据。FFmpeg 支持广泛的编解码标准(如 H.264 HEVC),并通过其 API 实现灵活调用。对于某些高性能需求场景,还可以利用 GPU 或专用芯片完成硬解任务。 3. **滤镜链路** 在实际应用中,往往需要对视频内容施加一系列变换效果(裁剪、缩放、色彩校正等)。为此,FFmpeg 设计了一强大的过滤机制允许开发者串联多个独立功能单元形成复杂的工作流程。 4. **同步与时序控制** 为了保证音画一致以及流畅播放体验,时间戳管理缓冲策略显得尤为重要。这部分逻辑确保所有媒体组件按照预定节奏协同运作。 #### 实现细节 具体到代码层面,则需关注几个关键技术点: - 初始化配置参数加载; - 数据结构定义及其内存布局规划; - 跨平台兼容性的考量; 以下是简化版初始化函数示例: ```c AVCodec* codec; AVFormatContext *fmt_ctx = NULL; // 打开容器格式上下文 if (avformat_open_input(&fmt_ctx, filename, NULL, NULL) != 0){ fprintf(stderr,"Could not open file '%s'\n",filename); } ``` 此外,在增强现实领域也有类似概念被提及——即构建一种“可点击的世界”,其中物理交互触发数字化反馈现象[^3]。不过这里讨论的重点仍聚焦传统意义上的视音频信号加工范畴而非新兴AR框架下的特殊语义解释。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

9527华安

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值