13345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// Copyright (c) 2010 The Chromium Authors. All rights reserved.
23345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// Use of this source code is governed by a BSD-style license that can be
33345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// found in the LICENSE file.
43345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
53345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "webkit/glue/webvideoframe_impl.h"
63345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "media/base/video_frame.h"
872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "third_party/WebKit/Source/WebKit/chromium/public/WebVideoFrame.h"
93345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
103345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickusing namespace WebKit;
113345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
123345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merricknamespace webkit_glue {
133345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
143345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickmedia::VideoFrame* WebVideoFrameImpl::toVideoFrame(
153345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    WebVideoFrame* web_video_frame) {
163345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  WebVideoFrameImpl* wrapped_frame =
173345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      static_cast<WebVideoFrameImpl*>(web_video_frame);
183345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  if (wrapped_frame)
193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    return wrapped_frame->video_frame_.get();
203345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  return NULL;
213345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}
223345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
233345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickWebVideoFrameImpl::WebVideoFrameImpl(
243345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    scoped_refptr<media::VideoFrame> video_frame)
253345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    : video_frame_(video_frame) {
263345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}
273345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
28731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickWebVideoFrameImpl::~WebVideoFrameImpl() {}
29731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
303345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#define COMPILE_ASSERT_MATCHING_ENUM(webkit_name, chromium_name) \
313345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    COMPILE_ASSERT(int(WebKit::WebVideoFrame::webkit_name) == \
323345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                   int(media::VideoFrame::chromium_name), \
333345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                   mismatching_enums)
343345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickCOMPILE_ASSERT_MATCHING_ENUM(FormatInvalid, INVALID);
353345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickCOMPILE_ASSERT_MATCHING_ENUM(FormatRGB555, RGB555);
363345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickCOMPILE_ASSERT_MATCHING_ENUM(FormatRGB565, RGB565);
373345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickCOMPILE_ASSERT_MATCHING_ENUM(FormatRGB24, RGB24);
383345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickCOMPILE_ASSERT_MATCHING_ENUM(FormatRGB32, RGB32);
393345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickCOMPILE_ASSERT_MATCHING_ENUM(FormatRGBA, RGBA);
403345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickCOMPILE_ASSERT_MATCHING_ENUM(FormatYV12, YV12);
413345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickCOMPILE_ASSERT_MATCHING_ENUM(FormatYV16, YV16);
423345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickCOMPILE_ASSERT_MATCHING_ENUM(FormatNV12, NV12);
433345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickCOMPILE_ASSERT_MATCHING_ENUM(FormatEmpty, EMPTY);
443345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickCOMPILE_ASSERT_MATCHING_ENUM(FormatASCII, ASCII);
453345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
463345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickCOMPILE_ASSERT_MATCHING_ENUM(SurfaceTypeSystemMemory, TYPE_SYSTEM_MEMORY);
473345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// TODO(hclam): Add checks for newly added surface types like GL texture and
483345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// D3D texture.
493345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
503345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickWebVideoFrame::SurfaceType WebVideoFrameImpl::surfaceType() const {
513345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  if (video_frame_.get())
523345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    return static_cast<WebVideoFrame::SurfaceType>(video_frame_->type());
533345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  return WebVideoFrame::SurfaceTypeSystemMemory;
543345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}
553345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
563345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickWebVideoFrame::Format WebVideoFrameImpl::format() const {
573345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  if (video_frame_.get())
583345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    return static_cast<WebVideoFrame::Format>(video_frame_->format());
593345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  return WebVideoFrame::FormatInvalid;
603345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}
613345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
623345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickunsigned WebVideoFrameImpl::width() const {
633345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  if (video_frame_.get())
643345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    return video_frame_->width();
653345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  return 0;
663345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}
673345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
683345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickunsigned WebVideoFrameImpl::height() const {
693345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  if (video_frame_.get())
703345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    return video_frame_->height();
713345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  return 0;
723345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}
733345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
743345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickunsigned WebVideoFrameImpl::planes() const {
753345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  if (video_frame_.get())
763345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    return video_frame_->planes();
773345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  return 0;
783345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}
793345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
803345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickint WebVideoFrameImpl::stride(unsigned plane) const {
813345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  if (video_frame_.get())
823345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    return static_cast<int>(video_frame_->stride(plane));
833345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  return 0;
843345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}
853345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
863345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickconst void* WebVideoFrameImpl::data(unsigned plane) const {
873345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  if (video_frame_.get())
883345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    return static_cast<const void*>(video_frame_->data(plane));
893345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  return NULL;
903345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}
913345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
923345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickunsigned WebVideoFrameImpl::texture(unsigned plane) const {
933345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  if (video_frame_.get())
943345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    return video_frame_->gl_texture(plane);
95731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  return 0;
963345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}
973345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
983345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}  // namespace webkit_glue
99