如果在一个设计中要对不同的视频信号进行处理,那么就要先知道这个视频信号是什么样的视频信号,如何能够快递的准确的判断出这个视频信号的的分辨率和帧率呢???以下是我个人的一点点想法,未必是最佳最快速的,如有不到之处,还请同学(行)们指导。
在一个视频的输入像素时钟PCLK、行信号H、场信号V、数据有效信号DE都作为输入的情况下,可以很轻松的计算出分辨率:
1、先检测到场信号的上升沿或下降沿作为一帧视频的开始。
2、在检测到DE信号的有效的时候,根据像素时钟来计数,当本次DE信号无效的时候记录的计数值V_width 就是视频分辨率的宽度。
3、在确定一帧开始之后,根据检测到DE有效的次数,就可以确定视频分辨率的高度V_hiegth,这里就可以知道视频的分辨率为V_width *V_hiegth.
4、视频的帧率也是可以确定的,有以下几个方法:
方法一:
在1中确定了视频的开始之后开始计时,计算1s的定时内检测到几帧数据(几个场信号V的上升沿或下降沿),那么帧率V_F就是几。当然如果你嫌1S的定时比较 长, 也可以定时0.5S,然后计数值乘以2就可以了 ,不过这种方法不能分辨出临近的帧率比如24F和25F。
方法二:
可以快点但是不太靠谱的方法,就是根据一帧视频的时间的长短来判断视频的帧率,不过这种方法要先测量再估算,到最后准确率还不太高。
最后方法三,是又快又可靠的,不过有他的使用范围:
比如要判定720P的帧率,720P的不同帧率的分辨率有个规律,它们的行场参数,除了行的 前肩 不同,其他的都相同,包括时钟的频率都一样,都是 74.25M。这样我们就可以根据前肩的不同来判断不同的分辨率了。只要用系统时钟或像素输入时钟来计数就可以了。但是吧,720P的视频是视频中的特殊视频,
其他的大部分视频的不同的分辨率的前肩 是这样的,25帧和50帧的前肩参数是一样的,30帧和60帧的前肩的参数也是一样的,只是他们的像素时钟不一样,一半
后者是前者的2倍吧。这样如果我们使用像素时钟来计数,那么25帧和50帧的计数就一样了,30和60 的一样,就无法分开了。不过我们可以用系统输入时钟来计数,还 是可以分辨出的,因为50 帧 60帧的像素时钟高,他们前肩的长度就会短,是25帧 30帧的一半。这样计数结果,25帧 30帧 的计数是50帧 60帧的 计数的2倍,而25 帧 和 30帧的计数又是不一样的,所以这样就可以分开不同的帧率了。
以上就是我判断视频分辨率和帧率的想法。如果视频输入没有PCLK H V DE信号怎么办?????????那就想办法根据视频信号得到这些信号(如加一个视频转换芯片),然后再判定。