1ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org/* 2ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. 3ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org * 4ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org * Use of this source code is governed by a BSD-style license 5ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org * that can be found in the LICENSE file in the root of the source 6ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org * tree. An additional intellectual property rights grant can be found 7ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org * in the file PATENTS. All contributing project authors may 8ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org * be found in the AUTHORS file in the root of the source tree. 9ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org */ 10ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org 111bdf186e6ae8d2f1a7d055237a75c0d7fd189624wuchengli@chromium.org#include "webrtc/common_video/interface/texture_video_frame.h" 121bdf186e6ae8d2f1a7d055237a75c0d7fd189624wuchengli@chromium.org 13ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org#include "testing/gtest/include/gtest/gtest.h" 14ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org#include "webrtc/common_video/interface/native_handle.h" 15ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org 16ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.orgnamespace webrtc { 17ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org 18ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.orgclass NativeHandleImpl : public NativeHandle { 19ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org public: 20ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org NativeHandleImpl() : ref_count_(0) {} 21ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org virtual ~NativeHandleImpl() {} 22ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org virtual int32_t AddRef() { return ++ref_count_; } 23ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org virtual int32_t Release() { return --ref_count_; } 24ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org virtual void* GetHandle() { return NULL; } 25ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org 26ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org int32_t ref_count() { return ref_count_; } 27ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org private: 28ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org int32_t ref_count_; 29ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org}; 30ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org 311bdf186e6ae8d2f1a7d055237a75c0d7fd189624wuchengli@chromium.orgbool EqualTextureFrames(const I420VideoFrame& frame1, 321bdf186e6ae8d2f1a7d055237a75c0d7fd189624wuchengli@chromium.org const I420VideoFrame& frame2); 331bdf186e6ae8d2f1a7d055237a75c0d7fd189624wuchengli@chromium.org 34ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.orgTEST(TestTextureVideoFrame, InitialValues) { 35ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org NativeHandleImpl handle; 36ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org TextureVideoFrame frame(&handle, 640, 480, 100, 10); 37ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org EXPECT_EQ(640, frame.width()); 38ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org EXPECT_EQ(480, frame.height()); 39ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org EXPECT_EQ(100u, frame.timestamp()); 40ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org EXPECT_EQ(10, frame.render_time_ms()); 41ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org EXPECT_EQ(&handle, frame.native_handle()); 42ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org 43ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org EXPECT_EQ(0, frame.set_width(320)); 44ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org EXPECT_EQ(320, frame.width()); 45ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org EXPECT_EQ(0, frame.set_height(240)); 46ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org EXPECT_EQ(240, frame.height()); 47ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org frame.set_timestamp(200); 48ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org EXPECT_EQ(200u, frame.timestamp()); 49ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org frame.set_render_time_ms(20); 50ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org EXPECT_EQ(20, frame.render_time_ms()); 51ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org} 52ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org 53ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.orgTEST(TestTextureVideoFrame, RefCount) { 54ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org NativeHandleImpl handle; 55ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org EXPECT_EQ(0, handle.ref_count()); 56ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org TextureVideoFrame *frame = new TextureVideoFrame(&handle, 640, 480, 100, 200); 57ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org EXPECT_EQ(1, handle.ref_count()); 58ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org delete frame; 59ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org EXPECT_EQ(0, handle.ref_count()); 60ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org} 61ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org 621bdf186e6ae8d2f1a7d055237a75c0d7fd189624wuchengli@chromium.orgTEST(TestTextureVideoFrame, CloneFrame) { 631bdf186e6ae8d2f1a7d055237a75c0d7fd189624wuchengli@chromium.org NativeHandleImpl handle; 641bdf186e6ae8d2f1a7d055237a75c0d7fd189624wuchengli@chromium.org TextureVideoFrame frame1(&handle, 640, 480, 100, 200); 651bdf186e6ae8d2f1a7d055237a75c0d7fd189624wuchengli@chromium.org scoped_ptr<I420VideoFrame> frame2(frame1.CloneFrame()); 661bdf186e6ae8d2f1a7d055237a75c0d7fd189624wuchengli@chromium.org EXPECT_TRUE(frame2.get() != NULL); 671bdf186e6ae8d2f1a7d055237a75c0d7fd189624wuchengli@chromium.org EXPECT_TRUE(EqualTextureFrames(frame1, *frame2)); 681bdf186e6ae8d2f1a7d055237a75c0d7fd189624wuchengli@chromium.org} 691bdf186e6ae8d2f1a7d055237a75c0d7fd189624wuchengli@chromium.org 701bdf186e6ae8d2f1a7d055237a75c0d7fd189624wuchengli@chromium.orgbool EqualTextureFrames(const I420VideoFrame& frame1, 711bdf186e6ae8d2f1a7d055237a75c0d7fd189624wuchengli@chromium.org const I420VideoFrame& frame2) { 721bdf186e6ae8d2f1a7d055237a75c0d7fd189624wuchengli@chromium.org return ((frame1.native_handle() == frame2.native_handle()) && 731bdf186e6ae8d2f1a7d055237a75c0d7fd189624wuchengli@chromium.org (frame1.width() == frame2.width()) && 741bdf186e6ae8d2f1a7d055237a75c0d7fd189624wuchengli@chromium.org (frame1.height() == frame2.height()) && 751bdf186e6ae8d2f1a7d055237a75c0d7fd189624wuchengli@chromium.org (frame1.timestamp() == frame2.timestamp()) && 761bdf186e6ae8d2f1a7d055237a75c0d7fd189624wuchengli@chromium.org (frame1.render_time_ms() == frame2.render_time_ms())); 771bdf186e6ae8d2f1a7d055237a75c0d7fd189624wuchengli@chromium.org} 781bdf186e6ae8d2f1a7d055237a75c0d7fd189624wuchengli@chromium.org 79ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org} // namespace webrtc 80