158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// found in the LICENSE file.
458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "media/video/capture/video_capture_types.h"
658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/logging.h"
81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/strings/stringprintf.h"
958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "media/base/limits.h"
1058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
1158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)namespace media {
1258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
1358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)VideoCaptureFormat::VideoCaptureFormat()
14116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    : frame_rate(0.0f), pixel_format(PIXEL_FORMAT_UNKNOWN) {}
15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)VideoCaptureFormat::VideoCaptureFormat(const gfx::Size& frame_size,
1746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                                       float frame_rate,
18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                       VideoPixelFormat pixel_format)
19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    : frame_size(frame_size),
2058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      frame_rate(frame_rate),
21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      pixel_format(pixel_format) {}
2258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
2358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)bool VideoCaptureFormat::IsValid() const {
24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  return (frame_size.width() < media::limits::kMaxDimension) &&
25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)         (frame_size.height() < media::limits::kMaxDimension) &&
26a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         (frame_size.GetArea() >= 0) &&
27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)         (frame_size.GetArea() < media::limits::kMaxCanvas) &&
28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         (frame_rate >= 0.0f) &&
2958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)         (frame_rate < media::limits::kMaxFramesPerSecond) &&
30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)         (pixel_format >= PIXEL_FORMAT_UNKNOWN) &&
31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)         (pixel_format < PIXEL_FORMAT_MAX);
3258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
3358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccistd::string VideoCaptureFormat::ToString() const {
351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return base::StringPrintf("resolution: %s, fps: %f, pixel format: %s",
361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                            frame_size.ToString().c_str(),
371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                            frame_rate,
381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                            PixelFormatToString(pixel_format).c_str());
391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)std::string VideoCaptureFormat::PixelFormatToString(VideoPixelFormat format) {
425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  switch (format) {
435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  case PIXEL_FORMAT_UNKNOWN:
445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return "UNKNOWN";
455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  case PIXEL_FORMAT_I420:
465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return "I420";
475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  case PIXEL_FORMAT_YUY2:
485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return "YUY2";
495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  case PIXEL_FORMAT_UYVY:
505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return "UYUY";
515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  case PIXEL_FORMAT_RGB24:
525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return "RGB24";
535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  case PIXEL_FORMAT_ARGB:
545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return "ARGB";
555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  case PIXEL_FORMAT_MJPEG:
565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return "MJPEG";
575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  case PIXEL_FORMAT_NV21:
585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return "YV12";
595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  case PIXEL_FORMAT_YV12:
605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return "YV12";
615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  case PIXEL_FORMAT_TEXTURE:
625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return "TEXTURE";
635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  case PIXEL_FORMAT_MAX:
645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    break;
655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  }
665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  NOTREACHED() << "Invalid VideoPixelFormat provided: " << format;
675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return "";
685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciVideoCaptureParams::VideoCaptureParams()
711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    : resolution_change_policy(RESOLUTION_POLICY_FIXED) {}
7258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}  // namespace media
73