BT.656视频信号解码
BT.656视频信号解码
BT.656协议标准
ITU-R BT.601和ITU-R BT.656是ITU-R(国际电信联盟)制定的标准。严格来说ITU-R BT.656是ITU-R BT.601的一个子协议。
两种协议区别在于:
ITU-R BT.601 16位数据传输;Y、U、V信号同时传输,是并行数据,行场同步信号单独输出;
ITU-R BT.656 8/10位数据传输;不需要同步信号,串行数据传输,输出速率是601的2倍,先传Y,再传UV。行场同步信号嵌入在数据流中。
BT.656
对于PAL制式分辨率为720*576来说,每一帧有576行,奇场288行,偶场288行;
去隔行采用的方法:
利用两片存储芯片,采用乒乓交替读写的方式来完成。实现步骤:首先将输入的第一帧图像奇场数据依次隔行存入存储器A中,然后再将偶数场数据隔行插入到存储器A中的奇场数据之间,这样A中就存入了一帧完整的视频帧。同样的方式将第二帧图像奇场和偶场数据依次存入到B中,在对B进行写操作的同时依次逐行从A中读出之前存入的第一帧图像数据。依次类推,通过乒乓操作方式保证存储器A和B分别工作在读写的状态,并不断切换即可完成隔行扫描到逐行扫描的转换。
凡是做模拟信号采集的,很少不涉及BT.656标准的,因为常见的模拟视频信号采集芯片都支持输出BT.656的数字信号,那么,BT.656到底是何种格式呢?
本文将主要介绍 标准的 8bit BT656(4:2:2)YCbCr SDTV(标清)数字视频信号格式,主要针对刚刚入门模拟视频采集的初学者入门之用。
1. 帧的概念(Frame)
一个视频序列是由N个帧组成的,采集图像的时候一般有2种扫描方式,一种是逐行扫描(progressive scanning),一种是隔行扫描(interlaced scanning)。对于隔行扫描,每一帧一般有2个场(field),一个叫顶场(top field),一个叫底场(bottom field)。假设一帧图像是720行,那么,顶场就包含其中所有的偶数行,而底场则包含其中所有的奇数行。
2. 场的概念(field)
注意,上面提到顶场和底场,用的是“包含”二字,而不是说完全由后者组成,因为在BT.656标准中,一个场是由三个部分组成的:
场 = 垂直消隐顶场(First Vertical
Blanking) + 有效数据行(Active Video) + 垂直消隐底场(Second Vertical
Blanking)
对于顶场,有效数据行就是一帧图像的所有偶数行,而底场,有效数据行就是一帧图像的所有奇数行。顶场和底场的空白行的个数也有所不同,那么,对于一个标准的 8bit BT656(4:2:2)SDTV(标清)的视频而言,对于一帧图像,其格式定义如下:
由上图可以知道,对于PAL制式,每一帧有625行,其中,顶场有效数据288行,底场有效数据也是288行,其余行即为垂直消隐信号。为什么是288行?因为PAL制式的SDTV或者D1的分辨率为 720*576,即一帧有576行,故一场为288行。
由上图我们还可以知道,顶场有效数据的起始行为第23行,底场有效数据的起始行为第335行。
另外,上图中的 F 标记奇偶场,V标记 是否为垂直消隐信号。
3. 每一行的组成(Lines)
下面说明每一行的组成,一行是由4个部分组成:
行 = 结束码(EAV) + 水平消隐(Horizontal Vertical
Blanking) + 起始码(SAV) + 有效数据(Active Video)
典型的一行数据组成如下图所示:
起始码(SAV)和结束码(EAV),它是标志着一行的开始结束的重要标记,也包含了其他的一些重要的信息,后面将会讲到。
为什么水平消隐 是280字节,这个我暂时还没搞清楚,不知道是不是标准定义的。
为什么一行中的有效数据是 1440 字节? 因为PAL制式的SDTV或者D1的分辨率为 720*576,即一行有720个有效点,由于采集的是彩色图像,那么一行就是由亮度信息(Y)和色差信息(CbCr)组成的,由于是 YCbCr422格式,故一行中有720列Y,720列CbCr,这样,一行的有效字节数就自然为 720 x 2 = 1440 字节了。
4. EAV和SAV
EAV和SAV都是4个字节(Bytes),由上面的图可以知道,SAV后面跟着的就是有效的视频数据了。那么,EAV和SAV的格式是怎么样的呢?
EAV和SAV的4个字节的格式规定如下(下面以16进制表示):FF 00 00 XY
其中,前三个字节为固定的,必须是FF 00 00,而第4个字节(XY)是根据场、消隐信息而定的,其8个bit含义如下: 1 F V H P3 P2
P1 P0
其中,F:标记场信息,传输顶场时为0,传输底场时为1
V:标记消隐信息,传输消隐数据时为1,传输有效视频数据时为0
H:标记EAV还是SAV,SAV为0,EAV为1
而 P0~P3为保护比特,其值取决于F、H、V,起到校验的作用,计算方法如下:
对8bit BT656(4:2:2)数字视频信号数据进行解码
(注:bt.656视频信号的来源实际上是TW9912芯片输出的视频信号)
测试平台采用Alinx7020板卡,将转换得到的RGB数据以HDMI编码输出显示(参照板卡例程);测试结果图像显示起始有几行是黑条,考虑可能是模块中是从起始行就算有效数据,而bt.656逐行输出可能是从23行之后才是有效视频数据的,本人未做进一步测试;
创建RTL模块如下:
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer:
//
// Create Date: 2020/05/09 11:09:41
// Design Name:
// Module Name: top
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////
module bt656_to_rgb
(
//
system reset
input RST, // system reset
// BT656 input
input CLK_i, //
clock
input [7:0] bt_data_i, //
video data
input VSYNC_i, // bt656 vertical synchronization
input HSYNC_i, //
bt656 horizontal synchronization
//
output
output post_frame_clk_o, //
pix_out_clock
output
wire post_frame_href, // Hs /de
output wire post_frame_vsync, // Vs
output Video_active, // data enable
output wire[23:0] post_img_rgb_0 // video data output
);
//define
wire
clk27,clk54;
reg[10:0]
pixcnt_total;
reg[7:0]
Yreg,Crreg,Cbreg;
reg
hs_in_d;
reg [7:0] pix_data;
reg [15:0] pix_cnt;
reg active_video;
reg [15:0] row_cnt;
reg [2:0] state;
reg hs_,
vs_, hs_reg, vs_reg;
wire [7:0] R_o1 ,G_o1
,B_o1;
reg [7:0] R_o2 ,G_o2
,B_o2;
always @(posedge CLK_i or posedge RST)
begin
if(RST)
hs_in_d <= 0;
else
begin
hs_in_d <=
HSYNC_i;
end
end
reg
active_video_de;
reg
Video_active_reg;
//reg [2:0] state;
always @(posedge CLK_i or posedge RST)
begin
if(RST) begin
pixcnt_total <= 0;
pix_cnt <= 0;
active_video_de <= 0;
row_cnt <= 0;
hs_ <= 0;
vs_ <= 0;
end
else
case(state)
3'd0: begin
if(VSYNC_i) begin
state <= 3'd1;
end
end
3'd1: begin
if(HSYNC_i &&
!hs_in_d) begin
pixcnt_total <=
0;
end
else begin
pixcnt_total <=
pixcnt_total + 1;
end
//720个像素 720个Y亮度分量,360个cb、cr色度分量 720*576
if((pixcnt_total >= 288)
&& (pixcnt_total <= 1728))
begin
pix_cnt <= pix_cnt + 1;
active_video_de <= 1;
end
else begin
pix_cnt <= 0;
active_video_de <= 0;
end
//行
if(pix_cnt == 1440) begin
hs_ <= 1;
row_cnt <= row_cnt + 1;
end
else begin
hs_ <= 0;
end
if(row_cnt == 576) begin
//if(row_cnt == 720) begin
//if(row_cnt == 582) begin
//if(row_cnt == 625) begin
state <= 3'd0;
row_cnt <= 0;
vs_ <= 1;
Video_active_reg <= 1;
end
else begin
vs_ <= 0;
Video_active_reg <= 0;
end
end
endcase
end
assign
Video_active = Video_active_reg;
wire [7:0] post_img_red_0;
//Processed Image Red output
wire [7:0] post_img_green_0; //Processed Image Green
output
wire [7:0] post_img_blue_0; //Processed Image Blue output
Video_Image_Processor u_Video_Image_Processor_0
(
//global clock
.clk (CLK_i), //cmos video pixel clock
.rst_n (1),
//global reset
.per_frame_vsync (vs_), //Prepared Image data vsync valid signal
.per_frame_href (active_video_de),
//Prepared Image data href vaild signal
.per_frame_clken (active_video_de),
//Prepared Image data output/capture enable clock
.per_frame_YCbCr (bt_data_i), //Prepared
Image red data to be processed
//Image data has been processd
.post_frame_vsync (post_frame_vsync), //Processed Image data vsync
valid signal
.post_frame_href (post_frame_href), //Processed
Image data href vaild signal
.post_frame_clken (), //Processed
Image data output/capture enable clock
.post_img_red (post_img_red_0), //Processed Image Red output
.post_img_green (post_img_green_0), //Processed
Image Green output
.post_img_blue (post_img_blue_0) //Processed Image Blue output
);
assign
post_frame_clk_o = CLK_i;
assign
post_img_rgb_0 = {post_img_red_0,post_img_green_0,post_img_blue_0};
endmodule
子模块1如下:
/*-------------------------------------------------------------------------
| Oooo |
+-------------------------------oooO--( )-----------------------------+
( ) )
/
\ ( (_/
\_)
-----------------------------------------------------------------------*/
`timescale
1ns/1ns
module
Video_Image_Processor
(
//global clock
input clk, //cmos
video pixel clock
input rst_n, //global
reset
//Image data prepred to be processd
input per_frame_vsync, //Prepared Image data vsync valid signal
input per_frame_href, //Prepared Image data href
vaild signal
input per_frame_clken, //Prepared Image data output/capture enable
clock
input [7:0] per_frame_YCbCr, //Prepared Image data of YCbCr 4:2:2 {CbY} {CrY}
//Image data has been processd
output post_frame_vsync, //Processed Image data vsync valid signal
output post_frame_href, //Processed Image data href vaild signal
output post_frame_clken, //Processed Image data output/capture enable
clock
output [7:0] post_img_red, //Processed
Image Red output
output [7:0] post_img_green, //Processed
Image Green output
output [7:0] post_img_blue //Processed
Image Blue output
);
//-------------------------------------
//Convert the
YCbCr4:2:2 format to YCbCr4:4:4 format.
//CMOS YCbCr444 data output
wire post1_frame_vsync; //Processed Image data vsync valid
signal
wire post1_frame_href; //Processed Image data href vaild signal
wire post1_frame_clken; //Processed Image data output/capture
enable clock
wire [7:0] post1_img_Y; //Processed Image data of YCbCr
4:4:4
wire [7:0] post1_img_Cb; //Processed Image data of
YCbCr 4:4:4
wire [7:0] post1_img_Cr; //Processed Image data of
YCbCr 4:4:4
VIP_YCbCr422_YCbCr444 u_VIP_YCbCr422_YCbCr444
(
//global clock
.clk (clk), //cmos
video pixel clock
.rst_n (rst_n), //system reset
//Image data prepred to be processd
.per_frame_vsync (per_frame_vsync), //Prepared
Image data vsync valid signal
.per_frame_href (per_frame_href), //Prepared Image data href vaild signal
.per_frame_clken (per_frame_clken), //Prepared
Image data output/capture enable clock
.per_frame_YCbCr (per_frame_YCbCr), //Prepared
Image red data to be processed
//Image data has been processd
.post_frame_vsync (post1_frame_vsync), //Processed Image data vsync valid signal
.post_frame_href (post1_frame_href), //Processed
Image data href vaild signal
.post_frame_clken (post1_frame_clken), //Processed Image data output/capture
enable clock
.post_img_Y (post1_img_Y), //Processed Image brightness output
.post_img_Cb (post1_img_Cb), //Processed
Image blue shading output
.post_img_Cr (post1_img_Cr) //Processed
Image red shading output
);
//-------------------------------------
//Convert the
YCbCr444 format to RGB888 format.
VIP_YCbCr444_RGB888 u_VIP_YCbCr444_RGB888
(
//global clock
.clk (clk), //cmos
video pixel clock
.rst_n (rst_n), //system reset
//Image data prepred to be processd
.per_frame_vsync (post1_frame_vsync), //Prepared
Image data vsync valid signal
.per_frame_href (post1_frame_href), //Prepared Image data href vaild signal
.per_frame_clken (post1_frame_clken), //Prepared
Image data output/capture enable clock
.per_img_Y (post1_img_Y), //Prepared Image data
of Y
.per_img_Cb (post1_img_Cb), //Prepared Image data
of Cb
.per_img_Cr (post1_img_Cr), //Prepared Image data
of Cr
//Image data has been processd
.post_frame_vsync (post_frame_vsync), //Processed Image data vsync
valid signal
.post_frame_href (post_frame_href), //Processed
Image data href vaild signal
.post_frame_clken (post_frame_clken), //Processed Image data
output/capture enable clock
.post_img_red (post_img_red), //Prepared Image green data to be processed
.post_img_green (post_img_green), //Prepared Image green data to be processed
.post_img_blue (post_img_blue) //Prepared Image blue data to be processed
);
Endmodule
子模块2如下:
`timescale 1ns/1ns
module VIP_YCbCr422_YCbCr444
(
//global
clock
input clk, //cmos
video pixel clock
input rst_n, //global
reset
//CMOS
16Bit YCbCr data input: {CbYCrYCbYCrY}
input per_frame_vsync, //Prepared Image data vsync valid signal
input per_frame_href, //Prepared Image data href
vaild signal
input per_frame_clken, //Prepared Image data output/capture enable
clock
input [7:0] per_frame_YCbCr, //Prepared
Image data of YCbCr 4:2:2 CbYCrY
//CMOS
YCbCr444 data output
output post_frame_vsync, //Processed Image data vsync valid
signal
output post_frame_href, //Processed Image data href vaild signal
output post_frame_clken, //Processed Image data output/capture enable
clock
output reg [7:0] post_img_Y, //Processed Image data of YCbCr 4:4:4
output reg [7:0] post_img_Cb, //Processed Image data of YCbCr 4:4:4
output reg [7:0] post_img_Cr //Processed Image data of YCbCr 4:4:4
);
//------------------------------------------
//lag n pixel clocks
reg [4:0] post_frame_vsync_r;
reg [4:0] post_frame_href_r;
reg [4:0] post_frame_clken_r;
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
begin
post_frame_vsync_r
<= 0;
post_frame_href_r
<= 0;
post_frame_clken_r
<= 0;
end
else
begin
post_frame_vsync_r
<= {post_frame_vsync_r[3:0],
per_frame_vsync};
post_frame_href_r
<= {post_frame_href_r[3:0], per_frame_href};
post_frame_clken_r
<= {post_frame_clken_r[3:0], per_frame_clken};
end
end
assign post_frame_vsync
= post_frame_vsync_r[4];
assign post_frame_href
= post_frame_href_r[4];
assign post_frame_clken
= post_frame_clken_r[4];
wire yuv_process_href = per_frame_href
|| post_frame_href_r[3];
wire yuv_process_clken = per_frame_clken
|| post_frame_clken_r[3];
//-------------------------------------------
//convert YCbCr422 to YCbCr444
reg [3:0] yuv_state;
reg [7:0] mY0, mY1, mY2, mY3;
reg [7:0] mCb0, mCb1;
reg [7:0] mCr0, mCr1;
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
begin
yuv_state
<= 4'd0;
{mY0,
mCb0, mCr0} <= {8'h0, 8'h0, 8'h0};
mY1
<= 8'h0;
{mY2,
mCb1, mCr1} <= {8'h0, 8'h0, 8'h0};
mY3 <= 8'h0;
{post_img_Y,
post_img_Cb, post_img_Cr} <= {8'h0, 8'h0, 8'h0};
end
else
if(yuv_process_href) //lag 2 data
enable clock and need 2 more clocks
begin
if(yuv_process_clken) //lag 2 data enable clock and need 2 more
clocks
case(yuv_state) //---YCbCr
4'd0: begin //reg
p0
yuv_state <= 4'd1;
{mCb0} <= per_frame_YCbCr;
end
4'd1: begin //reg
p1
yuv_state <= 4'd2;
{mY0} <= per_frame_YCbCr;
end
4'd2: begin //p0; reg p2
yuv_state <= 4'd3;
{mCr0} <= per_frame_YCbCr;
end
4'd3: begin //p1; reg p4
yuv_state <= 4'd4;
{mY1} <= per_frame_YCbCr;
end
4'd4: begin //p2; reg p0
yuv_state <= 4'd5;
{mCb1} <= per_frame_YCbCr;
{post_img_Y, post_img_Cb, post_img_Cr} <=
{mY0, mCb0, mCr0};
end //p4; reg
p1
4'd5: begin
yuv_state <= 4'd6;
{mY2} <= per_frame_YCbCr;
{post_img_Y, post_img_Cb, post_img_Cr}
<= {mY1, mCb0, mCr0};
end
4'd6: begin //p2; reg p0
yuv_state <= 4'd7;
{mCr1} <= per_frame_YCbCr;
end //p4; reg
p1
4'd7: begin
yuv_state <= 4'd8;
{mY3} <= per_frame_YCbCr;
end
4'd8: begin //p2; reg p0
yuv_state <= 4'd9;
{mCb0} <= per_frame_YCbCr;
{post_img_Y, post_img_Cb, post_img_Cr} <=
{mY2, mCb1, mCr1};
end //p4; reg
p1
4'd9: begin
yuv_state <= 4'd10;
{mY0} <= per_frame_YCbCr;
{post_img_Y, post_img_Cb, post_img_Cr}
<= {mY3, mCb1, mCr1};
end
4'd10: begin //p2; reg p0
yuv_state <= 4'd11;
{mCr0} <= per_frame_YCbCr;
end //p4; reg
p1
4'd11: begin
yuv_state <= 4'd4;
{mY1} <= per_frame_YCbCr;
end
endcase
else
begin
yuv_state <= yuv_state;
{mY0, mCb0, mCr0} <= {mY0, mCb0, mCr0};
mY1 <= mY1;
{mY2, mCb1, mCr1} <= {mY2, mCb1, mCr1};
mY3 <=
mY3;
{post_img_Y, post_img_Cb, post_img_Cr}
<= {post_img_Y, post_img_Cb, post_img_Cr};
end
end
else
begin
yuv_state <= 3'd0;
{mY0, mCb0, mCr0} <= {8'h0, 8'h0, 8'h0};
{mY1, mCb1, mCr1} <= {8'h0, 8'h0, 8'h0};
{post_img_Y, post_img_Cb, post_img_Cr} <=
{8'h0, 8'h0, 8'h0};
end
end
endmodule
子模块3如下:
`timescale 1ns/1ns
module VIP_YCbCr444_RGB888
(
//global
clock
input clk, //cmos
video pixel clock
input rst_n, //global
reset
//CMOS
YCbCr444 data output
input per_frame_vsync, //Prepared Image data vsync valid signal
input per_frame_href, //Prepared Image data href
vaild signal
input per_frame_clken, //Prepared Image data output/capture enable
clock
input [7:0] per_img_Y, //Prepared
Image data of Y
input [7:0] per_img_Cb, //Prepared
Image data of Cb
input [7:0] per_img_Cr, //Prepared
Image data of Cr
//CMOS
RGB888 data output
output post_frame_vsync, //Processed Image data vsync valid
signal
output post_frame_href, //Processed Image data href vaild signal
output post_frame_clken, //Processed Image data output/capture enable
clock
output [7:0] post_img_red, //Prepared
Image green data to be processed
output [7:0] post_img_green, //Prepared
Image green data to be processed
output [7:0] post_img_blue //Prepared
Image blue data to be processed
);
//--------------------------------------------
/*********************************************
R =
1.164(Y-16) + 1.596(Cr-128)
G =
1.164(Y-16) - 0.391(Cb-128) - 0.813(Cr-128)
B =
1.164(Y-16) + 2.018(Cb-128)
->
R =
1.164Y + 1.596Cr - 222.912
G =
1.164Y - 0.391Cb - 0.813Cr + 135.488
B =
1.164Y + 2.018Cb - 276.928
->
R
<< 9 = 596Y +
817Cr - 114131
G
<< 9 = 596Y - 200Cb - 416Cr + 69370
B
<< 9 = 596Y + 1033Cb - 141787
**********************************************/
reg [19:0] img_Y_r1; //8 + 9 + 1 = 18Bit
reg [19:0] img_Cb_r1, img_Cb_r2;
reg [19:0] img_Cr_r1, img_Cr_r2;
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
begin
img_Y_r1
<= 0;
img_Cb_r1
<= 0; img_Cb_r2 <= 0;
img_Cr_r1
<= 0; img_Cr_r2 <= 0;
end
else
begin
img_Y_r1 <= per_img_Y
* 18'd596;
img_Cb_r1
<= per_img_Cb * 18'd200;
img_Cb_r2 <= per_img_Cb
* 18'd1033;
img_Cr_r1
<= per_img_Cr * 18'd817;
img_Cr_r2 <= per_img_Cr
* 18'd416;
end
end
//--------------------------------------------
/**********************************************
R
<< 9 = 596Y +
817Cr - 114131
G
<< 9 = 596Y - 200Cb - 416Cr + 69370
B
<< 9 = 596Y + 1033Cb - 141787
**********************************************/
reg [19:0] XOUT;
reg [19:0] YOUT;
reg [19:0] ZOUT;
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
begin
XOUT
<= 0;
YOUT
<= 0;
ZOUT
<= 0;
end
else
begin
XOUT
<= (img_Y_r1 + img_Cr_r1 - 20'd114131)>>9;
YOUT
<= (img_Y_r1 - img_Cb_r1 - img_Cr_r2 + 20'd69370)>>9;
ZOUT
<= (img_Y_r1 + img_Cb_r2 - 20'd141787)>>9;
end
end
//------------------------------------------
//Divide 512 and get the result
//{xx[19:11], xx[10:0]}
reg [7:0] R, G, B;
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
begin
R
<= 0;
G
<= 0;
B
<= 0;
end
else
begin
R
<= XOUT[10] ? 8'd0 : (XOUT[9:0] > 9'd255) ? 8'd255 : XOUT[7:0];
G
<= YOUT[10] ? 8'd0 : (YOUT[9:0] > 9'd255) ? 8'd255 : YOUT[7:0];
B
<= ZOUT[10] ? 8'd0 : (ZOUT[9:0] > 9'd255) ? 8'd255 : ZOUT[7:0];
end
end
//------------------------------------------
//lag n clocks signal sync
reg [2:0] post_frame_vsync_r;
reg [2:0] post_frame_href_r;
reg [2:0] post_frame_clken_r;
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
begin
post_frame_vsync_r
<= 0;
post_frame_href_r
<= 0;
post_frame_clken_r
<= 0;
end
else
begin
post_frame_vsync_r
<= {post_frame_vsync_r[1:0],
per_frame_vsync};
post_frame_href_r
<= {post_frame_href_r[1:0], per_frame_href};
post_frame_clken_r
<= {post_frame_clken_r[1:0], per_frame_clken};
end
end
assign post_frame_vsync
= post_frame_vsync_r[2];
assign post_frame_href
= post_frame_href_r[2];
assign post_frame_clken
= post_frame_clken_r[2];
assign post_img_red = post_frame_href
? R : 8'd0;
assign
post_img_green = post_frame_href ? G : 8'd0;
assign
post_img_blue = post_frame_href ? B : 8'd0;
endmodule
BT.656视频信号解码的更多相关文章
- 标准BT.656并行数据结构
转自网络,感谢原作者和转载者. 还有参考:百科http://baike.baidu.com/link?url=bqBT3S7pz_mRJoQE7zkE0K-R1RgQ6FmHNOZ0EjhlSAN_o ...
- ITU-R BT.656 协议
ITU-R BT.601和ITU-R BT.656国际电信联盟(International Telecommunication Union)无线通信部门(ITU-R)制定的标准.严格来说,ITU-R ...
- BT.656
转自http://www.cnblogs.com/s_agapo/archive/2012/04/08/2437775.html 凡是做模拟信号采集的,很少不涉及BT.656标准的,因为常见的模拟视频 ...
- BT.656 NTSC制式彩条生成模块(verilog)
BT.656 NTSC制式彩条生成模块(verilog) 1.知识储备 隔行扫描是将一副图像分成两场扫描,第一场扫描第1,2,5,7...等奇数行,第二场扫描2,4,6,8...等偶数行,并把扫奇数行 ...
- [转载]BT656/BT601/BT1120协议
[转载] BT656/BT601/BT1120协议以及DM365/DM355/DM6467上使用的YUV颜色空间说明 ITU-R BT.601和ITU-RBT.656国际电信联盟(Interna ...
- 转接口IC GM7150BN/ GM7150BC:CVBS转BT656芯片 低功耗NTSC/PAL 视频解码器
1 概述 GM7150 是一款9 位视频输入预处理芯片,该芯片采用CMOS 工艺,通过I2C 总线与PC 或DSP 相连构成应用系统. 它内部包含1 个模拟处理通道,能实现CVBS.S-V ...
- BT656跟BT1120和BT709有什么区别
601是SDTV的数据结构 656是SDTV的interface709是HDTV的数据结构 1120是HDTV的interface从数据结构上 都是Y Cb Cr只是SDTV用4:2:2 HDTV ...
- 达芬奇TI DVSDK之视频数据流过程分析
作者:openwince@gmail.com 博客:http://www.cnblogs.com/tinz 本文的copyright归openwince@gmail.com所有,使用GPL发布, ...
- 基于DM642 RAW采集格式的视频驱动开发及应用
摘 要:为解决C64X系列数字信号处理器(DSP)视频驱动不能应用于原始数据格式(RAW)采集格式的问题,设计了DM642和电耦合元件(CCD)高清传感器的数据传输接口,并分析.修改用于标准格式的视频 ...
随机推荐
- 深入剖析ThreadLocal原理
描述 ThreadLocal,很多地方叫做线程本地变量,也有些地方叫做线程本地存储.ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量. 通常使用静态的变 ...
- Visual Studio 2019 Professional 激活
Visual Studio 2019 Professional下载地址>https://visualstudio.microsoft.com/zh-hant/thank-you-download ...
- 软链接 vs. 硬链接
链接大家都用过,比如 Windows 中的快捷方式就是一种链接,可是 Linux 里又分硬链接和软链接,它们表示什么意思,又有什么区别呢,本文来给大家做一个解释. Inode 索引节点 要想理解硬链 ...
- java-五大内存图
jrm—Java虚拟机在进行程序运行时会向cpu申请一个内存约为10%左右,该内存被jrm分为5大区域 一:栈内存(stack)用来存储变量 当栈消失时,变量也随之消失.二:堆内存(heap)在Jav ...
- Java 基础系列知识梳理
- Kivy中显示汉字的问题
1. kivy中显示中文乱码和提示错误的原因: 编码问题 字体问题 2. 字体问题的解决 可以下载支持中文的字体文件ttf,我这里使用了微软雅黑中文简体msyh.ttf.我们在编写布局时可以直接在相关 ...
- JavaScript 实现 冒泡排序
<script> //数组排序(冒泡排序) //冒泡排序是一种算法,把一系列的数据按照一定的循序进行排列显示(从小到大或从大到小) ...
- 【JVM】如何理解强引用、软引用、弱引用、虚引用?
整体架构 强引用 强引用是默认支持,当内存不足的时候,JVM开始垃圾回收,对于强引用的对象,就算是出现了OOM也不会回收对象. 强引用是最常见的普通对象引用,只要还有强引用指向对象,对象就存活,垃圾回 ...
- jchdl - GSL Node
https://mp.weixin.qq.com/s/Oa4qgjIUccu5Y-Jlqcyn_A org.jchdl.model.gsl.core.meta.Node.java gen ...
- 使用Python代码制作GIF动态图
使用Python PIL.Image 制作GIF图片: import PIL.Image 相关模块 img = Image.open(img_name) ...