CN109767380A - 一种图形处理器图像缩放电路及方法 - Google Patents
一种图形处理器图像缩放电路及方法 Download PDFInfo
- Publication number
- CN109767380A CN109767380A CN201811523049.XA CN201811523049A CN109767380A CN 109767380 A CN109767380 A CN 109767380A CN 201811523049 A CN201811523049 A CN 201811523049A CN 109767380 A CN109767380 A CN 109767380A
- Authority
- CN
- China
- Prior art keywords
- pixel
- state
- fifo
- pixels
- accum
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Landscapes
- Image Processing (AREA)
- Controls And Circuits For Display Device (AREA)
Abstract
本发明涉及计算机硬件技术领域,提供一种图形处理器图像缩放电路及方法,电路包括:像素输入FIFO(1)、像素缩放控制电路(2)、像素缓冲区RAM(3)以及像素输出FIFO(4)。方法包括:当zoomx或者zoomy的缩放值至少有一个为0时,无像素输出;当zoomx或者zoomy的缩放值都为1时,输出等于输入;当zoomx或者zoomy的缩放值有一个为1时,输出图像的相应方向无缩放效果;当zoomx或者zoomy的缩放值大于1时,输出图像的相应的方向有放大效果;当zoomx或者zoomy方向的缩放值小于1时,输出图像的相应方向有缩小效果。
Description
技术领域
本发明涉及计算机硬件技术领域,尤其涉及一种图形处理器的图像缩放电路及方法。
背景技术
在计算机图形处理和计算机图形学中,图像缩放是指对数字图像的大小进行调整的过程。图形处理器的设计中,图形缩放电路是图像处理子集中glDrawPixels、glCopyPixels 命令的图像处理管线中的处理过程之一,主要采用对像素的选择和复制的方法实现对图像的缩放操作。缩放命令glPixelZoom所带的参数值决定了缩放后的图像大小,是像素选择和复制的依据。
发明内容
本发明的发明目的:提供一种图形处理器图像缩放电路及方法,原理简单,易于实现;时序清晰,易于集成。
本发明的技术方案:
一种图形处理器图像缩放电路,包括:像素输入FIFO(1)、像素缩放控制电路(2)、像素缓冲区RAM(3)以及像素输出FIFO(4);
像素输入FIFO(1)与像素缩放控制电路(2)、像素缓冲区RAM(3)相连,实现待缩放像素的存储;
像素缩放控制电路(2)与像素输入FIFO(1)、像素输出FIFO(4)、像素缓冲区RAM(3)依次相连;
像素缩放控制电路(2)存储上级电路配置的参数信息,包括:X坐标方向像素缩放倍数zoomx、Y坐标方向像素缩放倍数zoomy、待缩放像素高度height、待缩放像素宽度width;
像素缩放控制电路(2)使用有限状态机检测像素输入FIFO(1)输出的空信号pixels_fifo_empty为低电平,表示像素输入FIFO(1)中有像素数据时,启动像素缩放控制电路(2),产生像素输入FIFO(1)的读使能信号pixels_fifo_rden,读出一行待缩放像素,从pixels_fifo_dout信号输出;
像素缩放控制电路(2)使用有限状态机检测像素输入FIFO(1)输出的空信号pixels_fifo_empty为高电平,表示像素输入FIFO(1)为空状态,并且,像素输入命令是glDrawPixels时,dma_end信号为高电平,或者像素输入命令是glCopyPixels时,copy_end为高电平,像素缩放控制电路(2)结束像素缩放操作;
像素缩放控制电路(2)使用有限状态机产生像素缓冲区RAM(3)写使能信号pixels_ram_wr、读/写地址信号pixels_ram_addr信号,将从像素输入FIFO(1)读出的一行像素信息写入像素缓冲区RAM(3);
像素缩放控制电路(2)使用有限状态机产生像素缓冲区RAM(3)读使能信号pixels_ram_en、读/写地址信号pixels_ram_addr信号,选择需要复制的像素从pixels_ram_dout 输出,完成缩放操作;
像素缩放控制电路(2)使用有限状态机检测像素输出FIFO(4)的满状态信号scaled_pixels_fifo_full,在像素输出FIFO(4)不满时,产生像素输出FIFO(4)写使能信号scaled_pixels_fifo_wr、缩放后的像素信息输出scaled_pixels_fifo_din信号,将缩放后的像素信息输出到像素输出FIFO(4);
所述像素缓冲区RAM(3),与像素输入FIFO(1)、像素缩放控制电路(2)依次相连,实现一行像素的存储;
所述像素输出FIFO(4),与像素缩放控制电路(2)相连,保存缩放后的像素数据;后级电路依据像素输出FIFO(4)的空信号scaled_pixels_fifo_empty,使用像素输出FIFO(4)的读使能信号scaled_pixels_fifo_rden,读出缩放后的像素数据从scaled_pixels_fifo_dout输出。
所述像素缩放控制电路(2),采用状态机控制待缩放像素的选择和复制,实现像素的缩放操作。
像素缩放控制电路(2)中的状态机包括:(1)RESET、(2)Y_ADD_PRE、(3)Y_ADD、 (4)Y_JUDGE、(5)GET_FIFO、(6)GET_DATA、(7)X_ADD、(8)X_ADDR_ADD、 (9)READ_EN、(10)X_RESET、(11)SCALE_DONE、(12)RD_FIFO、(13)WAIT1、 (14)WAIT2、(15)WAIT3、(16)WAIT4共16个状态。
3.1、所述RESET状态:
电路上电复位时,状态机处于该状态;复位撤消后,检测到发明像素输入FIFO(1)不空,有像素需要缩放,状态机跳转到Y_ADD_PRE状态,否则保持在RESET状态;
3.2、所述Y_ADD_PRE状态:
像素缩放操作完成后,若最终像素宽度width_finial=width*zoomx、或者最终像素高度 height_finial=height*zoomy,其中任意一个值为0,状态机跳转到RD_FIFO状态;否则,状态机跳转到Y_ADD状态;
Y_ADD_PRE状态,将Y方向期望像素高度accum_zoomy值从0更新为zoomy的整数部分,放大时zoomy大于1,缩小时,zoomy小于1;
3.3、所述Y_ADD状态:
状态机无条件跳转到Y_JUDGE状态;
3.4、所述Y_JUDGE状态:
比较Y方向期望像素高度accum_zoomy与Y方向实际像素高度accum_zoomy_act的大小,accum_zoomy_act的初始值为0;accum_zoomy大于accum_zoomy_act,状态机跳转到GET_DATA状态;否则状态机跳转到GET_FIFO状态;
像素放大操作,accum_zoomy大于1,大于accum_zoomy_act的值,状态机跳转到GET_DATA状态;
像素缩小操作,accum_zoomy是zoomy多次累加后的整数部分,zoomy小于1,accum_zoomy等于0,状态机跳转到GET_FIFO状态,经过多次累加zoomy操作后, accum_zoomy的值不为0,满足大于accum_zoomy_act的条件;
3.5、所述GET_FIFO状态:
该状态产生发明像素输入FIFO(1)读使能信号pixels_fifo_rden,像素数据从pixels_fifo_dout信号输出,并被丢弃;该状态使用读出像素计数器pixels_rd_cnt对从发明像素输入FIFO(1)读出的像素个数进行计数;
pixels_rd_cnt的值等于像素宽度width时,状态机跳转到WAIT3状态;读发明像素输入 FIFO(1)的过程中,若发明像素输入FIFO(1)空,状态机跳转到WAIT4状态;否则,状态机保持在GET_FIFO状态;
该状态读出像素个数等于像素宽度width时,将accum_zoomy的值从0更新为(n+1)*zoomy的整数部分,其中n表示在GET_FIFO状态且满足读出像素个数等于像素宽度width条件的次数;
3.6、所述GET_DATA状态:
从发明像素输入FIFO(1)读出的像素个数等于像素宽度width时,状态机跳转到X_ADD 状态;
发明像素输入FIFO(1)空时,状态机跳转到WAIT1状态;
否则状态机保持在GET_DATA状态;
该状态产生发明像素输入FIFO(1)读使能信号pixels_fifo_rden,从发明像素输入FIFO (1)读出像素pixels_fifo_dout,并读出的像素写入像素缓冲区RAM(3);像素缓冲区RAM (3)的写入地址pixels_ram_addr从0开始依次加1递增;该状态使用读出像素计数器pixels_rd_cnt对从发明像素输入FIFO(1)读出的像素个数进行计数;
3.7、所述X_ADD状态:
状态机无条件跳转到X_ADDR_ADD状态;
X方向期望的像素宽度accum_zoomx等于accum_zoomx_act时,更新accum_zoomx为m*zoomx的整数部分,其中m为状态机在X_ADD状态且满足上述条件的次数;
3.8、所述X_ADDR_ADD状态:
若X方向期望的像素宽度accum_zoomx大于实际像素宽度accum_zoomx_act,表示原始像素中有有效像素可以被选择和复制,状态机跳转到READ_EN状态;
否则状态机跳转到X_ADD状态;
该状态将读出像素计数器pixels_rd_cnt的值清零;同时,像素缓冲区RAM(3)的地址 pixels_ram_addr从0开始持续加1递增,跳过无效的不能选择和复制的像素地址;
3.9、所述READ_EN状态:
若X方向实际像素宽度accum_zoomx_act+1等于缩放操作完成后最终的像素宽度width_finial,并且Y方向实际像素宽度accum_zoomy_act+1等于缩放操作完成后最终的像素宽度height_finial,表示像素在X/Y方向的全部缩放操作即将完成:若发明像素输入FIFO(1) 空信号pixels_fifo_empty为高电平,像素的输入命令是glDrawPixels时,dma_end信号为高电平,像素输入命令是glCopyPixels时,copy_end为高电平,状态机跳转到SCALE_DONE 状态;否则,状态机跳转到RD_FIFO状态;
否则,若Y方向期待的像素高度accum_zoomy等于Y方向实际的像素高度 accum_zoomy_act,表示一行像素缩放完成,状态机跳转到Y_ADD状态;
否则,若X方向实际像素宽度accum_zoomx_act+1等于像素缩放操作结束后最终的像素宽度width_finial,表示一行像素在X方向的缩放操作即将完成,状态机跳转到X_RESET 状态;
否则,若X方向期待的像素宽度accum_zoomx-1等于X方向实际像素宽度 accum_zoomx_act,表示一个像素在X方向上的缩放操作即将完成,状态机跳转到 X_ADDR_ADD状态;
否则,若像素输出FIFO(4)满,状态机跳转到WAIT2状态;
否则,状态机保持在READ_EN状态;
该状态,Y方向期待的像素高度accum_zoomy等于实际像素高度时accum_zoomy_act,更新accum_zoomy的值为(k+n+1)*zoomy的整数部分,其中k表示状态机进入READ_EN状态,且满足上述条件的次数;
该状态,像素缓冲区RAM(3)地址pixels_ram_addr保持不变,产生像素缓冲区RAM(3)的读使能信号pixels_ram_en,将地址选中的像素从像素缓冲RAM读出,该像素即为缩放后的有效像素;
该状态产生像素输出FIFO(4)的写使能信号scaled_pixels_fifo_wr、写数据信号scaled_pixels_fifo_din,将缩放后的有效像素写入像素输出FIFO(4);
该状态,Y方向期望缩放高度accum_zoomy等于实际缩放高度accum_zoomy_act时,将像素缓冲区RAM(3)地址pixels_ram_addr清零;
该状态,accum_zoomx的值accum_zoomy_act等于accum_zoomy时清零;否则,X方向期望像素宽度accum_zoomx-1等于实际像素宽度accum_zoomx_act时,更新accum_zoomx 的值为(p+m)*zoomx的整数部分,其中,p为READ_EN状态,满足上述条件的次数;
该状态,accum_zoomx_act的值在accum_zoomy_act等于accum_zoomy时清零;否则, accum_zoomx_act的值每周期执行加1操作;
该状态,accum_zoomx_act+1的值等于width_finial,表示一行像素在X方向的缩放操作即将完成时,accum_zoomy_act的值执行加1操作;
3.10、所述X_RESET状态:
状态机无条件跳转到X_ADD状态;
将像素缓冲区RAM(3)地址scaled_ram_addr、X方向期望像素宽度accum_zoomx、X方向实际像素宽度accum_zoomx_act清零;
3.11、所述SCALE_DONE状态:
无条件跳转到RESET状态;产生缩放完成指示信号scaled_done,该信号将 accum_zoomy、accum_zoomy_act、accum_zoomx、accum_zoomx_act、pixels_ram_addr的值清零;
3.12、所述RD_FIFO状态:
若发明像素输入FIFO(1)空信号pixels_fifo_empty为高电平,像素的输入命令是glDrawPixels时,像素DMA结束信号dma_end为高电平,或者像素输入命令是glCopyPixels时,像素拷贝结束信号copy_end为高电平,状态机跳转到SCALE_DONE状态;
否则保持在RD_FIFO状态;
该状态,发明像素输入FIFO(1)有像素,空信号pixels_fifo_empty为低电平,产生发明像素输入FIFO(1)的读使能信号pixels_fifo_rden,将发明像素输入FIFO(1)中的像素读出并丢弃,清空发明像素输入FIFO(1);
3.13、所述WAIT1状态:
像素FIFO不空时,状态机跳转到GET_DATA状态;否则,状态机保持在WAIT1状态;
3.14、所述WAIT2状态:
像素输出FIFO(4)缓冲不满后,重新跳回READ_EN状态,否则保持在WAIT2状态;
3.15、所述WAIT3状态:
状态机无条件跳转到Y_ADD状态;
重新开始下一行像素的处理,将pixels_rd_cnt寄存器的值清零;
3.16、所述WAIT4状态:
像素FIFO非空,状态机跳转到GET_FIFO状态,否则保持在WAIT4状态。
像素输入FIFO(1)的深度与图形处理器支持的分辨率的列数也即一行像素的最大宽度相关,最少应可以存储一行像素。
像素缓冲区RAM(3)的大小与图形处理器支持的列分辨率即一行像素的最大宽度相关,最少应可以存储一行像素数据。
像素输出FIFO(4)的深度与图形处理器支持的分辨率列数也即一行像素的最大宽度相关,最少应可以存储一行像素。
一种图形处理器图像缩放方法,包括:
当zoomx或者zoomy的缩放值至少有一个为0时,即图像缩放0倍后,无像素输出;
当zoomx或者zoomy的缩放值都为1时,输出等于输入,即无缩放效果;
当zoomx或者zoomy的缩放值有一个为1时,输出图像的相应方向无缩放效果;
当zoomx或者zoomy的缩放值大于1时,输出图像的相应的方向有放大效果;
当zoomx或者zoomy方向的缩放值小于1时,输出图像的相应方向有缩小效果。
本发明的有益效果:
所述的一种图形处理器图像缩放电路及方法,采用对像素进行选择和复制的算法实现像素的缩放操作,该算法原理简单,易于实现;图像缩放电路的输入、输出数据接口为FIFO 形式,时序清晰,易于集成;整个缩放操作过程由一个状态机进行精确控制,可实现任意缩放倍数的图像缩放操作;图像缩放电路为纯硬件电路实现,无需软件干预,图像缩放效率高。
附图说明
图1是本发明中一种图形处理器图像缩放电路及方法总体框图;
图2是本发明中像素缩放控制电路(2)中状态机的状态跳转。
具体实施方式
下面结合附图和具体实施例,对本发明的技术方案进行清楚、完整地表述。显然,所表述的实施例仅是本发明一部分实施例,而不是全部的实施例,基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提所获得的所有其他实施例,都属于本发明的保护范围。
如图1所示一种图形处理器图像缩放电路,包括像素输入FIFO(1)、像素缩放控制电路(2)、像素缓冲区RAM(3)以及像素输出FIFO(4)四部分,实现图像处理子集glDrawPixels、 glCopyPixels命令的图像处理管线中图像的缩放操作。
其中缩放命令glPixelZoom(zoomx、zoomy)所带的参数的值决定了图像缩放的大小。其值是12:20格式的定点数,最高位是符号位,数据有效值为11:11,即整数位11位,小数位11位,表示缩放的倍数,支持缩放的范围是2048倍。
如图1所示一种图形处理器图像缩放电路及方法,其中像素输入FIFO(1)实现待缩放像素的存储。像素输入FIFO(1)的深度可以为2048。
如图1所示一种图形处理器图像缩放电路及方法中的像素缓冲区RAM(3),实现一行像素的存储。像素缓冲区RAM(3)的地址位宽为11,可以存储2048个有效像素。
如图1所示一种图形处理器图像缩放电路及方法中的像素输出FIFO(4),实现缩放后像素的存储。像素输出FIFO(4)的深度与图形处理器支持的分辨率列数也即一行像素的最大宽度相关,最少应可以存储一行像素。
如图1所示一种图形处理器图像缩放电路及方法中的像素缩放控制电路(2),其核心是状态机,包括:(1)RESET、(2)Y_ADD_PRE、(3)Y_ADD、(4)Y_JUDGE、(5)GET_FIFO、(6)GET_DATA、(7)X_ADD、(8)X_ADDR_ADD、(9)READ_EN、(10)X_RESET、(11)SCALE_DONE、 (12)RD_FIFO、(13)WAIT1、(14)WAIT2、(15)WAIT3、(16)WAIT4共16个状态。其状态跳转如图2所示。
图像缩放操作流程,详细描述如下:
1、RESET状态:
电路上电复位时,状态机处于该状态。复位撤消后,检测到像素输入FIFO(1)不空,有像素需要缩放,状态机跳转到Y_ADD_PRE状态,否则保持在RESET状态。
2、Y_ADD_PRE状态:
像素缩放操作完成后,若最终像素宽度width_finial(width*zoomx)、或者最终像素高度height_finial(height*zoomy),其中任意一个值为0,状态机跳转到RD_FIFO状态;
否则,状态机跳转到Y_ADD状态。
在该状态将Y方向期望像素高度accum_zoomy值从初始值0更新为zoomy的整数部分。
3、Y_ADD状态:
状态机无条件跳转到Y_JUDGE状态。
4、Y_JUDGE状态:
比较Y方向期望像素高度accum_zoomy与Y方向实际像素高度accum_zoomy_act的大小,accum_zoomy_act的初始值均为0。accum_zoomy大于accum_zoomy_act,状态机跳转到GET_DATA状态;否则状态机跳转到GET_FIFO状态。
像素放大操作,accum_zoomy大于等于1,大于accum_zoomy_act的值,状态机跳转到 GET_DATA状态。
像素缩小操作,accum_zoomy是zoomy的整数部分,等于0,状态机跳转到GET_FIFO状态,经过多次累加后,accum_zoomy的值才可以为1,满足大于accum_zoomy_act的条件。
5、GET_FIFO状态:
该状态产生像素输入FIFO(1)读使能信号pixels_fifo_rden,从像素输入FIFO(1)读出像素数据pixels_fifo_dout,并丢弃。该状态使用读出像素计数器pixels_rd_cnt对从像素输入FIFO(1)读出的像素个数进行计数。pixels_rd_cnt的值等于像素宽度width时,状态机跳转到WAIT3状态。
读像素输入FIFO(1)的过程中,若像素输入FIFO(1)空,状态机跳转到WAIT4状态;
否则,状态机保持在GET_FIFO状态。
该状态读出像素个数等于像素宽度时,将accum_zoomy的值从0更新为(n+1)*zoomy 的整数部分,其中n表示在GET_FIFO状态且满足上述条件的次数。
6、GET_DATA状态:
从像素输入FIFO(1)读出的像素个数等于像素宽度width时,状态机跳转到X_ADD状态;
像素输入FIFO(1)空时,状态机跳转到WAIT1状态;
否则状态机保持在GET_DATA状态。
该状态产生像素输入FIFO(1)读使能信号pixels_fifo_rden,从像素输入FIFO(1)读出像素pixels_fifo_dout,并读出的像素写入像素缓冲区RAM(3)。像素缓冲区RAM(3) 的写入地址pixels_ram_addr从0开始依次加1递增。该状态使用读出像素计数器 pixels_rd_cnt对从像素输入FIFO(1)读出的像素个数进行计数。
7、X_ADD状态:
状态机无条件跳转到X_ADDR_ADD状态。
X方向期望的像素宽度accum_zoomx等于accum_zoomx_act时,更新accum_zoomx为m*zoomx的整数部分,其中m为状态机在X_ADD状态且满足上述条件的次数。
8、X_ADDR_ADD状态:
若X方向期望的像素宽度accum_zoomx大于实际像素宽度accum_zoomx_act,表示原始像素中有有效像素可以被选择和复制,状态机跳转到READ_EN状态;
否则状态机跳转到X_ADD状态。
该状态将读出像素计数器pixels_rd_cnt的值清零。同时,像素缓冲区RAM(3)的地址 pixels_ram_addr从0开始持续加1递增,跳过无效的不能选择和复制的像素地址。
9、READ_EN状态:
若X方向实际像素宽度accum_zoomx_act+1等于缩放操作完成后最终的像素宽度width_finial,并且Y方向实际像素宽度accum_zoomy_act+1等于缩放操作完成后最终的像素宽度height_finial,表示像素在X/Y方向的全部缩放操作即将完成:若像素输入FIFO(1)空信号pixels_fifo_empty为高电平,像素的输入命令是glDrawPixels时,dma_end信号为高电平,像素输入命令是glCopyPixels时,copy_end为高电平,状态机跳转到SCALE_DONE状态;否则,状态机跳转到RD_FIFO状态。
否则,若Y方向期待的像素高度accum_zoomy等于Y方向实际的像素高度 accum_zoomy_act,表示一行像素缩放完成,状态机跳转到Y_ADD状态;
否则,若X方向实际像素宽度accum_zoomx_act+1等于像素缩放操作结束后最终的像素宽度width_finial,表示一行像素在X方向的缩放操作即将完成,状态机跳转到X_RESET 状态;
否则,若X方向期待的像素宽度accum_zoomx-1等于X方向实际像素宽度 accum_zoomx_act,表示一个像素在X方向上的缩放操作即将完成,状态机跳转到X_ADDR_ADD 状态;
否则,若像素输出FIFO(4)满,状态机跳转到WAIT2状态;
否则,状态机保持在READ_EN状态,选择有效的像素复制并输出。
该状态,像素缓冲区RAM(3)地址pixels_ram_addr保持不变,产生像素缓冲区RAM(3) 的读使能信号pixels_ram_en,将地址选中的像素从像素缓冲RAM读出,该像素即为缩放后的有效像素。该状态产生像素输出FIFO(4)的写使能信号scaled_pixels_fifo_wr、写数据信号scaled_pixels_fifo_din,将缩放后的有效像素写入像素输出FIFO(4)。
该状态,Y方向期待的像素高度accum_zoomy等于实际像素高度时accum_zoomy_act,更新accum_zoomy的值为(k+n+1)*zoomy的整数部分,其中k表示状态机进入READ_EN状态,且满足上述条件的次数。
该状态,Y方向期望缩放高度accum_zoomy等于实际缩放高度accum_zoomy_act时,将像素缓冲区RAM(3)地址pixels_ram_addr清零。
该状态,accum_zoomx的值accum_zoomy_act等于accum_zoomy时清零。否则,X方向期望像素宽度accum_zoomx-1等于实际像素宽度accum_zoomx_act时,更新accum_zoomx的值为(p+m)*zoomx的整数部分,其中,p为READ_EN状态,满足上述条件的次数。
该状态,accum_zoomx_act的值在accum_zoomy_act等于accum_zoomy时清零。否则, accum_zoomx_act的值每周期执行加1操作。
该状态,accum_zoomx_act+1的值等于width_finial,表示一行像素在X方向的缩放操作即将完成时,accum_zoomy_act的值执行加1操作。
10、所述X_RESET状态:
状态机无条件跳转到X_ADD状态。
将像素缓冲区RAM(3)地址scaled_ram_addr、X方向期望像素宽度accum_zoomx、X方向实际像素宽度accum_zoomx_act清零。
11、SCALE_DONE状态:
无条件跳转到RESET状态。产生缩放完成指示信号scaled_done,该信号将accum_zoomy、 accum_zoomy_act、accum_zoomx、accum_zoomx_act、pixels_ram_addr的值清零。
12、RD_FIFO状态:
若像素输入FIFO(1)空信号pixels_fifo_empty为高电平,像素的输入命令是glDrawPixels时,dma_end信号为高电平,像素输入命令是glCopyPixels时,copy_end为高电平,状态机跳转到SCALE_DONE状态;
否则保持在RD_FIFO状态。
像素输入FIFO(1)空信号pixels_fifo_empty为低电平,表示不空时,产生像素输入 FIFO(1)的读使能信号pixels_fifo_rden,将像素输入FIFO(1)中的像素清空。
13、WAIT1状态:
像素FIFO不空时,状态机跳转到GET_DATA状态;否则,状态机保持在WAIT1状态。
14、WAIT2状态:
像素输出FIFO(4)缓冲不满后,重新跳回READ_EN状态,否则保持在WAIT2状态。
15、WAIT3状态:
状态机无条件跳转到Y_ADD(1)状态。重新开始下一行像素的处理,将pixels_rd_cnt 寄存器的值清零。
16、WAIT4状态:
像素FIFO非空,状态机跳转到GET_FIFO状态,否则保持在WAIT4状态。
一种图形处理器图像缩放方法,包括:
当zoomx或者zoomy的缩放值至少有一个为0时,即图像缩放0倍后,无像素输出;
当zoomx或者zoomy的缩放值都为1时,输出等于输入,即无缩放效果;
当zoomx或者zoomy的缩放值有一个为1时,输出图像的相应方向无缩放效果;
当zoomx或者zoomy的缩放值大于1时,输出图像的相应的方向有放大效果。例如当zoomx或者zoomy方向的放大值分别为a和b,则每一个像素点在zoomx方向上复制a-1个像素,在zoomy方向上复制b-1个像素;
当zoomx或者zoomy方向的缩放值小于1时,输出图像的相应方向有缩小效果。例如当zoomx或者zoomy方向的缩小值分别为a和b,则每一个像素点在x方向上每1/a个像素选择一个像素,在y方向上每1/b个像素选择一个像素。
最后应说明的是,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解;其依然可以对前述各实施例记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (8)
1.一种图形处理器图像缩放电路,其特征在于,包括:像素输入FIFO(1)、像素缩放控制电路(2)、像素缓冲区RAM(3)以及像素输出FIFO(4);
像素输入FIFO(1)与像素缩放控制电路(2)、像素缓冲区RAM(3)相连,实现待缩放像素的存储;
像素缩放控制电路(2)与像素输入FIFO(1)、像素输出FIFO(4)、像素缓冲区RAM(3)依次相连;
像素缩放控制电路(2)存储上级电路配置的参数信息,包括:X坐标方向像素缩放倍数zoomx、Y坐标方向像素缩放倍数zoomy、待缩放像素高度height、待缩放像素宽度width;
像素缩放控制电路(2)使用有限状态机检测像素输入FIFO(1)输出的空信号pixels_fifo_empty为低电平,表示像素输入FIFO(1)中有像素数据时,启动像素缩放控制电路(2),产生像素输入FIFO(1)的读使能信号pixels_fifo_rden,读出一行待缩放像素,从pixels_fifo_dout信号输出;
像素缩放控制电路(2)使用有限状态机检测像素输入FIFO(1)输出的空信号pixels_fifo_empty为高电平,表示像素输入FIFO(1)为空状态,并且,像素输入命令是glDrawPixels时,dma_end信号为高电平,或者像素输入命令是glCopyPixels时,copy_end为高电平,像素缩放控制电路(2)结束像素缩放操作;
像素缩放控制电路(2)使用有限状态机产生像素缓冲区RAM(3)写使能信号pixels_ram_wr、读/写地址信号pixels_ram_addr信号,将从像素输入FIFO(1)读出的一行像素信息写入像素缓冲区RAM(3);
像素缩放控制电路(2)使用有限状态机产生像素缓冲区RAM(3)读使能信号pixels_ram_en、读/写地址信号pixels_ram_addr信号,选择需要复制的像素从pixels_ram_dout输出,完成缩放操作;
像素缩放控制电路(2)使用有限状态机检测像素输出FIFO(4)的满状态信号scaled_pixels_fifo_full,在像素输出FIFO(4)不满时,产生像素输出FIFO(4)写使能信号scaled_pixels_fifo_wr、缩放后的像素信息输出scaled_pixels_fifo_din信号,将缩放后的像素信息输出到像素输出FIFO(4);
所述像素缓冲区RAM(3),与像素输入FIFO(1)、像素缩放控制电路(2)依次相连,实现一行像素的存储;
所述像素输出FIFO(4),与像素缩放控制电路(2)相连,保存缩放后的像素数据;后级电路依据像素输出FIFO(4)的空信号scaled_pixels_fifo_empty,使用像素输出FIFO(4)的读使能信号scaled_pixels_fifo_rden,读出缩放后的像素数据从scaled_pixels_fifo_dout输出。
2.如权利要求1所述的一种图形处理器图像缩放电路,其特征在于,
所述像素缩放控制电路(2),采用状态机控制待缩放像素的选择和复制,实现像素的缩放操作。
3.如权利要求2所述的一种图形处理器图像缩放电路,其特征在于,像素缩放控制电路(2)中的状态机包括:(1)RESET、(2)Y_ADD_PRE、(3)Y_ADD、(4)Y_JUDGE、(5)GET_FIFO、(6)GET_DATA、(7)X_ADD、(8)X_ADDR_ADD、(9)READ_EN、(10)X_RESET、(11)SCALE_DONE、(12)RD_FIFO、(13)WAIT1、(14)WAIT2、(15)WAIT3、(16)WAIT4共16个状态。
4.如权利要求3所述的一种图形处理器图像缩放电路,其特征在于,
3.1、所述RESET状态:
电路上电复位时,状态机处于该状态;复位撤消后,检测到发明像素输入FIFO(1)不空,有像素需要缩放,状态机跳转到Y_ADD_PRE状态,否则保持在RESET状态;
3.2、所述Y_ADD_PRE状态:
像素缩放操作完成后,若最终像素宽度width_finial=width*zoomx、或者最终像素高度height_finial=height*zoomy,其中任意一个值为0,状态机跳转到RD_FIFO状态;否则,状态机跳转到Y_ADD状态;
Y_ADD_PRE状态,将Y方向期望像素高度accum_zoomy值从0更新为zoomy的整数部分,放大时zoomy大于1,缩小时,zoomy小于1;
3.3、所述Y_ADD状态:
状态机无条件跳转到Y_JUDGE状态;
3.4、所述Y_JUDGE状态:
比较Y方向期望像素高度accum_zoomy与Y方向实际像素高度accum_zoomy_act的大小,accum_zoomy_act的初始值为0;accum_zoomy大于accum_zoomy_act,状态机跳转到GET_DATA状态;否则状态机跳转到GET_FIFO状态;
像素放大操作,accum_zoomy大于1,大于accum_zoomy_act的值,状态机跳转到GET_DATA状态;
像素缩小操作,accum_zoomy是zoomy多次累加后的整数部分,zoomy小于1,accum_zoomy等于0,状态机跳转到GET_FIFO状态,经过多次累加zoomy操作后,accum_zoomy的值不为0,满足大于accum_zoomy_act的条件;
3.5、所述GET_FIFO状态:
该状态产生发明像素输入FIFO(1)读使能信号pixels_fifo_rden,像素数据从pixels_fifo_dout信号输出,并被丢弃;该状态使用读出像素计数器pixels_rd_cnt对从发明像素输入FIFO(1)读出的像素个数进行计数;
pixels_rd_cnt的值等于像素宽度width时,状态机跳转到WAIT3状态;读发明像素输入FIFO(1)的过程中,若发明像素输入FIFO(1)空,状态机跳转到WAIT4状态;否则,状态机保持在GET_FIFO状态;
该状态读出像素个数等于像素宽度width时,将accum_zoomy的值从0更新为(n+1)*zoomy的整数部分,其中n表示在GET_FIFO状态且满足读出像素个数等于像素宽度width条件的次数;
3.6、所述GET_DATA状态:
从发明像素输入FIFO(1)读出的像素个数等于像素宽度width时,状态机跳转到X_ADD状态;
发明像素输入FIFO(1)空时,状态机跳转到WAIT1状态;
否则状态机保持在GET_DATA状态;
该状态产生发明像素输入FIFO(1)读使能信号pixels_fifo_rden,从发明像素输入FIFO(1)读出像素pixels_fifo_dout,并读出的像素写入像素缓冲区RAM(3);像素缓冲区RAM(3)的写入地址pixels_ram_addr从0开始依次加1递增;该状态使用读出像素计数器pixels_rd_cnt对从发明像素输入FIFO(1)读出的像素个数进行计数;
3.7、所述X_ADD状态:
状态机无条件跳转到X_ADDR_ADD状态;
X方向期望的像素宽度accum_zoomx等于accum_zoomx_act时,更新accum_zoomx为m*zoomx的整数部分,其中m为状态机在X_ADD状态且满足上述条件的次数;
3.8、所述X_ADDR_ADD状态:
若X方向期望的像素宽度accum_zoomx大于实际像素宽度accum_zoomx_act,表示原始像素中有有效像素可以被选择和复制,状态机跳转到READ_EN状态;
否则状态机跳转到X_ADD状态;
该状态将读出像素计数器pixels_rd_cnt的值清零;同时,像素缓冲区RAM(3)的地址pixels_ram_addr从0开始持续加1递增,跳过无效的不能选择和复制的像素地址;
3.9、所述READ_EN状态:
若X方向实际像素宽度accum_zoomx_act+1等于缩放操作完成后最终的像素宽度width_finial,并且Y方向实际像素宽度accum_zoomy_act+1等于缩放操作完成后最终的像素宽度height_finial,表示像素在X/Y方向的全部缩放操作即将完成:若发明像素输入FIFO(1)空信号pixels_fifo_empty为高电平,像素的输入命令是glDrawPixels时,dma_end信号为高电平,像素输入命令是glCopyPixels时,copy_end为高电平,状态机跳转到SCALE_DONE状态;否则,状态机跳转到RD_FIFO状态;
否则,若Y方向期待的像素高度accum_zoomy等于Y方向实际的像素高度accum_zoomy_act,表示一行像素缩放完成,状态机跳转到Y_ADD状态;
否则,若X方向实际像素宽度accum_zoomx_act+1等于像素缩放操作结束后最终的像素宽度width_finial,表示一行像素在X方向的缩放操作即将完成,状态机跳转到X_RESET状态;
否则,若X方向期待的像素宽度accum_zoomx-1等于X方向实际像素宽度accum_zoomx_act,表示一个像素在X方向上的缩放操作即将完成,状态机跳转到X_ADDR_ADD状态;
否则,若像素输出FIFO(4)满,状态机跳转到WAIT2状态;
否则,状态机保持在READ_EN状态;
该状态,Y方向期待的像素高度accum_zoomy等于实际像素高度时accum_zoomy_act,更新accum_zoomy的值为(k+n+1)*zoomy的整数部分,其中k表示状态机进入READ_EN状态,且满足上述条件的次数;
该状态,像素缓冲区RAM(3)地址pixels_ram_addr保持不变,产生像素缓冲区RAM(3)的读使能信号pixels_ram_en,将地址选中的像素从像素缓冲RAM读出,该像素即为缩放后的有效像素;
该状态产生像素输出FIFO(4)的写使能信号scaled_pixels_fifo_wr、写数据信号scaled_pixels_fifo_din,将缩放后的有效像素写入像素输出FIFO(4);
该状态,Y方向期望缩放高度accum_zoomy等于实际缩放高度accum_zoomy_act时,将像素缓冲区RAM(3)地址pixels_ram_addr清零;
该状态,accum_zoomx的值accum_zoomy_act等于accum_zoomy时清零;否则,X方向期望像素宽度accum_zoomx-1等于实际像素宽度accum_zoomx_act时,更新accum_zoomx的值为(p+m)*zoomx的整数部分,其中,p为READ_EN状态,满足上述条件的次数;
该状态,accum_zoomx_act的值在accum_zoomy_act等于accum_zoomy时清零;否则,accum_zoomx_act的值每周期执行加1操作;
该状态,accum_zoomx_act+1的值等于width_finial,表示一行像素在X方向的缩放操作即将完成时,accum_zoomy_act的值执行加1操作;
3.10、所述X_RESET状态:
状态机无条件跳转到X_ADD状态;
将像素缓冲区RAM(3)地址scaled_ram_addr、X方向期望像素宽度accum_zoomx、X方向实际像素宽度accum_zoomx_act清零;
3.11、所述SCALE_DONE状态:
无条件跳转到RESET状态;产生缩放完成指示信号scaled_done,该信号将accum_zoomy、accum_zoomy_act、accum_zoomx、accum_zoomx_act、pixels_ram_addr的值清零;
3.12、所述RD_FIFO状态:
若发明像素输入FIFO(1)空信号pixels_fifo_empty为高电平,像素的输入命令是glDrawPixels时,像素DMA结束信号dma_end为高电平,或者像素输入命令是glCopyPixels时,像素拷贝结束信号copy_end为高电平,状态机跳转到SCALE_DONE状态;
否则保持在RD_FIFO状态;
该状态,发明像素输入FIFO(1)有像素,空信号pixels_fifo_empty为低电平,产生发明像素输入FIFO(1)的读使能信号pixels_fifo_rden,将发明像素输入FIFO(1)中的像素读出并丢弃,清空发明像素输入FIFO(1);
3.13、所述WAIT1状态:
像素FIFO不空时,状态机跳转到GET_DATA状态;否则,状态机保持在WAIT1状态;
3.14、所述WAIT2状态:
像素输出FIFO(4)缓冲不满后,重新跳回READ_EN状态,否则保持在WAIT2状态;
3.15、所述WAIT3状态:
状态机无条件跳转到Y_ADD状态;
重新开始下一行像素的处理,将pixels_rd_cnt寄存器的值清零;
3.16、所述WAIT4状态:
像素FIFO非空,状态机跳转到GET_FIFO状态,否则保持在WAIT4状态。
5.如权利要求1所述的一种图形处理器图像缩放电路,其特征在于,像素输入FIFO(1)的深度与图形处理器支持的分辨率的列数也即一行像素的最大宽度相关,最少应可以存储一行像素。
6.如权利要求1所述的一种图形处理器图像缩放电路,其特征在于,像素缓冲区RAM(3)的大小与图形处理器支持的列分辨率即一行像素的最大宽度相关,最少应可以存储一行像素数据。
7.如权利要求1所述的一种图形处理器图像缩放电路,其特征在于,像素输出FIFO(4)的深度与图形处理器支持的分辨率列数也即一行像素的最大宽度相关,最少应可以存储一行像素。
8.一种图形处理器图像缩放方法,其特征在于,包括:
当zoomx或者zoomy的缩放值至少有一个为0时,即图像缩放0倍后,无像素输出;
当zoomx或者zoomy的缩放值都为1时,输出等于输入,即无缩放效果;
当zoomx或者zoomy的缩放值有一个为1时,输出图像的相应方向无缩放效果;
当zoomx或者zoomy的缩放值大于1时,输出图像的相应的方向有放大效果;
当zoomx或者zoomy方向的缩放值小于1时,输出图像的相应方向有缩小效果。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811523049.XA CN109767380B (zh) | 2018-12-12 | 2018-12-12 | 一种图形处理器图像缩放电路及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811523049.XA CN109767380B (zh) | 2018-12-12 | 2018-12-12 | 一种图形处理器图像缩放电路及方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109767380A true CN109767380A (zh) | 2019-05-17 |
CN109767380B CN109767380B (zh) | 2023-01-13 |
Family
ID=66450568
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811523049.XA Active CN109767380B (zh) | 2018-12-12 | 2018-12-12 | 一种图形处理器图像缩放电路及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109767380B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110942418A (zh) * | 2019-11-18 | 2020-03-31 | 中国航空工业集团公司西安航空计算技术研究所 | 一种基于glCopyPixels的GPU像素复制方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2000222560A (ja) * | 1999-02-01 | 2000-08-11 | Nec Corp | データ転送方法及び画像処理装置 |
CN1761312A (zh) * | 2005-11-03 | 2006-04-19 | 西安交通大学 | 一种基于双三次插值的数字视频图像缩放的方法及其电路 |
CN108765341A (zh) * | 2018-05-29 | 2018-11-06 | 郑州云海信息技术有限公司 | 一种图像处理的方法及其装置 |
-
2018
- 2018-12-12 CN CN201811523049.XA patent/CN109767380B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2000222560A (ja) * | 1999-02-01 | 2000-08-11 | Nec Corp | データ転送方法及び画像処理装置 |
CN1761312A (zh) * | 2005-11-03 | 2006-04-19 | 西安交通大学 | 一种基于双三次插值的数字视频图像缩放的方法及其电路 |
CN108765341A (zh) * | 2018-05-29 | 2018-11-06 | 郑州云海信息技术有限公司 | 一种图像处理的方法及其装置 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110942418A (zh) * | 2019-11-18 | 2020-03-31 | 中国航空工业集团公司西安航空计算技术研究所 | 一种基于glCopyPixels的GPU像素复制方法 |
CN110942418B (zh) * | 2019-11-18 | 2023-06-13 | 中国航空工业集团公司西安航空计算技术研究所 | 一种基于glCopyPixels的GPU像素复制方法 |
Also Published As
Publication number | Publication date |
---|---|
CN109767380B (zh) | 2023-01-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111860398B (zh) | 遥感图像目标检测方法、系统及终端设备 | |
US20070273689A1 (en) | System and method for adaptive tile depth filter | |
KR20150047612A (ko) | 선택적 디스플레이 리프레시 방법 및 장치 | |
US10929965B2 (en) | Histogram statistics circuit and multimedia processing system | |
US20200193563A1 (en) | Image processing apparatus and method, and related circuit | |
TW200426710A (en) | Block-based rotation of arbitrary-shaped images | |
CN114529658A (zh) | 一种图形渲染方法及其相关设备 | |
CN111968033A (zh) | 一种图像缩放处理方法及装置 | |
CN108509241B (zh) | 一种图像的全屏显示方法、全屏显示装置及移动终端 | |
CN104407384A (zh) | 地震剖面显示的方法 | |
CN104869284B (zh) | 一种双线性插值放大算法的高效率fpga实现方法和装置 | |
CN109767380A (zh) | 一种图形处理器图像缩放电路及方法 | |
US11915338B2 (en) | Loading apparatus and method for convolution with stride or dilation of 2 | |
CN104732491A (zh) | 一种边缘先验引导的单帧遥感图像超分辨率处理方法 | |
CN106998489A (zh) | 一种焦点越界搜索方法及装置 | |
CN113362235A (zh) | 一种图像去雾方法及装置 | |
CN106780291B (zh) | 一种实时畸变图像处理加速装置 | |
CN116312412A (zh) | 一种基于fpga的双三次插值电路 | |
Siva et al. | A low cost high performance VLSI architecture for image scaling in multimedia applications | |
CN103106395A (zh) | 车牌字符实时识别系统的几何归一化内核装置 | |
JP2702930B2 (ja) | フィルタリング方法 | |
CN111144057A (zh) | 图形渲染管线的性能分析方法、装置及计算机存储介质 | |
CN102129667B (zh) | 一种图像缩放方法 | |
JP2000187726A (ja) | デ―タ補間方法および装置及び記憶媒体 | |
TWI246052B (en) | Large graphic data high-speed describing method |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |