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