Closed GoogleCodeExporter closed 9 years ago
Hi, All,
We developed a patch to support UYVY->NV12/NV21, including NEON optimization.
Please review it. We also uploaded the "before/after", which could help to
review the patch more easily.
Thanks
Bo Fang
Original comment by marvell....@gmail.com
on 14 Jul 2015 at 9:10
Attachments:
Thinking about what this function/format does...
UYVY is U, Y0, V, Y1 in memory for 2 pixels. half width, full height
YUY2 is Y0, U, Y1, V in memory for 2 pixels. half width, full height
NV12 is Y channel and VU channel with half width, half height.
NV21 is Y channel and UV channel with half width, half height.
NV24 is Y channel and VU channel with half width, full height.
NV42 is Y channel and UV channel with half width, full height.
The split function could break this into Y's and UV's, producing NV24 and NV42.
The height needs subsampling to convert NV24 to NV12 and NV42 to NV21.
Original comment by fbarch...@chromium.org
on 16 Jul 2015 at 10:32
correction on NV12:
NV12 is Y channel and UV channel with half width, half height.
NV21 is Y channel and VU channel with half width, half height.
NV24 is Y channel and UV channel with half width, full height.
NV42 is Y channel and VU channel with half width, full height.
the process for YUY2ToNV12 or UYVYToNV12 can be done in 2 steps
SplitUVRow UYVY or YUY2 into 2 planes - Y and UV
InterpolateRow to merge 2 rows of UV into one.
Original comment by fbarch...@chromium.org
on 16 Jul 2015 at 11:17
YUY2ToNV12 and UYVYToNV12 have been implemented using a 2 step conversion.
SplitUV to break out Y channel from UV.
And InterpolateRow to blend 2 rows of UV.
Advantage of this technique is leveraging existing AVX2 and Neon64.
Original comment by fbarch...@chromium.org
on 22 Jul 2015 at 10:43
Original comment by fbarch...@chromium.org
on 11 Aug 2015 at 12:26
Original issue reported on code.google.com by
fbarch...@google.com
on 13 Jul 2015 at 6:10