一种基于MIPI协议的视频图像缩小的方法及其***
技术领域
本发明涉及图像压缩领域,特别是涉及一种基于MIPI协议的视频图像缩小的方法及其***。
背景技术
移动产业处理器接口(Mobile Industry Processor Interface以下简称MIPI)协议,提升了应用处理器接口的一致性,加速了向用户提供移动设备,也促进了移动设备的重复使用和兼容性,因而受到广泛使用。移动设备视频数据大多也是通过MIPI协议传送的,由于不同的移动设备显示屏幕的分辨率不一样,因此,需要对视频源的图像数据进行缩放,移动到跟后端屏幕的分辨率相适应,因此,就涉及到如何将MIPI传送的显示数据提取出来进行缩放的问题。
现有技术中,MIPI包括四个数据通道,通过该四个数据通道接收移动设备传送过来的串行视频数据,再将串行视频数据转换为并行视频数据,接着从并行视频数据中提取有效RGB数据,再将提取出来的RGB数据分别进行缩放处理。一般从并行视频数据中提取有效RGB数据时,采用的方法是先用一个字节时钟(简称“BYTE CLOCK”)将并行视频数据写到缓冲器(BUFFER)内,再用一个像素时钟(简称“PIXEL CLOCK”)从缓冲器(BUFFER)中提取有效的RGB数据,这就涉及到跨时钟域的处理问题,而像素时钟可能会比字节时钟快,会导致功耗的提升,降低***的稳定性。在将提取有效的RGB数据进行缩放处理时,因为像素点的减少,又需要用一个相比像素时钟慢的缩放时钟(简称“Scaler CLOCK”)将数据读取出来进行计算,这样就会导致整个***的时钟过多,进而进一步降低***的稳定性。
发明内容
基于此,本发明的目的在于,提供一种基于MIPI协议的视频图像缩小的方法,其具有可减小时钟、提高***的稳定性的优点。
一种基于MIPI协议的视频图像缩小的方法,包括如下步骤:
根据MIPI数据通道的数据位宽与需缩小的缩放系数,将MIPI数据通道输出的通道数据延时n个字节时钟周期输出,并将延时的该通道数据存储至缓冲器内,其中,延时的字节时钟周期个数n为缩放系数与数据通道的数据位宽的比值乘以3;
获取MIPI数据通道输出的当前像素点数据,并获取缓冲器内该当前像素点的前一个像素点数据以及缩放系数,计算缩放后的新像素点数据。
相比于现有技术,本发明根据数据通道的数据位宽和缩放系数,将MIPI的数据通道输出的数据延时,进而只需要直接提取MIPI的数据通道输出的数据来计算新的像素点数据,无需增加时钟将MIPI的数据通道输出的数据转换后再进行缩放处理,减少了时钟数量,提高了***的稳定性。
进一步地,通过以下方式计算缩放后的新像素点数据:
P_NEW(i)=P_SRC([i*N/M])*(1-Y)+P_SRC([i*N/M]+1)*Y;
其中,P_NEW(i)表示第i个新像素点数据;P_SRC([i*N/M])表示缓冲器内第[i*N/M]个像素点的数据;P_SRC([i*N/M]+1)表示MIPI数据通道输出的当前第[i*N/M]+1个像素点的数据;N/M表示缩放系数,Y表示(i*N/M)的真分数部分。根据缩放系数,将当前像素点和前一个像素点分别乘以相应的权重,进而实现对图像的缩小。
进一步地,计算缩放后的新像素点时,包括分别计算像素点的R分量、G分量和B分量的数据,具体包括如下步骤:
计算第i个新像素点数据的R分量数据:
P_NEW_R(i)=P_SRC_R([i*N/M])*(1-Y)+P_SRC_R([i*N/M]+1)*Y;
其中,P_NEW_R(i)表示第i个新像素点数据的R分量;P_SRC_R([i*N/M])表示缓冲器内第[i*N/M]个像素点的数据的R分量;P_SRC_R([i*N/M]+1)表示MIPI数据通道输出的当前第[i*N/M]+1个像素点的数据的R分量;N/M表示缩放系数,Y表示(i*N/M)的真分数部分;
计算第i个新像素点数据的G分量数据:
P_NEW_G(i)=P_SRC_G([i*N/M])*(1-Y)+P_SRC_G([i*N/M]+1)*Y;
其中,P_NEW_G(i)表示第i个新像素点数据的G分量;P_SRC_G(i[i*N/M])表示缓冲器内第[i*N/M]个像素点的数据的G分量;P_SRC_G([i*N/M]+1)表示MIPI数据通道输出的当前第[i*N/M]+1个像素点的数据的G分量;N/M表示缩放系数,Y表示(i*N/M)的真分数部分;
计算第i个新像素点数据的B分量数据:
P_NEW_B(i)=P_SRC_B([i*N/M])*(1-Y)+P_SRC_B([i*N/M]+1)*Y;
其中,P_NEW_B(i)表示第i个新像素点数据的G分量;P_SRC_B([i*N/M])表示缓冲器内第[i*N/M]个像素点的数据的B分量;P_SRC_B([i*N/M]+1)表示MIPI数据通道输出的当前第[i*N/M]+1个像素点的数据的B分量;N/M表示缩放系数,Y表示(i*N/M)的真分数部分。根据缩放系数,将当前像素点和前一个像素点的R分量、G分量和B分量分别进行缩放计算,进而获取新的清晰完整的缩小图像。
本发明同时还提供一种基于MIPI协议的视频图像缩小的***,包括数据缓冲模块、数据获取模块和计算模块;
所述数据缓冲模块,用于根据MIPI数据通道的数据位宽与需缩小的缩放系数,将MIPI输出的通道数据延时n个字节时钟周期输出,并将延时的该通道数据存储至缓冲器内,其中,延时的字节时钟周期个数n为缩放系数与数据通道的数据位宽的比值乘以3;
所述数据获取模块,用于获取MIPI数据通道输出的当前像素点数据,并获取缓冲器内该当前像素点的前一个像素点数据以及缩放系数;
所述计算模块,用于根据当前像素点数据、上一个像素点数据以及缩放系数,计算缩放后的像素点数据。
相比于现有技术,本发明根据数据通道的数据位宽和缩放系数,将MIPI的数据通道输出的数据延时,进而只需要直接提取MIPI的数据通道输出的数据来计算新的像素点数据,无需增加时钟将MIPI的数据通道输出的数据转换后再进行缩放处理,减少了时钟数量,提高了***的稳定性。
为了更好地理解和实施,下面结合附图详细说明本发明。
附图说明
图1为本发明实施例中基于MIPI协议的视频图像缩小的方法的流程图;
图2为本发明实施例中MIPI数据通道的数据延时缓存的原理图;
图3为本发明实施例中基于MIPI协议的视频图像缩小的***的原理框图。
具体实施方式
请同时参阅图1和图2,图1为本发明实施例中基于MIPI协议的视频图像缩小的方法的流程图;图2为本发明实施例中MIPI数据通道的数据延时缓存的原理图。
该基于MIPI协议的视频图像缩小的方法,包括如下步骤:
步骤1:根据MIPI数据通道的数据位宽与需缩小的缩放系数,将MIPI输出的通道数据延时n个字节时钟周期输出,并将延时的该通道数据存储至缓冲器内,其中,延时的字节时钟周期个数n为缩放系数与数据通道的数据位宽的比值乘以3。
在一个实施例中,MIPI的数据通道的数据位宽Lane Num为4,缩放系数(N/M)=4/3,也就是N=4,M=3,下面具体说明如何对视频图像进行缩小。
若MIPI的数据通道输出的数据BYTE DATA依序表示为BYTE0、BYTE1、BYTE2…,由于每个像素点对应RGB三种分量颜色,因此,BYTE0对应第一个像素点的红色,也就是R1,BYTE1对应第一个像素点的绿色,也就是G1,BYTE2对应第一个像素点的蓝色,也就是B1。BYTE3对应第二个像素点的红色,也就是R2,BYTE4对应第二个像素点的绿色,也就是G2,BYTE5对应第二个像素点的蓝色,也就是B2。BYTE6对应第三个像素点的红色,也就是R3,BYTE7对应第三个像素点的绿色,也就是G3,BYTE8对应第三个像素点的蓝色,也就是B3。BYTE9对应第四个像素点的红色,也就是R4,BYTE10对应第四个像素点的绿色,也就是G4,BYTE11对应第四个像素点的蓝色,也就是B4,以此类推。
将MIPI的数据通道输出的数据BYTE DATA延时n个BYTE CLOKC周期,并存储至缓冲器内,延时的字节时钟周期个数n为缩放系数与数据通道的数据位宽的比值乘以3,即n=(N/M)*3/(Lane num),在本实施例中缩放系数(N/M)为4/3,Lane num为4,因此,代入n=(N/M)*3/(Lane num),计算字节时钟周期个数n为1,即延时1个字节时钟周期。
由于缩放时钟Scaler CLOCK=BYTE CLOCK*(4/3)*(M/N),当延时n个字节时钟BYTE CLOKC后,字节时钟BYTE CLOKC和缩放时钟Scaler CLOCK达到同步,相当于用一个时钟就完成了提取和缩放工作,减少了时钟的数量,提高了***的稳定性。在本实施例中,由于M=3,N=4,所以Scaler CLOCK=BYTE CLOCK。
步骤2:获取MIPI数据通道输出的当前像素点数据,并获取缓冲器内该当前像素点的前一个像素点数据以及缩放系数,计算缩放后的新像素点数据。
具体的通过以下方式计算缩放后的新像素点数据:
P_NEW(i)=P_SRC(i*N/M)=P_SRC([i*N/M])*(1-Y)+P_SRC([i*N/M]+1)*Y;
其中,P_NEW(i)表示第i个新像素点数据;P_SRC([i*N/M])表示缓冲器内第[i*N/M]个像素点的数据;P_SRC([i*N/M]+1)表示MIPI数据通道输出的当前第[i*N/M]+1个像素点的数据;N/M表示缩放系数,Y表示(i*N/M)的真分数部分。
在本实施例中,N/M=4/3,Lane num=4,缩放后的新像素点数据表示如下:
P_NEW(i)=P_SRC(i*4/3)=P_SRC([i*4/3])*(1-Y)+P_SRC([i*4/3]+1)*Y,
其中,P_NEW(i)表示第i个新像素点数据;P_SRC([i*4/3])表示缓冲器内第[i*4/3]个像素点的数据;P_SRC([i*4/3]+1)表示MIPI数据通道输出的当前第[i*4/3]+1个像素点的数据;N/M表示缩放系数,Y表示(i*4/3)的真分数部分。
具体的,新的第一个像素点表示为P_NEW(1)=P_SRC(1*4/3),将1*4/3的整数部分和真分数部分提取出来,分别为1和1/3,即P_SRC(1*4/3)=P_SRC(1)*(1-1/3)+P_SRC(1+1)*(1/3),最终获得新的第一个像素点的数据可以表示为P_NEW(1)=P_SRC(1)*(1-1/3)+P_SRC(1+1)*(1/3)。也就是说新的第一个像素点,是用原始的第一个像素点和第二个像素点乘上相应的权重得到的。同理,当i分别取不同的值得时候,可以计算出它与相应原始像素点的对应值。
由于每个像素点对应RGB三种分量颜色,计算缩放后的新像素点时,包括分别计算像素点的R分量、G分量和B分量的数据,因此根据公式P_NEW(i)=P_SRC(i*N/M),可以得到第i个新像素点数据的R分量数据为P_NEW_R(i)=P_SRC_R(i*N/M),同理可得第i个新像素点数据的G分量数据为P_NEW_G(i)=P_SRC_G(i*N/M),第i个新像素点数据的B分量数据为P_NEW_B(i)=P_SRC_B(i*N/M),具体包括如下步骤:
计算第i个新像素点数据的R分量数据:
P_NEW_R(i)=P_SRC_R(i*N/M)=P_SRC_R([i*N/M])*(1-Y)+P_SRC_R([i*N/M]+1)*Y;
其中,P_NEW_R(i)表示第i个新像素点数据的R分量;P_SRC_R([i*N/M])表示缓冲器内第[i*N/M]个像素点的数据的R分量;P_SRC_R([i*N/M]+1)表示MIPI数据通道输出的当前第[i*N/M]+1个像素点的数据的R分量;N/M表示缩放系数,Y表示(i*N/M)的真分数部分;
计算第i个新像素点数据的G分量数据:
P_NEW_G(i)=P_SRC_G(i*N/M)=P_SRC_G([i*N/M])*(1-Y)+P_SRC_G([i*N/M]+1)*Y;
其中,P_NEW_G(i)表示第i个新像素点数据的G分量;P_SRC_G([i*N/M])表示缓冲器内第[i*N/M]个像素点的数据的G分量;P_SRC_G([i*N/M]+1)表示MIPI数据通道输出的当前第[i*N/M]+1个像素点的数据的G分量;N/M表示缩放系数,Y表示(i*N/M)的真分数部分;
计算第i个新像素点数据的B分量数据:
P_NEW_B(i)=P_SRC_B(i*N/M)=P_SRC_B([i*N/M])*(1-Y)+P_SRC_B([i*N/M]+1)*Y;
其中,P_NEW_B(i)表示第i个新像素点数据的G分量;P_SRC_B([i*N/M])表示缓冲器内第[i*N/M]个像素点的数据的B分量;P_SRC_B([i*N/M]+1)表示MIPI数据通道输出的当前第[i*N/M]+1个像素点的数据的B分量;N/M表示缩放系数,Y表示(i*N/M)的真分数部分。
请参阅图3,其为本发明实施例中基于MIPI协议的视频图像缩小的***的原理框图。本发明同时还提供一种基于MIPI协议的视频图像缩小的***,包括数据缓冲模块1、数据获取模块2和计算模块3。所述数据缓冲模块1,用于根据MIPI数据通道的数据位宽与需缩小的缩放系数,将MIPI输出的通道数据延时n个字节时钟周期输出,并将延时的该通道数据存储至缓冲器内,其中,延时的字节时钟周期个数n为缩放系数与数据通道的数据位宽的比值乘以3;
所述数据获取模块2,用于获取MIPI数据通道输出的当前像素点数据,并获取缓冲器内该当前像素点的前一个像素点数据以及缩放系数;
所述计算模块3,用于根据当前像素点数据、上一个像素点数据以及缩放系数,计算缩放后的像素点数据。
在一个实施例中,所述计算模块3通过以下方式计算缩放后的新像素点数据:
P_NEW(i)=P_SRC(i*N/M)=P_SRC([i*N/M])*(1-Y)+P_SRC([i*N/M]+1)*Y;
其中,P_NEW(i)表示第i个新像素点数据;P_SRC([i*N/M])表示缓冲器内第[i*N/M]个像素点的数据;P_SRC([i*N/M]+1)表示MIPI数据通道输出的当前第[i*N/M]+1个像素点的数据;N/M表示缩放系数,Y表示(i*N/M)的真分数部分。
在一个实施例中,所述计算模块3还包括R分量计算模块31、G分量计算模块32和B分量计算模块33;
所述R分量计算模块31用于通过以下方式计算第i个新像素点数据的R分量数据:
P_NEW_R(i)=P_SRC_R(i*N/M)=P_SRC_R([i*N/M])*(1-Y)+P_SRC_R([i*N/M]+1)*Y;
其中,P_NEW_R(i)表示第i个新像素点数据的R分量;P_SRC_R([i*N/M])表示缓冲器内第[i*N/M]个像素点的数据的R分量;P_SRC_R([i*N/M]+1)表示MIPI数据通道输出的当前第[i*N/M]+1个像素点的数据的R分量;N/M表示缩放系数,Y表示(i*N/M)的真分数部分。
所述G分量计算模块32用于通过以下方式计算第i个新像素点数据的G分量数据:
P_NEW_G(i)=P_SRC_G(i*N/M)=P_SRC_G([i*N/M])*(1-Y)+P_SRC_G([i*N/M]+1)*Y;
其中,P_NEW_G(i)表示第i个新像素点数据的G分量;P_SRC_G([i*N/M])表示缓冲器内第[i*N/M]个像素点的数据的G分量;P_SRC_G([i*N/M]+1)表示MIPI数据通道输出的当前第[i*N/M]+1个像素点的数据的G分量;N/M表示缩放系数,Y表示(i*N/M)的真分数部分;
所述B分量计算模块33用于通过以下方式计算第i个新像素点数据的B分量数据:
P_NEW_B(i)=P_SRC_B(i*N/M)=P_SRC_B([i*N/M])*(1-Y)+P_SRC_B([i*N/M]+1)*Y;
其中,P_NEW_B(i)表示第i个新像素点数据的G分量;P_SRC_B([i*N/M])表示缓冲器内第[i*N/M]个像素点的数据的B分量;P_SRC_B([i*N/M]+1)表示MIPI数据通道输出的当前第[i*N/M]+1个像素点的数据的B分量;N/M表示缩放系数,Y表示(i*N/M)的真分数部分。
相比于现有技术,本发明根据数据通道的数据位宽和缩放系数,将MIPI的数据通道输出的数据延时,进而只需要直接提取MIPI的数据通道输出的数据来计算新的像素点数据,无需增加时钟将MIPI的数据通道输出的数据转换后再进行缩放处理,减少了时钟数量,提高了***的稳定性。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。