Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Opencv
提交
e0b772a3
O
Opencv
项目概览
Greenplum
/
Opencv
11 个月 前同步成功
通知
7
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
O
Opencv
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
e0b772a3
编写于
3月 12, 2012
作者:
A
Alexander Reshetnikov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Added a first version of new ffmpeg wrapper
上级
191e9692
变更
5
展开全部
隐藏空白更改
内联
并排
Showing
5 changed file
with
1750 addition
and
2 deletion
+1750
-2
CMakeLists.txt
CMakeLists.txt
+5
-0
modules/highgui/CMakeLists.txt
modules/highgui/CMakeLists.txt
+14
-0
modules/highgui/src/cap_ffmpeg_api.hpp
modules/highgui/src/cap_ffmpeg_api.hpp
+11
-2
modules/highgui/src/cap_ffmpeg_impl_v2.hpp
modules/highgui/src/cap_ffmpeg_impl_v2.hpp
+1470
-0
modules/highgui/src/cap_ffmpeg_v2.cpp
modules/highgui/src/cap_ffmpeg_v2.cpp
+250
-0
未找到文件。
CMakeLists.txt
浏览文件 @
e0b772a3
...
...
@@ -385,6 +385,7 @@ if(UNIX)
set
(
HAVE_FFMPEG 1
)
endif
()
endif
()
# Find the bzip2 library because it is required on some systems
FIND_LIBRARY
(
BZIP2_LIBRARIES NAMES bz2 bzip2
)
if
(
NOT BZIP2_LIBRARIES
)
...
...
@@ -393,6 +394,10 @@ if(UNIX)
endif
()
endif
()
if
(
HAVE_FFMPEG
)
CHECK_MODULE
(
libavformat>=53 NEW_FFMPEG
)
endif
()
if
(
WITH_1394
)
CHECK_MODULE
(
libdc1394-2 HAVE_DC1394_2
)
if
(
NOT HAVE_DC1394_2
)
...
...
modules/highgui/CMakeLists.txt
浏览文件 @
e0b772a3
...
...
@@ -53,6 +53,18 @@ set(grfmt_srcs src/bitstrm.cpp ${grfmt_srcs})
source_group
(
"Src
\\
grfmts"
FILES
${
grfmt_hdrs
}
${
grfmt_srcs
}
)
set
(
highgui_hdrs src/precomp.hpp src/utils.hpp
)
if
(
NEW_FFMPEG
)
set
(
highgui_srcs
src/cap.cpp
src/cap_images.cpp
src/cap_ffmpeg_v2.cpp
src/loadsave.cpp
src/precomp.cpp
src/utils.cpp
src/window.cpp
)
else
()
set
(
highgui_srcs
src/cap.cpp
src/cap_images.cpp
...
...
@@ -62,6 +74,8 @@ set(highgui_srcs
src/utils.cpp
src/window.cpp
)
endif
()
file
(
GLOB highgui_ext_hdrs
"include/opencv2/
${
name
}
/*.hpp"
"include/opencv2/
${
name
}
/*.h"
)
#YV
...
...
modules/highgui/src/cap_ffmpeg_api.hpp
浏览文件 @
e0b772a3
...
...
@@ -26,16 +26,25 @@ enum
OPENCV_FFMPEG_API
struct
CvCapture_FFMPEG
*
cvCreateFileCapture_FFMPEG
(
const
char
*
filename
);
OPENCV_FFMPEG_API
struct
CvCapture_FFMPEG_2
*
cvCreateFileCapture_FFMPEG_2
(
const
char
*
filename
);
OPENCV_FFMPEG_API
int
cvSetCaptureProperty_FFMPEG
(
struct
CvCapture_FFMPEG
*
cap
,
int
prop
,
double
value
);
OPENCV_FFMPEG_API
int
cvSetCaptureProperty_FFMPEG_2
(
struct
CvCapture_FFMPEG_2
*
cap
,
int
prop
,
double
value
);
OPENCV_FFMPEG_API
double
cvGetCaptureProperty_FFMPEG
(
struct
CvCapture_FFMPEG
*
cap
,
int
prop
);
OPENCV_FFMPEG_API
double
cvGetCaptureProperty_FFMPEG_2
(
struct
CvCapture_FFMPEG_2
*
cap
,
int
prop
);
OPENCV_FFMPEG_API
int
cvGrabFrame_FFMPEG
(
struct
CvCapture_FFMPEG
*
cap
);
OPENCV_FFMPEG_API
int
cvRetrieveFrame_FFMPEG
(
CvCapture_FFMPEG
*
capture
,
unsigned
char
**
data
,
OPENCV_FFMPEG_API
int
cvGrabFrame_FFMPEG_2
(
struct
CvCapture_FFMPEG_2
*
cap
);
OPENCV_FFMPEG_API
int
cvRetrieveFrame_FFMPEG
(
struct
CvCapture_FFMPEG
*
capture
,
unsigned
char
**
data
,
int
*
step
,
int
*
width
,
int
*
height
,
int
*
cn
);
OPENCV_FFMPEG_API
int
cvRetrieveFrame_FFMPEG_2
(
struct
CvCapture_FFMPEG_2
*
capture
,
unsigned
char
**
data
,
int
*
step
,
int
*
width
,
int
*
height
,
int
*
cn
);
OPENCV_FFMPEG_API
void
cvReleaseCapture_FFMPEG
(
struct
CvCapture_FFMPEG
**
cap
);
OPENCV_FFMPEG_API
void
cvReleaseCapture_FFMPEG_2
(
struct
CvCapture_FFMPEG_2
**
cap
);
OPENCV_FFMPEG_API
struct
CvVideoWriter_FFMPEG
*
cvCreateVideoWriter_FFMPEG
(
const
char
*
filename
,
int
fourcc
,
double
fps
,
int
width
,
int
height
,
int
isColor
);
OPENCV_FFMPEG_API
struct
CvVideoWriter_FFMPEG_2
*
cvCreateVideoWriter_FFMPEG_2
(
const
char
*
filename
,
int
fourcc
,
double
fps
,
int
width
,
int
height
,
int
isColor
);
OPENCV_FFMPEG_API
int
cvWriteFrame_FFMPEG
(
struct
CvVideoWriter_FFMPEG
*
writer
,
const
unsigned
char
*
data
,
int
step
,
int
width
,
int
height
,
int
cn
,
int
origin
);
...
...
modules/highgui/src/cap_ffmpeg_impl_v2.hpp
0 → 100755
浏览文件 @
e0b772a3
此差异已折叠。
点击以展开。
modules/highgui/src/cap_ffmpeg_v2.cpp
0 → 100644
浏览文件 @
e0b772a3
/*M///////////////////////////////////////////////////////////////////////////////////////
//
// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
//
// By downloading, copying, installing or using the software you agree to this license.
// If you do not agree to this license, do not download, install,
// copy or use the software.
//
//
// Intel License Agreement
// For Open Source Computer Vision Library
//
// Copyright (C) 2000, Intel Corporation, all rights reserved.
// Third party copyrights are property of their respective owners.
//
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
//
// * Redistribution's of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
//
// * Redistribution's in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// * The name of Intel Corporation may not be used to endorse or promote products
// derived from this software without specific prior written permission.
//
// This software is provided by the copyright holders and contributors "as is" and
// any express or implied warranties, including, but not limited to, the implied
// warranties of merchantability and fitness for a particular purpose are disclaimed.
// In no event shall the Intel Corporation or contributors be liable for any direct,
// indirect, incidental, special, exemplary, or consequential damages
// (including, but not limited to, procurement of substitute goods or services;
// loss of use, data, or profits; or business interruption) however caused
// and on any theory of liability, whether in contract, strict liability,
// or tort (including negligence or otherwise) arising in any way out of
// the use of this software, even if advised of the possibility of such damage.
//
//M*/
#include "precomp.hpp"
#ifdef HAVE_FFMPEG
#include "cap_ffmpeg_impl_v2.hpp"
#else
#include "cap_ffmpeg_api.hpp"
#endif
static
CvCreateFileCapture_Plugin
icvCreateFileCapture_FFMPEG_p
=
0
;
static
CvReleaseCapture_Plugin
icvReleaseCapture_FFMPEG_p
=
0
;
static
CvGrabFrame_Plugin
icvGrabFrame_FFMPEG_p
=
0
;
static
CvRetrieveFrame_Plugin
icvRetrieveFrame_FFMPEG_p
=
0
;
static
CvSetCaptureProperty_Plugin
icvSetCaptureProperty_FFMPEG_p
=
0
;
static
CvGetCaptureProperty_Plugin
icvGetCaptureProperty_FFMPEG_p
=
0
;
static
CvCreateVideoWriter_Plugin
icvCreateVideoWriter_FFMPEG_p
=
0
;
static
CvReleaseVideoWriter_Plugin
icvReleaseVideoWriter_FFMPEG_p
=
0
;
static
CvWriteFrame_Plugin
icvWriteFrame_FFMPEG_p
=
0
;
static
void
icvInitFFMPEG
(
void
)
{
static
int
ffmpegInitialized
=
0
;
if
(
!
ffmpegInitialized
)
{
#if defined WIN32 || defined _WIN32
const
char
*
module_name
=
"opencv_ffmpeg"
#if (defined _MSC_VER && defined _M_X64) || (defined __GNUC__ && defined __x86_64__)
"_64"
#endif
".dll"
;
static
HMODULE
icvFFOpenCV
=
LoadLibrary
(
module_name
);
if
(
icvFFOpenCV
)
{
icvCreateFileCapture_FFMPEG_p
=
(
CvCreateFileCapture_Plugin
)
GetProcAddress
(
icvFFOpenCV
,
"cvCreateFileCapture_FFMPEG_2"
);
icvReleaseCapture_FFMPEG_p
=
(
CvReleaseCapture_Plugin
)
GetProcAddress
(
icvFFOpenCV
,
"cvReleaseCapture_FFMPEG_2"
);
icvGrabFrame_FFMPEG_p
=
(
CvGrabFrame_Plugin
)
GetProcAddress
(
icvFFOpenCV
,
"cvGrabFrame_FFMPEG_2"
);
icvRetrieveFrame_FFMPEG_p
=
(
CvRetrieveFrame_Plugin
)
GetProcAddress
(
icvFFOpenCV
,
"cvRetrieveFrame_FFMPEG_2"
);
icvSetCaptureProperty_FFMPEG_p
=
(
CvSetCaptureProperty_Plugin
)
GetProcAddress
(
icvFFOpenCV
,
"cvSetCaptureProperty_FFMPEG_2"
);
icvGetCaptureProperty_FFMPEG_p
=
(
CvGetCaptureProperty_Plugin
)
GetProcAddress
(
icvFFOpenCV
,
"cvGetCaptureProperty_FFMPEG_2"
);
icvCreateVideoWriter_FFMPEG_p
=
(
CvCreateVideoWriter_Plugin
)
GetProcAddress
(
icvFFOpenCV
,
"cvCreateVideoWriter_FFMPEG"
);
icvReleaseVideoWriter_FFMPEG_p
=
(
CvReleaseVideoWriter_Plugin
)
GetProcAddress
(
icvFFOpenCV
,
"cvReleaseVideoWriter_FFMPEG"
);
icvWriteFrame_FFMPEG_p
=
(
CvWriteFrame_Plugin
)
GetProcAddress
(
icvFFOpenCV
,
"cvWriteFrame_FFMPEG"
);
#if 0
if( icvCreateFileCapture_FFMPEG_p != 0 &&
icvReleaseCapture_FFMPEG_p != 0 &&
icvGrabFrame_FFMPEG_p != 0 &&
icvRetrieveFrame_FFMPEG_p != 0 &&
icvSetCaptureProperty_FFMPEG_p != 0 &&
icvGetCaptureProperty_FFMPEG_p != 0 &&
icvCreateVideoWriter_FFMPEG_p != 0 &&
icvReleaseVideoWriter_FFMPEG_p != 0 &&
icvWriteFrame_FFMPEG_p != 0 )
{
printf("Successfully initialized ffmpeg plugin!\n");
}
else
{
printf("Failed to load FFMPEG plugin: module handle=%p\n", icvFFOpenCV);
}
#endif
}
#elif defined HAVE_FFMPEG
icvCreateFileCapture_FFMPEG_p
=
(
CvCreateFileCapture_Plugin
)
cvCreateFileCapture_FFMPEG_2
;
icvReleaseCapture_FFMPEG_p
=
(
CvReleaseCapture_Plugin
)
cvReleaseCapture_FFMPEG_2
;
icvGrabFrame_FFMPEG_p
=
(
CvGrabFrame_Plugin
)
cvGrabFrame_FFMPEG_2
;
icvRetrieveFrame_FFMPEG_p
=
(
CvRetrieveFrame_Plugin
)
cvRetrieveFrame_FFMPEG_2
;
icvSetCaptureProperty_FFMPEG_p
=
(
CvSetCaptureProperty_Plugin
)
cvSetCaptureProperty_FFMPEG_2
;
icvGetCaptureProperty_FFMPEG_p
=
(
CvGetCaptureProperty_Plugin
)
cvGetCaptureProperty_FFMPEG_2
;
icvCreateVideoWriter_FFMPEG_p
=
(
CvCreateVideoWriter_Plugin
)
cvCreateVideoWriter_FFMPEG
;
icvReleaseVideoWriter_FFMPEG_p
=
(
CvReleaseVideoWriter_Plugin
)
cvReleaseVideoWriter_FFMPEG
;
icvWriteFrame_FFMPEG_p
=
(
CvWriteFrame_Plugin
)
cvWriteFrame_FFMPEG
;
#endif
ffmpegInitialized
=
1
;
}
}
class
CvCapture_FFMPEG_proxy
:
public
CvCapture
{
public:
CvCapture_FFMPEG_proxy
()
{
ffmpegCapture
=
0
;
}
virtual
~
CvCapture_FFMPEG_proxy
()
{
close
();
}
virtual
double
getProperty
(
int
propId
)
{
return
ffmpegCapture
?
icvGetCaptureProperty_FFMPEG_p
(
ffmpegCapture
,
propId
)
:
0
;
}
virtual
bool
setProperty
(
int
propId
,
double
value
)
{
return
ffmpegCapture
?
icvSetCaptureProperty_FFMPEG_p
(
ffmpegCapture
,
propId
,
value
)
!=
0
:
false
;
}
virtual
bool
grabFrame
()
{
return
ffmpegCapture
?
icvGrabFrame_FFMPEG_p
(
ffmpegCapture
)
!=
0
:
false
;
}
virtual
IplImage
*
retrieveFrame
(
int
)
{
unsigned
char
*
data
=
0
;
int
step
=
0
,
width
=
0
,
height
=
0
,
cn
=
0
;
if
(
!
ffmpegCapture
||
!
icvRetrieveFrame_FFMPEG_p
(
ffmpegCapture
,
&
data
,
&
step
,
&
width
,
&
height
,
&
cn
))
return
0
;
cvInitImageHeader
(
&
frame
,
cvSize
(
width
,
height
),
8
,
cn
);
cvSetData
(
&
frame
,
data
,
step
);
return
&
frame
;
}
virtual
bool
open
(
const
char
*
filename
)
{
close
();
icvInitFFMPEG
();
if
(
!
icvCreateFileCapture_FFMPEG_p
)
return
false
;
ffmpegCapture
=
icvCreateFileCapture_FFMPEG_p
(
filename
);
return
ffmpegCapture
!=
0
;
}
virtual
void
close
()
{
if
(
ffmpegCapture
&&
icvReleaseCapture_FFMPEG_p
)
icvReleaseCapture_FFMPEG_p
(
&
ffmpegCapture
);
assert
(
ffmpegCapture
==
0
);
ffmpegCapture
=
0
;
}
protected:
void
*
ffmpegCapture
;
IplImage
frame
;
};
CvCapture
*
cvCreateFileCapture_FFMPEG_proxy
(
const
char
*
filename
)
{
CvCapture_FFMPEG_proxy
*
result
=
new
CvCapture_FFMPEG_proxy
;
if
(
result
->
open
(
filename
))
return
result
;
delete
result
;
#if defined WIN32 || defined _WIN32
return
cvCreateFileCapture_VFW
(
filename
);
#else
return
0
;
#endif
}
class
CvVideoWriter_FFMPEG_proxy
:
public
CvVideoWriter
{
public:
CvVideoWriter_FFMPEG_proxy
()
{
ffmpegWriter
=
0
;
}
virtual
~
CvVideoWriter_FFMPEG_proxy
()
{
close
();
}
virtual
bool
writeFrame
(
const
IplImage
*
image
)
{
if
(
!
ffmpegWriter
)
return
false
;
CV_Assert
(
image
->
depth
==
8
);
return
icvWriteFrame_FFMPEG_p
(
ffmpegWriter
,
(
const
uchar
*
)
image
->
imageData
,
image
->
widthStep
,
image
->
width
,
image
->
height
,
image
->
nChannels
,
image
->
origin
)
!=
0
;
}
virtual
bool
open
(
const
char
*
filename
,
int
fourcc
,
double
fps
,
CvSize
frameSize
,
bool
isColor
)
{
close
();
icvInitFFMPEG
();
if
(
!
icvCreateVideoWriter_FFMPEG_p
)
return
false
;
ffmpegWriter
=
icvCreateVideoWriter_FFMPEG_p
(
filename
,
fourcc
,
fps
,
frameSize
.
width
,
frameSize
.
height
,
isColor
);
return
ffmpegWriter
!=
0
;
}
virtual
void
close
()
{
if
(
ffmpegWriter
&&
icvReleaseVideoWriter_FFMPEG_p
)
icvReleaseVideoWriter_FFMPEG_p
(
&
ffmpegWriter
);
assert
(
ffmpegWriter
==
0
);
ffmpegWriter
=
0
;
}
protected:
void
*
ffmpegWriter
;
};
CvVideoWriter
*
cvCreateVideoWriter_FFMPEG_proxy
(
const
char
*
filename
,
int
fourcc
,
double
fps
,
CvSize
frameSize
,
int
isColor
)
{
CvVideoWriter_FFMPEG_proxy
*
result
=
new
CvVideoWriter_FFMPEG_proxy
;
if
(
result
->
open
(
filename
,
fourcc
,
fps
,
frameSize
,
isColor
!=
0
))
return
result
;
delete
result
;
#if defined WIN32 || defined _WIN32
return
cvCreateVideoWriter_VFW
(
filename
,
fourcc
,
fps
,
frameSize
,
isColor
);
#else
return
0
;
#endif
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录