<html><head><meta http-equiv="content-type" content="text/html; charset=UTF-8"><style>body { line-height: 1.5; }blockquote { margin-top: 0px; margin-bottom: 0px; margin-left: 0.5em; }body { font-size: 10.5pt; font-family: 'Microsoft YaHei UI'; color: rgb(0, 0, 0); line-height: 1.5; }body { font-size: 10.5pt; font-family: 'Microsoft YaHei UI'; color: rgb(0, 0, 0); line-height: 1.5; }</style></head><body>
<div><span></span>Hi all,</div><div><br></div><div>If we move parser or part of DPB management <span style="font-family: ''; font-size: 10.5pt; line-height: 1.5; background-color: window;">mechanism into kernel we will face a issue as follows:</span></div><div><span style="font-family: ''; font-size: 10.5pt; line-height: 1.5; background-color: window;">One customer requires dpb management do a flush when stream occurs </span><span style="font-size: 10.5pt; line-height: 1.5; background-color: window;">in order to</span><span style="font-size: 10.5pt; line-height: 1.5; background-color: window;"> keep output frame clean</span><span style="background-color: window; font-family: ''; font-size: 10.5pt; line-height: 1.5;">.</span></div><div><span style="background-color: window; font-family: ''; font-size: 10.5pt; line-height: 1.5;">While another one requires output frame with error to keep output frame smooth.</span></div><div><span style="background-color: window; font-family: ''; font-size: 10.5pt; line-height: 1.5;">And when only one field has a error one customer wants to do a simple field copy to recover.</span></div><div><span style="background-color: window; font-family: ''; font-size: 10.5pt; line-height: 1.5;"><br></span></div><div><span style="background-color: window; font-family: ''; font-size: 10.5pt; line-height: 1.5;">These are some operation related to strategy rather then </span><span style="font-family: ''; font-size: 10.5pt; line-height: 1.5; background-color: window;">mechanism.</span></div><div>I think it is not a good idea to bring such kind of <span style="font-family: ''; font-size: 10.5pt; line-height: 1.5; background-color: window;">flexible process to kernel driver.</span></div><div><span style="font-family: ''; font-size: 10.5pt; line-height: 1.5; background-color: window;"><br></span></div><div><span style="font-family: ''; font-size: 10.5pt; line-height: 1.5; background-color: window;">So here is the </span><span style="font-family: ''; font-size: 10.5pt; line-height: 1.5; background-color: window;">ultimate </span><span style="font-family: ''; font-size: 10.5pt; line-height: 1.5; background-color: window;">challenge that how to </span><span style="font-family: ''; font-size: 10.5pt; line-height: 1.5; background-color: window;">reasonably move the parser and flexible process</span></div><div><span style="font-family: ''; font-size: 10.5pt; line-height: 1.5; background-color: window;">which is </span><span style="font-family: ''; font-size: 10.5pt; line-height: 1.5; background-color: window;">encapsuled in firmware </span><span style="background-color: window; font-family: ''; font-size: 10.5pt; line-height: 1.5;">to a userspace - kernel stateless driver model.</span></div><div><br></div><hr style="width: 210px; height: 1px;" color="#b5c4df" size="1" align="left">
<div><span>
<div style="FONT-SIZE: 10pt; FONT-FAMILY: verdana; MARGIN: 10px">
<div>
<div>陈恒明/Herman Chen</div>
<div>算法工程师/Algorithm Engineer</div>
<div>+86-591-83991906-8900</div>
<div>福州瑞芯微电子股份有限公司</div></div></div></span></div>
<blockquote style="margin-top: 0px; margin-bottom: 0px; margin-left: 0.5em;"><div> </div><div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm"><div style="PADDING-RIGHT: 8px; PADDING-LEFT: 8px; FONT-SIZE: 12px;FONT-FAMILY:tahoma;COLOR:#000000; BACKGROUND: #efefef; PADDING-BOTTOM: 8px; PADDING-TOP: 8px"><div><b>From:</b> <a href="mailto:randy.li@rock-chips.com">Randy Li</a></div><div><b>Date:</b> 2017-01-17 11:04</div><div><b>To:</b> <a href="mailto:linux-media@vger.kernel.org">linux-media@vger.kernel.org</a></div><div><b>CC:</b> <a href="mailto:dri-devel@lists.freedesktop.org">dri-devel@lists.freedesktop.org</a>; <a href="mailto:hverkuil@xs4all.nl">Hans Verkuil</a>; <a href="mailto:pawel@osciak.com">pawel</a>; <a href="mailto:ayaka@soulik.info">ayaka@soulik.info</a>; <a href="mailto:nicolas.dufresne@collabora.co.uk">nicolas.dufresne@collabora.co.uk</a>; <a href="mailto:florent.revest@free-electrons.com">florent.revest</a>; <a href="mailto:hugues.fruchet@st.com">hugues.fruchet</a>; <a href="mailto:herman.chen@rock-chips.com">herman.chen@rock-chips.com</a></div><div><b>Subject:</b> Request API: stateless VPU: the buffer mechanism and DPB management</div></div></div><div><div>Hello all:</div>
<div>   I have recently finish the learning of the H.264 codec and ready to </div>
<div>write the driver. Although I have not get deep in syntax of H.264 but I </div>
<div>think I just need to reuse and extended the VA-API H264 Parser from </div>
<div>gstreamer. The whole plan in userspace is just injecting a parsing </div>
<div>operation and set those v4l2 control in kernel before enqueue a buffer </div>
<div>into OUTPUT, which would keep the most compatible with those stateful </div>
<div>video IP(those with a firmware).</div>
<div>   But in order to do that, I can't avoid the management of DPB. I </div>
<div>decided to moving the DPB management job from userspace in kernel. Also </div>
<div>the video IP(On2 on rk3288 and the transition video IP on those future </div>
<div>SoC than rk3288, rkv don't have this problem) would a special way to </div>
<div>manage the DPB, which requests the same reference frame is storing in </div>
<div>the same reference index in the runtime(actually it is its Motion Vector </div>
<div>data appended in decoded YUV data would not be moved). I would suggest </div>
<div>to keep those job in kernel, the userspace just to need update the list0 </div>
<div>and list1 of DPB. DPB is self managed in kernel the userspace don't need </div>
<div>to even dequeue the buffer from CAPTURE until the re-order is done.</div>
<div>   The kernel driver would also re-order the CAPTURE buffer into display </div>
<div>order, and blocking the operation on CAPTURE until a buffer is ready to </div>
<div>place in the very display order. If I don't do that, I have to get the </div>
<div>buffer once it is decoded, and marking its result with the poc, I could </div>
<div>only begin the processing of the next frame only after those thing are </div>
<div>done. Which would effect the performance badly. That is what chromebook </div>
<div>did(I hear that from the other staff, I didn't get invoke in chromium </div>
<div>project yet). So I would suggest that doing the re-order job in kernel, </div>
<div>and inform the the userspace the buffers are ready when the new I </div>
<div>frame(key frame) is pushed into the video IP.</div>
<div>   Although moving those job into kernel would increase the loading, but </div>
<div>I think it is worth to do that, but I don't know whether all those </div>
<div>thought are correct and high performance(It is more important than API </div>
<div>compatible especially for those 4K video). And I want to know more ideas </div>
<div>about this topic.</div>
<div>   I would begin the writing the new driver after the coming culture new </div>
<div>year vacation(I would go to the Europe), I wish we can decide the final </div>
<div>mechanism before I begin this job.</div>
<div>-- </div>
<div>Randy Li</div>
<div>The third produce department</div>
<div> </div>
<div> </div>
</div></blockquote>
</body></html>