JPEG驱动,说实话,整体结构比较简单。也只是在probe()里做下初始化,然后创建一个video设备,上层通过s_fmt和ioctl等方法设好参数。最好上层调用stream_on 下层就开始编码或解码了。
具体的代码就不讲了,我们主要看一下JPEG的整个硬件结构和哪些需要我们实现代码的(我说的JPEG驱动是指硬件实现的JPEG)。下面我只是举个例子。
上面是硬件jpeg编解码的过程
这是整个JPEG的硬件结构,寄存器是通过APB总结来设置的,而JPEG数据流是通过AXI总线传输的,分为读跟写。也就是说,JPEG的图像数据都存储在内存中,编解码时从内存中读取,编解码完了之后又会把数据写回内存,从上面两个图我们可以看到数据流的方向。其中有两个memory是需要我们设置的,一个是huffman table,即哈夫曼表;另一个是quant table,即量化表。这两个表都需要我们把具体的数值写下去。其中huffman table和quant table也是分Y和UV的。也就是DC和AC的表是不同的。
下面看编解码的过程。
编码流程:
解码流程: