Commit a3bc334b authored by Hirokazu Honda's avatar Hirokazu Honda Committed by Commit Bot

media/gpu: LibYUVIP: Support YV12->NV12 conversion

This enable LibYUVIP to convert YV12 image to NV12 image. I also add YV12->NV12
test case in image_processor_test. I correct the name of test image, which I
wrongly named bear_320x192.yv21.yuv.

Bug: 944823
Test: image_processor_test
Change-Id: I22614a0a626e3202e3a2c6ca9e0f77200c200c84
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1541136
Commit-Queue: Hirokazu Honda <hiroh@chromium.org>
Reviewed-by: default avatarAlexandre Courbot <acourbot@chromium.org>
Cr-Commit-Position: refs/heads/master@{#647133}
parent 46827d09
......@@ -30,6 +30,8 @@ constexpr const base::FilePath::CharType* kI420Image =
FILE_PATH_LITERAL("bear_320x192.i420.yuv");
constexpr const base::FilePath::CharType* kNV12Image =
FILE_PATH_LITERAL("bear_320x192.nv12.yuv");
constexpr const base::FilePath::CharType* kYV12Image =
FILE_PATH_LITERAL("bear_320x192.yv12.yuv");
class ImageProcessorSimpleParamTest
: public ::testing::Test,
......@@ -86,10 +88,12 @@ TEST_P(ImageProcessorSimpleParamTest, ConvertOneTimeFromMemToMem) {
}
// I420->NV12
INSTANTIATE_TEST_SUITE_P(ConvertI420ToNV12,
ImageProcessorSimpleParamTest,
::testing::Values(std::make_tuple(kI420Image,
kNV12Image)));
// YV12->NV12
INSTANTIATE_TEST_SUITE_P(
ConvertToNV12,
ImageProcessorSimpleParamTest,
::testing::Values(std::make_tuple(kI420Image, kNV12Image),
std::make_tuple(kYV12Image, kNV12Image)));
#if defined(OS_CHROMEOS)
// TODO(hiroh): Add more tests.
......
......@@ -166,6 +166,7 @@ bool LibYUVImageProcessor::IsFormatSupported(VideoPixelFormat input_format,
VideoPixelFormat output;
} kSupportFormatConversionArray[] = {
{PIXEL_FORMAT_I420, PIXEL_FORMAT_NV12},
{PIXEL_FORMAT_YV12, PIXEL_FORMAT_NV12},
};
for (auto* conv = std::cbegin(kSupportFormatConversionArray);
......@@ -188,6 +189,11 @@ int LibYUVImageProcessor::DoConversion(const VideoFrame* const input,
fr->data(VideoFrame::kUPlane), fr->stride(VideoFrame::kUPlane), \
fr->data(VideoFrame::kVPlane), fr->stride(VideoFrame::kVPlane)
#define Y_V_U_DATA(fr) \
fr->data(VideoFrame::kYPlane), fr->stride(VideoFrame::kYPlane), \
fr->data(VideoFrame::kVPlane), fr->stride(VideoFrame::kVPlane), \
fr->data(VideoFrame::kUPlane), fr->stride(VideoFrame::kUPlane)
#define Y_UV_DATA(fr) \
fr->data(VideoFrame::kYPlane), fr->stride(VideoFrame::kYPlane), \
fr->data(VideoFrame::kUVPlane), fr->stride(VideoFrame::kUVPlane)
......@@ -200,6 +206,8 @@ int LibYUVImageProcessor::DoConversion(const VideoFrame* const input,
switch (input->format()) {
case PIXEL_FORMAT_I420:
return LIBYUV_FUNC(I420ToNV12, Y_U_V_DATA(input), Y_UV_DATA(output));
case PIXEL_FORMAT_YV12:
return LIBYUV_FUNC(I420ToNV12, Y_V_U_DATA(input), Y_UV_DATA(output));
default:
VLOGF(1) << "Unexpected input format: " << input->format();
return -1;
......
......@@ -36,6 +36,8 @@ VideoPixelFormat ConvertStringtoPixelFormat(const std::string& pixel_format) {
return PIXEL_FORMAT_I420;
} else if (pixel_format == "NV12") {
return PIXEL_FORMAT_NV12;
} else if (pixel_format == "YV12") {
return PIXEL_FORMAT_YV12;
} else {
VLOG(2) << pixel_format << " is not supported.";
return PIXEL_FORMAT_UNKNOWN;
......
......@@ -785,8 +785,8 @@ First frame of bear\_320x192\_40frames.nv12.yuv for image\_processor_test.
#### bear\_320x192.nv12.yuv.json
Metadata describing bear\_320x192.nv12.yuv.
#### bear\_320x192.yv21.yuv
First frame of bear\_320x192\_40frames.yv21.yuv for image\_processor_test.
#### bear\_320x192.yv12.yuv
First frame of bear\_320x192\_40frames.yv12.yuv for image\_processor_test.
### VP9 parser test files:
......
{
"pixel_format": "YV12",
"width": 320,
"height": 192,
"checksum": "5879c66bc595e82babfe0bca28c2e4f5"
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment