Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Opencv
提交
36b2ff3c
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,发现更多精彩内容 >>
提交
36b2ff3c
编写于
3月 15, 2012
作者:
A
Alexander Reshetnikov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fixed compiling error under Ubuntu with ffmpeg 0.7.x and advised under Windows
上级
ddc4ed47
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
253 addition
and
4 deletion
+253
-4
CMakeLists.txt
CMakeLists.txt
+1
-1
modules/highgui/src/cap_ffmpeg_impl_v2.hpp
modules/highgui/src/cap_ffmpeg_impl_v2.hpp
+252
-3
未找到文件。
CMakeLists.txt
浏览文件 @
36b2ff3c
...
...
@@ -395,7 +395,7 @@ if(UNIX)
endif
()
if
(
HAVE_FFMPEG
)
CHECK_MODULE
(
libavformat>=5
3
NEW_FFMPEG
)
CHECK_MODULE
(
libavformat>=5
2.111.0
NEW_FFMPEG
)
endif
()
if
(
WITH_1394
)
...
...
modules/highgui/src/cap_ffmpeg_impl_v2.hpp
浏览文件 @
36b2ff3c
...
...
@@ -54,10 +54,253 @@ extern "C" {
#endif
#include "cap_ffmpeg_api.hpp"
#include "assert.h"
#include <assert.h>
#include <algorithm>
#if defined _MSC_VER && _MSC_VER >= 1200
#pragma warning( default: 4244 4510 4512 4610 )
#endif
#ifdef NDEBUG
#define CV_WARN(message)
#else
#define CV_WARN(message) fprintf(stderr, "warning: %s (%s:%d)\n", message, __FILE__, __LINE__)
#endif
#ifndef MKTAG
#define MKTAG(a,b,c,d) (a | (b << 8) | (c << 16) | (d << 24))
#endif
/* PIX_FMT_RGBA32 macro changed in newer ffmpeg versions */
#ifndef PIX_FMT_RGBA32
#define PIX_FMT_RGBA32 PIX_FMT_RGB32
#endif
#define CALC_FFMPEG_VERSION(a,b,c) ( a<<16 | b<<8 | c )
#if defined WIN32 || defined _WIN32
#include <windows.h>
#elif defined __linux__ || defined __APPLE__
#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/sysctl.h>
#endif
int
get_number_of_cpus
(
void
)
{
#if defined WIN32 || defined _WIN32
SYSTEM_INFO
sysinfo
;
GetSystemInfo
(
&
sysinfo
);
return
(
int
)
sysinfo
.
dwNumberOfProcessors
;
#elif defined __linux__
return
(
int
)
sysconf
(
_SC_NPROCESSORS_ONLN
);
#elif defined __APPLE__
int
numCPU
=
0
;
int
mib
[
4
];
size_t
len
=
sizeof
(
numCPU
);
/* set the mib for hw.ncpu */
mib
[
0
]
=
CTL_HW
;
mib
[
1
]
=
HW_AVAILCPU
;
// alternatively, try HW_NCPU;
/* get the number of CPUs from the system */
sysctl
(
mib
,
2
,
&
numCPU
,
&
len
,
NULL
,
0
);
if
(
numCPU
<
1
)
{
mib
[
1
]
=
HW_NCPU
;
sysctl
(
mib
,
2
,
&
numCPU
,
&
len
,
NULL
,
0
);
if
(
numCPU
<
1
)
numCPU
=
1
;
}
return
(
int
)
numCPU
;
#else
return
1
;
#endif
}
char
*
FOURCC2str
(
int
fourcc
)
{
char
*
mystr
=
(
char
*
)
malloc
(
5
);
mystr
[
0
]
=
(
char
)((
fourcc
)
&
255
);
mystr
[
1
]
=
(
char
)((
fourcc
>>
8
)
&
255
);
mystr
[
2
]
=
(
char
)((
fourcc
>>
16
)
&
255
);
mystr
[
3
]
=
(
char
)((
fourcc
>>
24
)
&
255
);
mystr
[
4
]
=
0
;
return
mystr
;
}
// required to look up the correct codec ID depending on the FOURCC code,
// this is just a snipped from the file riff.c from ffmpeg/libavformat
typedef
struct
AVCodecTag
{
int
id
;
unsigned
int
tag
;
}
AVCodecTag
;
const
AVCodecTag
codec_bmp_tags
[]
=
{
{
CODEC_ID_H264
,
MKTAG
(
'H'
,
'2'
,
'6'
,
'4'
)
},
{
CODEC_ID_H264
,
MKTAG
(
'h'
,
'2'
,
'6'
,
'4'
)
},
{
CODEC_ID_H264
,
MKTAG
(
'X'
,
'2'
,
'6'
,
'4'
)
},
{
CODEC_ID_H264
,
MKTAG
(
'x'
,
'2'
,
'6'
,
'4'
)
},
{
CODEC_ID_H264
,
MKTAG
(
'a'
,
'v'
,
'c'
,
'1'
)
},
{
CODEC_ID_H264
,
MKTAG
(
'V'
,
'S'
,
'S'
,
'H'
)
},
{
CODEC_ID_H263
,
MKTAG
(
'H'
,
'2'
,
'6'
,
'3'
)
},
{
CODEC_ID_H263P
,
MKTAG
(
'H'
,
'2'
,
'6'
,
'3'
)
},
{
CODEC_ID_H263I
,
MKTAG
(
'I'
,
'2'
,
'6'
,
'3'
)
},
/* intel h263 */
{
CODEC_ID_H261
,
MKTAG
(
'H'
,
'2'
,
'6'
,
'1'
)
},
/* added based on MPlayer */
{
CODEC_ID_H263P
,
MKTAG
(
'U'
,
'2'
,
'6'
,
'3'
)
},
{
CODEC_ID_H263P
,
MKTAG
(
'v'
,
'i'
,
'v'
,
'1'
)
},
{
CODEC_ID_MPEG4
,
MKTAG
(
'F'
,
'M'
,
'P'
,
'4'
)
},
{
CODEC_ID_MPEG4
,
MKTAG
(
'D'
,
'I'
,
'V'
,
'X'
)
},
{
CODEC_ID_MPEG4
,
MKTAG
(
'D'
,
'X'
,
'5'
,
'0'
)
},
{
CODEC_ID_MPEG4
,
MKTAG
(
'X'
,
'V'
,
'I'
,
'D'
)
},
{
CODEC_ID_MPEG4
,
MKTAG
(
'M'
,
'P'
,
'4'
,
'S'
)
},
{
CODEC_ID_MPEG4
,
MKTAG
(
'M'
,
'4'
,
'S'
,
'2'
)
},
{
CODEC_ID_MPEG4
,
MKTAG
(
0x04
,
0
,
0
,
0
)
},
/* some broken avi use this */
/* added based on MPlayer */
{
CODEC_ID_MPEG4
,
MKTAG
(
'D'
,
'I'
,
'V'
,
'1'
)
},
{
CODEC_ID_MPEG4
,
MKTAG
(
'B'
,
'L'
,
'Z'
,
'0'
)
},
{
CODEC_ID_MPEG4
,
MKTAG
(
'm'
,
'p'
,
'4'
,
'v'
)
},
{
CODEC_ID_MPEG4
,
MKTAG
(
'U'
,
'M'
,
'P'
,
'4'
)
},
{
CODEC_ID_MPEG4
,
MKTAG
(
'W'
,
'V'
,
'1'
,
'F'
)
},
{
CODEC_ID_MPEG4
,
MKTAG
(
'S'
,
'E'
,
'D'
,
'G'
)
},
{
CODEC_ID_MPEG4
,
MKTAG
(
'R'
,
'M'
,
'P'
,
'4'
)
},
{
CODEC_ID_MSMPEG4V3
,
MKTAG
(
'D'
,
'I'
,
'V'
,
'3'
)
},
/* default signature when using MSMPEG4 */
{
CODEC_ID_MSMPEG4V3
,
MKTAG
(
'M'
,
'P'
,
'4'
,
'3'
)
},
/* added based on MPlayer */
{
CODEC_ID_MSMPEG4V3
,
MKTAG
(
'M'
,
'P'
,
'G'
,
'3'
)
},
{
CODEC_ID_MSMPEG4V3
,
MKTAG
(
'D'
,
'I'
,
'V'
,
'5'
)
},
{
CODEC_ID_MSMPEG4V3
,
MKTAG
(
'D'
,
'I'
,
'V'
,
'6'
)
},
{
CODEC_ID_MSMPEG4V3
,
MKTAG
(
'D'
,
'I'
,
'V'
,
'4'
)
},
{
CODEC_ID_MSMPEG4V3
,
MKTAG
(
'A'
,
'P'
,
'4'
,
'1'
)
},
{
CODEC_ID_MSMPEG4V3
,
MKTAG
(
'C'
,
'O'
,
'L'
,
'1'
)
},
{
CODEC_ID_MSMPEG4V3
,
MKTAG
(
'C'
,
'O'
,
'L'
,
'0'
)
},
{
CODEC_ID_MSMPEG4V2
,
MKTAG
(
'M'
,
'P'
,
'4'
,
'2'
)
},
/* added based on MPlayer */
{
CODEC_ID_MSMPEG4V2
,
MKTAG
(
'D'
,
'I'
,
'V'
,
'2'
)
},
{
CODEC_ID_MSMPEG4V1
,
MKTAG
(
'M'
,
'P'
,
'G'
,
'4'
)
},
{
CODEC_ID_WMV1
,
MKTAG
(
'W'
,
'M'
,
'V'
,
'1'
)
},
/* added based on MPlayer */
{
CODEC_ID_WMV2
,
MKTAG
(
'W'
,
'M'
,
'V'
,
'2'
)
},
{
CODEC_ID_DVVIDEO
,
MKTAG
(
'd'
,
'v'
,
's'
,
'd'
)
},
{
CODEC_ID_DVVIDEO
,
MKTAG
(
'd'
,
'v'
,
'h'
,
'd'
)
},
{
CODEC_ID_DVVIDEO
,
MKTAG
(
'd'
,
'v'
,
's'
,
'l'
)
},
{
CODEC_ID_DVVIDEO
,
MKTAG
(
'd'
,
'v'
,
'2'
,
'5'
)
},
{
CODEC_ID_MPEG1VIDEO
,
MKTAG
(
'm'
,
'p'
,
'g'
,
'1'
)
},
{
CODEC_ID_MPEG1VIDEO
,
MKTAG
(
'm'
,
'p'
,
'g'
,
'2'
)
},
{
CODEC_ID_MPEG2VIDEO
,
MKTAG
(
'm'
,
'p'
,
'g'
,
'2'
)
},
{
CODEC_ID_MPEG2VIDEO
,
MKTAG
(
'M'
,
'P'
,
'E'
,
'G'
)
},
{
CODEC_ID_MPEG1VIDEO
,
MKTAG
(
'P'
,
'I'
,
'M'
,
'1'
)
},
{
CODEC_ID_MPEG1VIDEO
,
MKTAG
(
'V'
,
'C'
,
'R'
,
'2'
)
},
{
CODEC_ID_MPEG1VIDEO
,
0x10000001
},
{
CODEC_ID_MPEG2VIDEO
,
0x10000002
},
{
CODEC_ID_MPEG2VIDEO
,
MKTAG
(
'D'
,
'V'
,
'R'
,
' '
)
},
{
CODEC_ID_MPEG2VIDEO
,
MKTAG
(
'M'
,
'M'
,
'E'
,
'S'
)
},
{
CODEC_ID_MJPEG
,
MKTAG
(
'M'
,
'J'
,
'P'
,
'G'
)
},
{
CODEC_ID_MJPEG
,
MKTAG
(
'L'
,
'J'
,
'P'
,
'G'
)
},
{
CODEC_ID_LJPEG
,
MKTAG
(
'L'
,
'J'
,
'P'
,
'G'
)
},
{
CODEC_ID_MJPEG
,
MKTAG
(
'J'
,
'P'
,
'G'
,
'L'
)
},
/* Pegasus lossless JPEG */
{
CODEC_ID_MJPEG
,
MKTAG
(
'M'
,
'J'
,
'L'
,
'S'
)
},
/* JPEG-LS custom FOURCC for avi - decoder */
{
CODEC_ID_MJPEG
,
MKTAG
(
'j'
,
'p'
,
'e'
,
'g'
)
},
{
CODEC_ID_MJPEG
,
MKTAG
(
'I'
,
'J'
,
'P'
,
'G'
)
},
{
CODEC_ID_MJPEG
,
MKTAG
(
'A'
,
'V'
,
'R'
,
'n'
)
},
{
CODEC_ID_HUFFYUV
,
MKTAG
(
'H'
,
'F'
,
'Y'
,
'U'
)
},
{
CODEC_ID_FFVHUFF
,
MKTAG
(
'F'
,
'F'
,
'V'
,
'H'
)
},
{
CODEC_ID_CYUV
,
MKTAG
(
'C'
,
'Y'
,
'U'
,
'V'
)
},
{
CODEC_ID_RAWVIDEO
,
0
},
{
CODEC_ID_RAWVIDEO
,
MKTAG
(
'I'
,
'4'
,
'2'
,
'0'
)
},
{
CODEC_ID_RAWVIDEO
,
MKTAG
(
'Y'
,
'U'
,
'Y'
,
'2'
)
},
{
CODEC_ID_RAWVIDEO
,
MKTAG
(
'Y'
,
'4'
,
'2'
,
'2'
)
},
{
CODEC_ID_RAWVIDEO
,
MKTAG
(
'Y'
,
'V'
,
'1'
,
'2'
)
},
{
CODEC_ID_RAWVIDEO
,
MKTAG
(
'U'
,
'Y'
,
'V'
,
'Y'
)
},
{
CODEC_ID_RAWVIDEO
,
MKTAG
(
'I'
,
'Y'
,
'U'
,
'V'
)
},
{
CODEC_ID_RAWVIDEO
,
MKTAG
(
'Y'
,
'8'
,
'0'
,
'0'
)
},
{
CODEC_ID_RAWVIDEO
,
MKTAG
(
'H'
,
'D'
,
'Y'
,
'C'
)
},
{
CODEC_ID_INDEO3
,
MKTAG
(
'I'
,
'V'
,
'3'
,
'1'
)
},
{
CODEC_ID_INDEO3
,
MKTAG
(
'I'
,
'V'
,
'3'
,
'2'
)
},
{
CODEC_ID_VP3
,
MKTAG
(
'V'
,
'P'
,
'3'
,
'1'
)
},
{
CODEC_ID_VP3
,
MKTAG
(
'V'
,
'P'
,
'3'
,
'0'
)
},
{
CODEC_ID_ASV1
,
MKTAG
(
'A'
,
'S'
,
'V'
,
'1'
)
},
{
CODEC_ID_ASV2
,
MKTAG
(
'A'
,
'S'
,
'V'
,
'2'
)
},
{
CODEC_ID_VCR1
,
MKTAG
(
'V'
,
'C'
,
'R'
,
'1'
)
},
{
CODEC_ID_FFV1
,
MKTAG
(
'F'
,
'F'
,
'V'
,
'1'
)
},
{
CODEC_ID_XAN_WC4
,
MKTAG
(
'X'
,
'x'
,
'a'
,
'n'
)
},
{
CODEC_ID_MSRLE
,
MKTAG
(
'm'
,
'r'
,
'l'
,
'e'
)
},
{
CODEC_ID_MSRLE
,
MKTAG
(
0x1
,
0x0
,
0x0
,
0x0
)
},
{
CODEC_ID_MSVIDEO1
,
MKTAG
(
'M'
,
'S'
,
'V'
,
'C'
)
},
{
CODEC_ID_MSVIDEO1
,
MKTAG
(
'm'
,
's'
,
'v'
,
'c'
)
},
{
CODEC_ID_MSVIDEO1
,
MKTAG
(
'C'
,
'R'
,
'A'
,
'M'
)
},
{
CODEC_ID_MSVIDEO1
,
MKTAG
(
'c'
,
'r'
,
'a'
,
'm'
)
},
{
CODEC_ID_MSVIDEO1
,
MKTAG
(
'W'
,
'H'
,
'A'
,
'M'
)
},
{
CODEC_ID_MSVIDEO1
,
MKTAG
(
'w'
,
'h'
,
'a'
,
'm'
)
},
{
CODEC_ID_CINEPAK
,
MKTAG
(
'c'
,
'v'
,
'i'
,
'd'
)
},
{
CODEC_ID_TRUEMOTION1
,
MKTAG
(
'D'
,
'U'
,
'C'
,
'K'
)
},
{
CODEC_ID_MSZH
,
MKTAG
(
'M'
,
'S'
,
'Z'
,
'H'
)
},
{
CODEC_ID_ZLIB
,
MKTAG
(
'Z'
,
'L'
,
'I'
,
'B'
)
},
{
CODEC_ID_SNOW
,
MKTAG
(
'S'
,
'N'
,
'O'
,
'W'
)
},
{
CODEC_ID_4XM
,
MKTAG
(
'4'
,
'X'
,
'M'
,
'V'
)
},
{
CODEC_ID_FLV1
,
MKTAG
(
'F'
,
'L'
,
'V'
,
'1'
)
},
{
CODEC_ID_SVQ1
,
MKTAG
(
's'
,
'v'
,
'q'
,
'1'
)
},
{
CODEC_ID_TSCC
,
MKTAG
(
't'
,
's'
,
'c'
,
'c'
)
},
{
CODEC_ID_ULTI
,
MKTAG
(
'U'
,
'L'
,
'T'
,
'I'
)
},
{
CODEC_ID_VIXL
,
MKTAG
(
'V'
,
'I'
,
'X'
,
'L'
)
},
{
CODEC_ID_QPEG
,
MKTAG
(
'Q'
,
'P'
,
'E'
,
'G'
)
},
{
CODEC_ID_QPEG
,
MKTAG
(
'Q'
,
'1'
,
'.'
,
'0'
)
},
{
CODEC_ID_QPEG
,
MKTAG
(
'Q'
,
'1'
,
'.'
,
'1'
)
},
{
CODEC_ID_WMV3
,
MKTAG
(
'W'
,
'M'
,
'V'
,
'3'
)
},
{
CODEC_ID_LOCO
,
MKTAG
(
'L'
,
'O'
,
'C'
,
'O'
)
},
{
CODEC_ID_THEORA
,
MKTAG
(
't'
,
'h'
,
'e'
,
'o'
)
},
#if LIBAVCODEC_VERSION_INT>0x000409
{
CODEC_ID_WNV1
,
MKTAG
(
'W'
,
'N'
,
'V'
,
'1'
)
},
{
CODEC_ID_AASC
,
MKTAG
(
'A'
,
'A'
,
'S'
,
'C'
)
},
{
CODEC_ID_INDEO2
,
MKTAG
(
'R'
,
'T'
,
'2'
,
'1'
)
},
{
CODEC_ID_FRAPS
,
MKTAG
(
'F'
,
'P'
,
'S'
,
'1'
)
},
{
CODEC_ID_TRUEMOTION2
,
MKTAG
(
'T'
,
'M'
,
'2'
,
'0'
)
},
#endif
#if LIBAVCODEC_VERSION_INT>((50<<16)+(1<<8)+0)
{
CODEC_ID_FLASHSV
,
MKTAG
(
'F'
,
'S'
,
'V'
,
'1'
)
},
{
CODEC_ID_JPEGLS
,
MKTAG
(
'M'
,
'J'
,
'L'
,
'S'
)
},
/* JPEG-LS custom FOURCC for avi - encoder */
{
CODEC_ID_VC1
,
MKTAG
(
'W'
,
'V'
,
'C'
,
'1'
)
},
{
CODEC_ID_VC1
,
MKTAG
(
'W'
,
'M'
,
'V'
,
'A'
)
},
{
CODEC_ID_CSCD
,
MKTAG
(
'C'
,
'S'
,
'C'
,
'D'
)
},
{
CODEC_ID_ZMBV
,
MKTAG
(
'Z'
,
'M'
,
'B'
,
'V'
)
},
{
CODEC_ID_KMVC
,
MKTAG
(
'K'
,
'M'
,
'V'
,
'C'
)
},
#endif
#if LIBAVCODEC_VERSION_INT>((51<<16)+(11<<8)+0)
{
CODEC_ID_VP5
,
MKTAG
(
'V'
,
'P'
,
'5'
,
'0'
)
},
{
CODEC_ID_VP6
,
MKTAG
(
'V'
,
'P'
,
'6'
,
'0'
)
},
{
CODEC_ID_VP6
,
MKTAG
(
'V'
,
'P'
,
'6'
,
'1'
)
},
{
CODEC_ID_VP6
,
MKTAG
(
'V'
,
'P'
,
'6'
,
'2'
)
},
{
CODEC_ID_VP6F
,
MKTAG
(
'V'
,
'P'
,
'6'
,
'F'
)
},
{
CODEC_ID_JPEG2000
,
MKTAG
(
'M'
,
'J'
,
'2'
,
'C'
)
},
{
CODEC_ID_VMNC
,
MKTAG
(
'V'
,
'M'
,
'n'
,
'c'
)
},
#endif
#if LIBAVCODEC_VERSION_INT>=((51<<16)+(49<<8)+0)
// this tag seems not to exist in older versions of FFMPEG
{
CODEC_ID_TARGA
,
MKTAG
(
't'
,
'g'
,
'a'
,
' '
)
},
#endif
{
CODEC_ID_NONE
,
0
},
};
struct
Image_FFMPEG
{
unsigned
char
*
data
;
...
...
@@ -132,7 +375,9 @@ width(0), height(0), frame_number(0), eps_zero(0.000025)
{
av_register_all
();
avformat_network_init
();
#if LIBAVFORMAT_BUILD >= CALC_FFMPEG_VERSION(53, 13, 0)
avformat_network_init
();
#endif
// Open video file
avformat_open_input
(
&
ic
,
filename
,
NULL
,
NULL
);
...
...
@@ -591,7 +836,11 @@ void CvCapture_FFMPEG_2::seek(double sec)
CvCapture_FFMPEG_2
::~
CvCapture_FFMPEG_2
()
{
avformat_close_input
(
&
ic
);
#if LIBAVFORMAT_BUILD < CALC_FFMPEG_VERSION(53, 24, 2)
av_close_input_file
(
ic
);
#else
avformat_close_input
(
&
ic
);
#endif
}
bool
CvCapture_FFMPEG_2
::
setProperty
(
int
property_id
,
double
value
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录