blob: 56b39a1ed76761c2abab832ef02f84dc6a44eedb [file] [log] [blame]
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "media/base/video_types.h"
#include <ostream>
#include "base/notreached.h"
#include "base/strings/stringprintf.h"
namespace media {
std::string VideoPixelFormatToString(VideoPixelFormat format) {
switch (format) {
case PIXEL_FORMAT_UNKNOWN:
return "PIXEL_FORMAT_UNKNOWN";
case PIXEL_FORMAT_I420:
return "PIXEL_FORMAT_I420";
case PIXEL_FORMAT_YV12:
return "PIXEL_FORMAT_YV12";
case PIXEL_FORMAT_I422:
return "PIXEL_FORMAT_I422";
case PIXEL_FORMAT_I420A:
return "PIXEL_FORMAT_I420A";
case PIXEL_FORMAT_I444:
return "PIXEL_FORMAT_I444";
case PIXEL_FORMAT_NV12:
return "PIXEL_FORMAT_NV12";
case PIXEL_FORMAT_NV21:
return "PIXEL_FORMAT_NV21";
case PIXEL_FORMAT_UYVY:
return "PIXEL_FORMAT_UYVY";
case PIXEL_FORMAT_YUY2:
return "PIXEL_FORMAT_YUY2";
case PIXEL_FORMAT_ARGB:
return "PIXEL_FORMAT_ARGB";
case PIXEL_FORMAT_XRGB:
return "PIXEL_FORMAT_XRGB";
case PIXEL_FORMAT_RGB24:
return "PIXEL_FORMAT_RGB24";
case PIXEL_FORMAT_MJPEG:
return "PIXEL_FORMAT_MJPEG";
case PIXEL_FORMAT_YUV420P9:
return "PIXEL_FORMAT_YUV420P9";
case PIXEL_FORMAT_YUV420P10:
return "PIXEL_FORMAT_YUV420P10";
case PIXEL_FORMAT_YUV422P9:
return "PIXEL_FORMAT_YUV422P9";
case PIXEL_FORMAT_YUV422P10:
return "PIXEL_FORMAT_YUV422P10";
case PIXEL_FORMAT_YUV444P9:
return "PIXEL_FORMAT_YUV444P9";
case PIXEL_FORMAT_YUV444P10:
return "PIXEL_FORMAT_YUV444P10";
case PIXEL_FORMAT_YUV420P12:
return "PIXEL_FORMAT_YUV420P12";
case PIXEL_FORMAT_YUV422P12:
return "PIXEL_FORMAT_YUV422P12";
case PIXEL_FORMAT_YUV444P12:
return "PIXEL_FORMAT_YUV444P12";
case PIXEL_FORMAT_Y16:
return "PIXEL_FORMAT_Y16";
case PIXEL_FORMAT_ABGR:
return "PIXEL_FORMAT_ABGR";
case PIXEL_FORMAT_XBGR:
return "PIXEL_FORMAT_XBGR";
case PIXEL_FORMAT_P016LE:
return "PIXEL_FORMAT_P016LE";
case PIXEL_FORMAT_XR30:
return "PIXEL_FORMAT_XR30";
case PIXEL_FORMAT_XB30:
return "PIXEL_FORMAT_XB30";
case PIXEL_FORMAT_BGRA:
return "PIXEL_FORMAT_BGRA";
case PIXEL_FORMAT_RGBAF16:
return "PIXEL_FORMAT_RGBAF16";
}
NOTREACHED() << "Invalid VideoPixelFormat provided: " << format;
return "";
}
std::ostream& operator<<(std::ostream& os, VideoPixelFormat format) {
os << VideoPixelFormatToString(format);
return os;
}
std::string FourccToString(uint32_t fourcc) {
std::string result = "0000";
for (size_t i = 0; i < 4; ++i, fourcc >>= 8) {
const char c = static_cast<char>(fourcc & 0xFF);
if (c <= 0x1f || c >= 0x7f)
return base::StringPrintf("0x%x", fourcc);
result[i] = c;
}
return result;
}
bool IsYuvPlanar(VideoPixelFormat format) {
switch (format) {
case PIXEL_FORMAT_YV12:
case PIXEL_FORMAT_I420:
case PIXEL_FORMAT_I422:
case PIXEL_FORMAT_I420A:
case PIXEL_FORMAT_I444:
case PIXEL_FORMAT_NV12:
case PIXEL_FORMAT_NV21:
case PIXEL_FORMAT_YUV420P9:
case PIXEL_FORMAT_YUV420P10:
case PIXEL_FORMAT_YUV422P9:
case PIXEL_FORMAT_YUV422P10:
case PIXEL_FORMAT_YUV444P9:
case PIXEL_FORMAT_YUV444P10:
case PIXEL_FORMAT_YUV420P12:
case PIXEL_FORMAT_YUV422P12:
case PIXEL_FORMAT_YUV444P12:
case PIXEL_FORMAT_P016LE:
return true;
case PIXEL_FORMAT_UNKNOWN:
case PIXEL_FORMAT_UYVY:
case PIXEL_FORMAT_YUY2:
case PIXEL_FORMAT_ARGB:
case PIXEL_FORMAT_XRGB:
case PIXEL_FORMAT_RGB24:
case PIXEL_FORMAT_MJPEG:
case PIXEL_FORMAT_Y16:
case PIXEL_FORMAT_ABGR:
case PIXEL_FORMAT_XBGR:
case PIXEL_FORMAT_XR30:
case PIXEL_FORMAT_XB30:
case PIXEL_FORMAT_BGRA:
case PIXEL_FORMAT_RGBAF16:
return false;
}
return false;
}
bool IsOpaque(VideoPixelFormat format) {
switch (format) {
case PIXEL_FORMAT_UNKNOWN:
case PIXEL_FORMAT_I420:
case PIXEL_FORMAT_YV12:
case PIXEL_FORMAT_I422:
case PIXEL_FORMAT_I444:
case PIXEL_FORMAT_NV12:
case PIXEL_FORMAT_NV21:
case PIXEL_FORMAT_YUY2:
case PIXEL_FORMAT_UYVY:
case PIXEL_FORMAT_XRGB:
case PIXEL_FORMAT_RGB24:
case PIXEL_FORMAT_MJPEG:
case PIXEL_FORMAT_YUV420P9:
case PIXEL_FORMAT_YUV420P10:
case PIXEL_FORMAT_YUV422P9:
case PIXEL_FORMAT_YUV422P10:
case PIXEL_FORMAT_YUV444P9:
case PIXEL_FORMAT_YUV444P10:
case PIXEL_FORMAT_YUV420P12:
case PIXEL_FORMAT_YUV422P12:
case PIXEL_FORMAT_YUV444P12:
case PIXEL_FORMAT_Y16:
case PIXEL_FORMAT_XBGR:
case PIXEL_FORMAT_P016LE:
case PIXEL_FORMAT_XR30:
case PIXEL_FORMAT_XB30:
return true;
case PIXEL_FORMAT_I420A:
case PIXEL_FORMAT_ARGB:
case PIXEL_FORMAT_ABGR:
case PIXEL_FORMAT_BGRA:
case PIXEL_FORMAT_RGBAF16:
break;
}
return false;
}
size_t BitDepth(VideoPixelFormat format) {
switch (format) {
case PIXEL_FORMAT_UNKNOWN:
NOTREACHED();
FALLTHROUGH;
case PIXEL_FORMAT_I420:
case PIXEL_FORMAT_YV12:
case PIXEL_FORMAT_I422:
case PIXEL_FORMAT_I420A:
case PIXEL_FORMAT_I444:
case PIXEL_FORMAT_NV12:
case PIXEL_FORMAT_NV21:
case PIXEL_FORMAT_YUY2:
case PIXEL_FORMAT_UYVY:
case PIXEL_FORMAT_ARGB:
case PIXEL_FORMAT_XRGB:
case PIXEL_FORMAT_RGB24:
case PIXEL_FORMAT_MJPEG:
case PIXEL_FORMAT_ABGR:
case PIXEL_FORMAT_XBGR:
case PIXEL_FORMAT_BGRA:
return 8;
case PIXEL_FORMAT_YUV420P9:
case PIXEL_FORMAT_YUV422P9:
case PIXEL_FORMAT_YUV444P9:
return 9;
case PIXEL_FORMAT_YUV420P10:
case PIXEL_FORMAT_YUV422P10:
case PIXEL_FORMAT_YUV444P10:
case PIXEL_FORMAT_XR30:
case PIXEL_FORMAT_XB30:
return 10;
case PIXEL_FORMAT_YUV420P12:
case PIXEL_FORMAT_YUV422P12:
case PIXEL_FORMAT_YUV444P12:
return 12;
case PIXEL_FORMAT_Y16:
case PIXEL_FORMAT_P016LE:
case PIXEL_FORMAT_RGBAF16:
return 16;
}
NOTREACHED();
return 0;
}
} // namespace media