<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="Generator" content="Microsoft Exchange Server">
<!-- converted from rtf -->
<style><!-- .EmailQuote { margin-left: 1pt; padding-left: 4pt; border-left: #800000 2px solid; } --></style>
</head>
<body>
<font face="Calibri" size="2"><span style="font-size:11pt;">
<div>Hi Andy,</div>
<div> </div>
<div>I just submitted another patch set, most of the issues you reported are solved, please see the information below:</div>
<div><font face="Times New Roman"> </font></div>
<div>- Giving different frame rate should result different output size. The final result from my side is very close to the CBR I set. Please give a try with different frame rate and bit rate.</div>
<div><font face="Times New Roman"> </font></div>
<div>- Picture corruption (half height pic) is caused by interlaced setting. Interlace encoding is not supported. However, for transcoding case, VAAPI decode will use interlace mode, which will cause this issue. The temp solution is to use an Environmental
Variable to disable interlace when doing transcoding. Please try the following command with the new patch:</div>
<div><i>DISABLE_INTERLACE=true </i><i>gst-launch-1.0 filesrc location=~/big_buck_bunny_720p_1mb.mp4 ! qtdemux ! h264parse ! vaapidecode ! vaapih264enc ! filesink location=out.264</i></div>
<div><font face="Times New Roman"> </font></div>
<div>- I420 yuv -> nv12 case seems working fine on my side, can you please provide the testing raw file and command you were using? I want to reproduce the issue from my side and try to fix it if possible. Thanks a lot!</div>
<div> </div>
<div> </div>
<div>Hi Christian,</div>
<div> </div>
<div>Besides fixing those issue listed above, I also modified the code based on your suggestions, e.g. adding mutex lock/unlock. Please take a look at the new patch set, and feel free to give any suggestions/comments. Thanks!</div>
<div> </div>
<div>Regards,</div>
<div>Boyuan </div>
<div><font face="Times New Roman"> </font></div>
<div>-----Original Message-----<br>

From: Christian König [<a href="mailto:deathsimple@vodafone.de">mailto:deathsimple@vodafone.de</a>]
<br>

Sent: July-18-16 10:15 AM<br>

To: Zhang, Boyuan; mesa-dev@lists.freedesktop.org<br>

Cc: adf.lists@gmail.com<br>

Subject: Re: [PATCH 06/11] vl/util: add copy func for yv12image to nv12surface</div>
<div><font face="Times New Roman"> </font></div>
<div>Am 16.07.2016 um 00:41 schrieb Boyuan Zhang:</div>
<div>> Add function to copy from yv12 image to nv12 surface for VAAPI putimage call. We need this function in VaPutImage call where copying from yv12 image to nv12 surface for encoding. Existing function can't be used because it only work for copying from yv12
surface to nv12 image in Vaapi.</div>
<div> </div>
<div>I think we can keep the patches mostly as they are now, but I would like to get a bit more positive feedback from Andy and maybe others.</div>
<div> </div>
<div>E.g. at least we should be able to encode something without crashing on Tonga and other hardware generations as well before we push it upstream.</div>
<div> </div>
<div>Regards,</div>
<div>Christian.</div>
<div> </div>
<div>></div>
<div>> Signed-off-by: Boyuan Zhang <<a href="mailto:boyuan.zhang@amd.com">boyuan.zhang@amd.com</a>></div>
<div>> ---</div>
<div>>   src/gallium/auxiliary/util/u_video.h | 23 +++++++++++++++++++++++</div>
<div>>   1 file changed, 23 insertions(+)</div>
<div>></div>
<div>> diff --git a/src/gallium/auxiliary/util/u_video.h </div>
<div>> b/src/gallium/auxiliary/util/u_video.h</div>
<div>> index 9196afc..d147295 100644</div>
<div>> --- a/src/gallium/auxiliary/util/u_video.h</div>
<div>> +++ b/src/gallium/auxiliary/util/u_video.h</div>
<div>> @@ -130,6 +130,29 @@ u_copy_yv12_to_nv12(void *const *destination_data,</div>
<div>>   }</div>
<div>>   </div>
<div>>   static inline void</div>
<div>> +u_copy_yv12_img_to_nv12_surf(uint8_t *const *src,</div>
<div>> +                             uint8_t *dest,</div>
<div>> +                             int *offset,</div>
<div>> +                             int field) {</div>
<div>> +   if (field == 0) {</div>
<div>> +      for (int i = 0; i < offset[1] ; i++)</div>
<div>> +         dest[i] = src[field][i];</div>
<div>> +   } else if (field == 1) {</div>
<div>> +      bool odd = false;</div>
<div>> +      for (int i = 0; i < (offset[1]/2) ; i++){</div>
<div>> +         if (odd == false) {</div>
<div>> +            dest[i] = src[field][i/2];</div>
<div>> +            odd = true;</div>
<div>> +         } else {</div>
<div>> +            dest[i] = src[field+1][i/2];</div>
<div>> +            odd = false;</div>
<div>> +         }</div>
<div>> +      }</div>
<div>> +   }</div>
<div>> +}</div>
<div>> +</div>
<div>> +static inline void</div>
<div>>   u_copy_swap422_packed(void *const *destination_data,</div>
<div>>                          uint32_t const *destination_pitches,</div>
<div>>                          int src_plane, int src_field,</div>
<div> </div>
<div><font face="Times New Roman"> </font></div>
</span></font>
</body>
</html>