1/*M/////////////////////////////////////////////////////////////////////////////////////// 2// 3// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. 4// 5// By downloading, copying, installing or using the software you agree to this license. 6// If you do not agree to this license, do not download, install, 7// copy or use the software. 8// 9// 10// License Agreement 11// For Open Source Computer Vision Library 12// 13// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. 14// Copyright (C) 2009, Willow Garage Inc., all rights reserved. 15// Third party copyrights are property of their respective owners. 16// 17// Redistribution and use in source and binary forms, with or without modification, 18// are permitted provided that the following conditions are met: 19// 20// * Redistribution's of source code must retain the above copyright notice, 21// this list of conditions and the following disclaimer. 22// 23// * Redistribution's in binary form must reproduce the above copyright notice, 24// this list of conditions and the following disclaimer in the documentation 25// and/or other materials provided with the distribution. 26// 27// * The name of the copyright holders may not be used to endorse or promote products 28// derived from this software without specific prior written permission. 29// 30// This software is provided by the copyright holders and contributors "as is" and 31// any express or implied warranties, including, but not limited to, the implied 32// warranties of merchantability and fitness for a particular purpose are disclaimed. 33// In no event shall the Intel Corporation or contributors be liable for any direct, 34// indirect, incidental, special, exemplary, or consequential damages 35// (including, but not limited to, procurement of substitute goods or services; 36// loss of use, data, or profits; or business interruption) however caused 37// and on any theory of liability, whether in contract, strict liability, 38// or tort (including negligence or otherwise) arising in any way out of 39// the use of this software, even if advised of the possibility of such damage. 40// 41//M*/ 42 43#include "test_precomp.hpp" 44#include "opencv2/videoio/videoio_c.h" 45#include <stdio.h> 46 47using namespace cv; 48using namespace std; 49 50class CV_FramecountTest: public cvtest::BaseTest 51{ 52public: 53 void run(int); 54}; 55 56void CV_FramecountTest::run(int) 57{ 58 const int time_sec = 5, fps = 25; 59 60 const string ext[] = {"avi", "mov", "mp4"}; 61 62 const size_t n = sizeof(ext)/sizeof(ext[0]); 63 64 const string src_dir = ts->get_data_path(); 65 66 ts->printf(cvtest::TS::LOG, "\n\nSource files directory: %s\n", (src_dir+"video/").c_str()); 67 68 Ptr<CvCapture> cap; 69 70 for (size_t i = 0; i < n; ++i) 71 { 72 string file_path = src_dir+"video/big_buck_bunny."+ext[i]; 73 74 cap.reset(cvCreateFileCapture(file_path.c_str())); 75 if (!cap) 76 { 77 ts->printf(cvtest::TS::LOG, "\nFile information (video %d): \n\nName: big_buck_bunny.%s\nFAILED\n\n", i+1, ext[i].c_str()); 78 ts->printf(cvtest::TS::LOG, "Error: cannot read source video file.\n"); 79 ts->set_failed_test_info(cvtest::TS::FAIL_INVALID_TEST_DATA); 80 return; 81 } 82 83 //cvSetCaptureProperty(cap, CV_CAP_PROP_POS_FRAMES, 0); 84 IplImage* frame; int FrameCount = 0; 85 86 for(;;) 87 { 88 frame = cvQueryFrame(cap); 89 if( !frame ) 90 break; 91 FrameCount++; 92 } 93 94 int framecount = (int)cvGetCaptureProperty(cap, CAP_PROP_FRAME_COUNT); 95 96 ts->printf(cvtest::TS::LOG, "\nFile information (video %d): \n"\ 97 "\nName: big_buck_bunny.%s\nActual frame count: %d\n"\ 98 "Frame count computed in the cycle of queries of frames: %d\n"\ 99 "Frame count returned by cvGetCaptureProperty function: %d\n", 100 i+1, ext[i].c_str(), time_sec*fps, FrameCount, framecount); 101 102 if( (FrameCount != cvRound(time_sec*fps) || 103 FrameCount != framecount) && ext[i] != "mpg" ) 104 { 105 ts->printf(cvtest::TS::LOG, "FAILED\n"); 106 ts->printf(cvtest::TS::LOG, "\nError: actual frame count and returned frame count are not matched.\n"); 107 ts->set_failed_test_info(cvtest::TS::FAIL_INVALID_OUTPUT); 108 return; 109 } 110 } 111} 112#if BUILD_WITH_VIDEO_INPUT_SUPPORT && defined HAVE_FFMPEG 113TEST(Videoio_Video, framecount) {CV_FramecountTest test; test.safe_run();} 114#endif 115