15976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org/* 25976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * libjingle 35976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * Copyright 2004 Google Inc. 45976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * 55976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * Redistribution and use in source and binary forms, with or without 65976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * modification, are permitted provided that the following conditions are met: 75976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * 85976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * 1. Redistributions of source code must retain the above copyright notice, 95976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * this list of conditions and the following disclaimer. 105976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * 2. Redistributions in binary form must reproduce the above copyright notice, 115976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * this list of conditions and the following disclaimer in the documentation 125976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * and/or other materials provided with the distribution. 135976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * 3. The name of the author may not be used to endorse or promote products 145976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * derived from this software without specific prior written permission. 155976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * 165976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 175976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 185976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 195976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 205976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 215976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 225976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 235976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 245976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 255976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 265976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org */ 275976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 285976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include <stdio.h> 295976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 305976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include <string> 315976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include <vector> 325976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 335976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/base/gunit.h" 345976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/base/logging.h" 355976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/base/thread.h" 365976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/media/base/testutils.h" 375976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/media/devices/filevideocapturer.h" 385976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 395976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgnamespace { 405976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 415976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgclass FileVideoCapturerTest : public testing::Test { 425976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org public: 435976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org virtual void SetUp() { 445976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org capturer_.reset(new cricket::FileVideoCapturer); 455976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 465976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 475976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org bool OpenFile(const std::string& filename) { 485976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return capturer_->Init(cricket::GetTestFilePath(filename)); 495976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 505976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 515976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org protected: 525976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org class VideoCapturerListener : public sigslot::has_slots<> { 535976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org public: 545976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org VideoCapturerListener() 555976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org : frame_count_(0), 565976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org frame_width_(0), 575976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org frame_height_(0), 585976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org resolution_changed_(false) { 595976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 605976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 615976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org void OnFrameCaptured(cricket::VideoCapturer* capturer, 625976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org const cricket::CapturedFrame* frame) { 635976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org ++frame_count_; 645976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org if (1 == frame_count_) { 655976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org frame_width_ = frame->width; 665976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org frame_height_ = frame->height; 675976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } else if (frame_width_ != frame->width || 685976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org frame_height_ != frame->height) { 695976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org resolution_changed_ = true; 705976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 715976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 725976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 735976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org int frame_count() const { return frame_count_; } 745976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org int frame_width() const { return frame_width_; } 755976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org int frame_height() const { return frame_height_; } 765976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org bool resolution_changed() const { return resolution_changed_; } 775976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 785976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org private: 795976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org int frame_count_; 805976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org int frame_width_; 815976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org int frame_height_; 825976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org bool resolution_changed_; 835976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org }; 845976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 855976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org talk_base::scoped_ptr<cricket::FileVideoCapturer> capturer_; 865976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org cricket::VideoFormat capture_format_; 875976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org}; 885976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 895976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_F(FileVideoCapturerTest, TestNotOpened) { 905976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ("", capturer_->GetId()); 915976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_TRUE(capturer_->GetSupportedFormats()->empty()); 925976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ(NULL, capturer_->GetCaptureFormat()); 935976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_FALSE(capturer_->IsRunning()); 945976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 955976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 965976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_F(FileVideoCapturerTest, TestInvalidOpen) { 975976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_FALSE(OpenFile("NotmeNotme")); 985976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 995976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1005976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_F(FileVideoCapturerTest, TestOpen) { 1015976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_TRUE(OpenFile("captured-320x240-2s-48.frames")); 1025976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_NE("", capturer_->GetId()); 1035976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_TRUE(NULL != capturer_->GetSupportedFormats()); 1045976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ(1U, capturer_->GetSupportedFormats()->size()); 1055976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ(NULL, capturer_->GetCaptureFormat()); // not started yet 1065976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_FALSE(capturer_->IsRunning()); 1075976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 1085976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1095976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_F(FileVideoCapturerTest, TestLargeSmallDesiredFormat) { 1105976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_TRUE(OpenFile("captured-320x240-2s-48.frames")); 1115976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // desired format with large resolution. 1125976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org cricket::VideoFormat desired( 1135976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 3200, 2400, cricket::VideoFormat::FpsToInterval(30), cricket::FOURCC_ANY); 1145976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_TRUE(capturer_->GetBestCaptureFormat(desired, &capture_format_)); 1155976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ(320, capture_format_.width); 1165976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ(240, capture_format_.height); 1175976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1185976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // Desired format with small resolution. 1195976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org desired.width = 0; 1205976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org desired.height = 0; 1215976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_TRUE(capturer_->GetBestCaptureFormat(desired, &capture_format_)); 1225976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ(320, capture_format_.width); 1235976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ(240, capture_format_.height); 1245976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 1255976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1265976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_F(FileVideoCapturerTest, TestSupportedAsDesiredFormat) { 1275976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_TRUE(OpenFile("captured-320x240-2s-48.frames")); 1285976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // desired format same as the capture format supported by the file 1295976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org cricket::VideoFormat desired = capturer_->GetSupportedFormats()->at(0); 1305976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_TRUE(capturer_->GetBestCaptureFormat(desired, &capture_format_)); 1315976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_TRUE(desired == capture_format_); 1325976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1335976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // desired format same as the supported capture format except the fourcc 1345976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org desired.fourcc = cricket::FOURCC_ANY; 1355976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_TRUE(capturer_->GetBestCaptureFormat(desired, &capture_format_)); 1365976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_NE(capture_format_.fourcc, desired.fourcc); 1375976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1385976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // desired format with minimum interval 1395976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org desired.interval = cricket::VideoFormat::kMinimumInterval; 1405976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_TRUE(capturer_->GetBestCaptureFormat(desired, &capture_format_)); 1415976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 1425976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1435976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_F(FileVideoCapturerTest, TestNoRepeat) { 1445976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_TRUE(OpenFile("captured-320x240-2s-48.frames")); 1455976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org VideoCapturerListener listener; 1465976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org capturer_->SignalFrameCaptured.connect( 1475976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org &listener, &VideoCapturerListener::OnFrameCaptured); 1485976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org capturer_->set_repeat(0); 1495976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org capture_format_ = capturer_->GetSupportedFormats()->at(0); 1505976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ(cricket::CS_RUNNING, capturer_->Start(capture_format_)); 1515976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_TRUE_WAIT(!capturer_->IsRunning(), 20000); 1525976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ(48, listener.frame_count()); 1535976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 1545976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1555976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_F(FileVideoCapturerTest, TestRepeatForever) { 1565976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // Start the capturer_ with 50 fps and read no less than 150 frames. 1575976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_TRUE(OpenFile("captured-320x240-2s-48.frames")); 1585976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org VideoCapturerListener listener; 1595976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org capturer_->SignalFrameCaptured.connect( 1605976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org &listener, &VideoCapturerListener::OnFrameCaptured); 1615976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org capturer_->set_repeat(talk_base::kForever); 1625976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org capture_format_ = capturer_->GetSupportedFormats()->at(0); 1635976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org capture_format_.interval = cricket::VideoFormat::FpsToInterval(50); 1645976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ(cricket::CS_RUNNING, capturer_->Start(capture_format_)); 1655976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_TRUE(NULL != capturer_->GetCaptureFormat()); 1665976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_TRUE(capture_format_ == *capturer_->GetCaptureFormat()); 1675976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_TRUE_WAIT(!capturer_->IsRunning() || 1685976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org listener.frame_count() >= 150, 20000); 1695976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org capturer_->Stop(); 1705976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_FALSE(capturer_->IsRunning()); 1715976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_GE(listener.frame_count(), 150); 1725976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_FALSE(listener.resolution_changed()); 1735976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ(listener.frame_width(), capture_format_.width); 1745976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ(listener.frame_height(), capture_format_.height); 1755976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 1765976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1778502b95e019b7f9038cd7b2e260844c72e913522andrew@webrtc.org// See: https://code.google.com/p/webrtc/issues/detail?id=2409 1788502b95e019b7f9038cd7b2e260844c72e913522andrew@webrtc.orgTEST_F(FileVideoCapturerTest, DISABLED_TestPartialFrameHeader) { 1795976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_TRUE(OpenFile("1.frame_plus_1.byte")); 1805976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org VideoCapturerListener listener; 1815976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org capturer_->SignalFrameCaptured.connect( 1825976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org &listener, &VideoCapturerListener::OnFrameCaptured); 1835976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org capturer_->set_repeat(0); 1845976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org capture_format_ = capturer_->GetSupportedFormats()->at(0); 1855976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ(cricket::CS_RUNNING, capturer_->Start(capture_format_)); 1865976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_TRUE_WAIT(!capturer_->IsRunning(), 1000); 1875976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ(1, listener.frame_count()); 1885976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 1895976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1905976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST_F(FileVideoCapturerTest, TestFileDevices) { 1915976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org cricket::Device not_a_file("I'm a camera", "with an id"); 1925976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_FALSE( 1935976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org cricket::FileVideoCapturer::IsFileVideoCapturerDevice(not_a_file)); 1945976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org const std::string test_file = 1955976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org cricket::GetTestFilePath("captured-320x240-2s-48.frames"); 1965976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org cricket::Device file_device = 1975976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org cricket::FileVideoCapturer::CreateFileVideoCapturerDevice(test_file); 1985976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_TRUE( 1995976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org cricket::FileVideoCapturer::IsFileVideoCapturerDevice(file_device)); 2005976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_TRUE(capturer_->Init(file_device)); 2015976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ(file_device.id, capturer_->GetId()); 2025976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 2035976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 2045976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} // unnamed namespace 205