Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Opencv
提交
c314178e
O
Opencv
项目概览
Greenplum
/
Opencv
大约 1 年 前同步成功
通知
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,发现更多精彩内容 >>
提交
c314178e
编写于
9月 19, 2016
作者:
A
Alexander Alekhin
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
highgui/osx: backport AVFoundation support
上级
3648c611
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
61 addition
and
23 deletion
+61
-23
CMakeLists.txt
CMakeLists.txt
+11
-9
cmake/OpenCVFindLibsVideo.cmake
cmake/OpenCVFindLibsVideo.cmake
+11
-12
modules/highgui/CMakeLists.txt
modules/highgui/CMakeLists.txt
+7
-2
modules/highgui/src/cap_avfoundation_mac.mm
modules/highgui/src/cap_avfoundation_mac.mm
+32
-0
未找到文件。
CMakeLists.txt
浏览文件 @
c314178e
...
...
@@ -137,7 +137,7 @@ endif()
# Optional 3rd party components
# ===================================================
OCV_OPTION
(
WITH_1394
"Include IEEE1394 support"
ON
IF
(
NOT ANDROID AND NOT IOS
)
)
OCV_OPTION
(
WITH_AVFOUNDATION
"Use AVFoundation for Video I/O
"
ON IF IOS
)
OCV_OPTION
(
WITH_AVFOUNDATION
"Use AVFoundation for Video I/O
(iOS/Mac)"
ON IF APPLE
)
OCV_OPTION
(
WITH_CARBON
"Use Carbon for UI instead of Cocoa"
OFF IF APPLE
)
OCV_OPTION
(
WITH_CUDA
"Include NVidia Cuda Runtime support"
ON
IF
(
CMAKE_VERSION VERSION_GREATER
"2.8"
AND NOT IOS
)
)
OCV_OPTION
(
WITH_VTK
"Include VTK library support (and build opencv_viz module eiher)"
OFF
IF
(
NOT ANDROID AND NOT IOS AND NOT CMAKE_CROSSCOMPILING
)
)
...
...
@@ -162,7 +162,8 @@ OCV_OPTION(WITH_PVAPI "Include Prosilica GigE support" ON
OCV_OPTION
(
WITH_GIGEAPI
"Include Smartek GigE support"
ON
IF
(
NOT ANDROID AND NOT IOS
)
)
OCV_OPTION
(
WITH_QT
"Build with Qt Backend support"
OFF
IF
(
NOT ANDROID AND NOT IOS
)
)
OCV_OPTION
(
WITH_WIN32UI
"Build with Win32 UI Backend support"
ON IF WIN32
)
OCV_OPTION
(
WITH_QUICKTIME
"Use QuickTime for Video I/O insted of QTKit"
OFF IF APPLE
)
OCV_OPTION
(
WITH_QUICKTIME
"Use QuickTime for Video I/O"
OFF IF APPLE
)
OCV_OPTION
(
WITH_QTKIT
"Use QTKit Video I/O backend"
OFF IF APPLE
)
OCV_OPTION
(
WITH_TBB
"Include Intel TBB support"
OFF
IF
(
NOT IOS
)
)
OCV_OPTION
(
WITH_OPENMP
"Include OpenMP support"
OFF
)
OCV_OPTION
(
WITH_CSTRIPES
"Include C= support"
OFF IF WIN32
)
...
...
@@ -879,10 +880,6 @@ if(ANDROID)
endif
()
endif
()
if
(
DEFINED WITH_AVFOUNDATION
)
status
(
" AVFoundation:"
WITH_AVFOUNDATION THEN YES ELSE NO
)
endif
(
DEFINED WITH_AVFOUNDATION
)
if
(
DEFINED WITH_FFMPEG
)
if
(
WIN32
)
status
(
" FFMPEG:"
WITH_FFMPEG THEN
"YES (prebuilt binaries)"
ELSE NO
)
...
...
@@ -923,10 +920,15 @@ if(DEFINED WITH_GIGEAPI)
status
(
" GigEVisionSDK:"
HAVE_GIGE_API THEN YES ELSE NO
)
endif
(
DEFINED WITH_GIGEAPI
)
if
(
DEFINED WITH_QUICKTIME
)
if
(
DEFINED APPLE
)
status
(
" AVFoundation:"
HAVE_AVFOUNDATION THEN YES ELSE NO
)
if
(
WITH_QUICKTIME OR HAVE_QUICKTIME
)
status
(
" QuickTime:"
HAVE_QUICKTIME THEN YES ELSE NO
)
status
(
" QTKit:"
HAVE_QTKIT THEN YES ELSE NO
)
endif
(
DEFINED WITH_QUICKTIME
)
endif
()
if
(
WITH_QTKIT OR HAVE_QTKIT
)
status
(
" QTKit:"
HAVE_QTKIT THEN
"YES (deprecated)"
ELSE NO
)
endif
()
endif
(
DEFINED APPLE
)
if
(
DEFINED WITH_UNICAP
)
status
(
" UniCap:"
HAVE_UNICAP THEN
"YES (ver
${
ALIASOF_libunicap_VERSION
}
)"
ELSE NO
)
...
...
cmake/OpenCVFindLibsVideo.cmake
浏览文件 @
c314178e
...
...
@@ -273,19 +273,18 @@ if(WIN32)
endif
()
endif
(
WIN32
)
# --- Apple AV Foundation ---
if
(
WITH_AVFOUNDATION
)
set
(
HAVE_AVFOUNDATION YES
)
endif
()
# --- QuickTime ---
if
(
NOT IOS
)
if
(
WITH_QUICKTIME
)
set
(
HAVE_QUICKTIME YES
)
elseif
(
APPLE
)
set
(
HAVE_QTKIT YES
)
if
(
APPLE
)
if
(
WITH_AVFOUNDATION
)
set
(
HAVE_AVFOUNDATION YES
)
endif
()
endif
()
if
(
NOT IOS
)
if
(
WITH_QUICKTIME
)
set
(
HAVE_QUICKTIME YES
)
elseif
(
WITH_QTKIT
)
set
(
HAVE_QTKIT YES
)
endif
()
endif
()
endif
(
APPLE
)
# --- Intel Perceptual Computing SDK ---
if
(
WITH_INTELPERC
)
...
...
modules/highgui/CMakeLists.txt
浏览文件 @
c314178e
...
...
@@ -215,8 +215,13 @@ if(HAVE_IMAGEIO AND IOS)
endif
()
if
(
HAVE_AVFOUNDATION
)
list
(
APPEND highgui_srcs src/cap_avfoundation.mm
)
list
(
APPEND HIGHGUI_LIBRARIES
"-framework AVFoundation"
"-framework QuartzCore"
)
if
(
IOS
)
list
(
APPEND highgui_srcs
${
CMAKE_CURRENT_LIST_DIR
}
/src/cap_avfoundation.mm
)
list
(
APPEND HIGHGUI_LIBRARIES
"-framework AVFoundation"
"-framework QuartzCore"
)
else
()
list
(
APPEND highgui_srcs
${
CMAKE_CURRENT_LIST_DIR
}
/src/cap_avfoundation_mac.mm
)
list
(
APPEND HIGHGUI_LIBRARIES
"-framework Cocoa"
"-framework Accelerate"
"-framework AVFoundation"
"-framework CoreGraphics"
"-framework CoreImage"
"-framework CoreMedia"
"-framework CoreVideo"
"-framework QuartzCore"
)
endif
()
endif
()
if
(
HAVE_QUICKTIME
)
...
...
modules/highgui/src/cap_avfoundation_mac.mm
浏览文件 @
c314178e
...
...
@@ -155,7 +155,9 @@ private:
uint8_t
*
mOutImagedata
;
IplImage
*
mOutImage
;
size_t
currSize
;
/*
int mMode;
*/
int
mFormat
;
bool
setupReadingAt
(
CMTime
position
);
...
...
@@ -677,7 +679,9 @@ CvCaptureFile::CvCaptureFile(const char* filename) {
mOutImage
=
NULL
;
mOutImagedata
=
NULL
;
currSize
=
0
;
/*
mMode = CV_CAP_MODE_BGR;
*/
mFormat
=
CV_8UC3
;
mCurrentSampleBuffer
=
NULL
;
mGrabbedPixels
=
NULL
;
...
...
@@ -741,12 +745,15 @@ bool CvCaptureFile::setupReadingAt(CMTime position) {
// Capture in a pixel format that can be converted efficiently to the output mode.
OSType
pixelFormat
;
/*
if (mMode == CV_CAP_MODE_BGR || mMode == CV_CAP_MODE_RGB) {
*/
// For CV_CAP_MODE_BGR, read frames as BGRA (AV Foundation's YUV->RGB conversion is slightly faster than OpenCV's CV_YUV2BGR_YV12)
// kCVPixelFormatType_32ABGR is reportedly faster on OS X, but OpenCV doesn't have a CV_ABGR2BGR conversion.
// kCVPixelFormatType_24RGB is significanly slower than kCVPixelFormatType_32BGRA.
pixelFormat
=
kCVPixelFormatType_32BGRA
;
mFormat
=
CV_8UC3
;
/*
} else if (mMode == CV_CAP_MODE_GRAY) {
// For CV_CAP_MODE_GRAY, read frames as 420v (faster than 420f or 422 -- at least for H.264 files)
pixelFormat = kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange;
...
...
@@ -759,6 +766,7 @@ bool CvCaptureFile::setupReadingAt(CMTime position) {
fprintf(stderr, "VIDEOIO ERROR: AVF Mac: Unsupported mode: %d\n", mMode);
return false;
}
*/
NSDictionary
*
settings
=
@{
...
...
@@ -848,8 +856,11 @@ IplImage* CvCaptureFile::retrieveFramePixelBuffer() {
// Output image paramaters.
int
outChannels
;
/*
if (mMode == CV_CAP_MODE_BGR || mMode == CV_CAP_MODE_RGB) {
*/
outChannels
=
3
;
/*
} else if (mMode == CV_CAP_MODE_GRAY) {
outChannels = 1;
} else if (mMode == CV_CAP_MODE_YUYV) {
...
...
@@ -861,6 +872,7 @@ IplImage* CvCaptureFile::retrieveFramePixelBuffer() {
mGrabbedPixels = NULL;
return 0;
}
*/
if
(
currSize
!=
width
*
outChannels
*
height
)
{
currSize
=
width
*
outChannels
*
height
;
...
...
@@ -888,8 +900,11 @@ IplImage* CvCaptureFile::retrieveFramePixelBuffer() {
if
(
pixelFormat
==
kCVPixelFormatType_32BGRA
)
{
deviceChannels
=
4
;
/*
if (mMode == CV_CAP_MODE_BGR) {
*/
cvtCode
=
CV_BGRA2BGR
;
/*
} else if (mMode == CV_CAP_MODE_RGB) {
cvtCode = CV_BGRA2RGB;
} else if (mMode == CV_CAP_MODE_GRAY) {
...
...
@@ -901,11 +916,15 @@ IplImage* CvCaptureFile::retrieveFramePixelBuffer() {
fprintf(stderr, "OpenCV: unsupported pixel conversion mode\n");
return 0;
}
*/
}
else
if
(
pixelFormat
==
kCVPixelFormatType_24RGB
)
{
deviceChannels
=
3
;
/*
if (mMode == CV_CAP_MODE_BGR) {
*/
cvtCode
=
CV_RGB2BGR
;
/*
} else if (mMode == CV_CAP_MODE_RGB) {
cvtCode = 0;
} else if (mMode == CV_CAP_MODE_GRAY) {
...
...
@@ -917,11 +936,15 @@ IplImage* CvCaptureFile::retrieveFramePixelBuffer() {
fprintf(stderr, "OpenCV: unsupported pixel conversion mode\n");
return 0;
}
*/
}
else
if
(
pixelFormat
==
kCVPixelFormatType_422YpCbCr8
)
{
// 422 (2vuy, UYVY)
deviceChannels
=
2
;
/*
if (mMode == CV_CAP_MODE_BGR) {
*/
cvtCode
=
CV_YUV2BGR_UYVY
;
/*
} else if (mMode == CV_CAP_MODE_RGB) {
cvtCode = CV_YUV2RGB_UYVY;
} else if (mMode == CV_CAP_MODE_GRAY) {
...
...
@@ -935,6 +958,7 @@ IplImage* CvCaptureFile::retrieveFramePixelBuffer() {
fprintf(stderr, "OpenCV: unsupported pixel conversion mode\n");
return 0;
}
*/
}
else
if
(
pixelFormat
==
kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange
||
// 420v
pixelFormat
==
kCVPixelFormatType_420YpCbCr8BiPlanarFullRange
)
{
// 420f
// cvCvtColor(CV_YUV2GRAY_420) is expecting a single buffer with both the Y plane and the CrCb planes.
...
...
@@ -942,8 +966,11 @@ IplImage* CvCaptureFile::retrieveFramePixelBuffer() {
height
=
height
*
3
/
2
;
deviceChannels
=
1
;
/*
if (mMode == CV_CAP_MODE_BGR) {
*/
cvtCode
=
CV_YUV2BGR_YV12
;
/*
} else if (mMode == CV_CAP_MODE_RGB) {
cvtCode = CV_YUV2RGB_YV12;
} else if (mMode == CV_CAP_MODE_GRAY) {
...
...
@@ -955,6 +982,7 @@ IplImage* CvCaptureFile::retrieveFramePixelBuffer() {
fprintf(stderr, "OpenCV: unsupported pixel conversion mode\n");
return 0;
}
*/
}
else
{
fprintf
(
stderr
,
"OpenCV: unsupported pixel format 0x%08X
\n
"
,
pixelFormat
);
CVPixelBufferUnlockBaseAddress
(
mGrabbedPixels
,
0
);
...
...
@@ -1020,8 +1048,10 @@ double CvCaptureFile::getProperty(int property_id) const{
return
round
((
t
.
value
*
mAssetTrack
.
nominalFrameRate
)
/
double
(
t
.
timescale
));
case
CV_CAP_PROP_FORMAT
:
return
mFormat
;
/*
case CV_CAP_PROP_MODE:
return mMode;
*/
default:
break
;
}
...
...
@@ -1054,6 +1084,7 @@ bool CvCaptureFile::setProperty(int property_id, double value) {
setupReadingAt
(
t
);
retval
=
true
;
break
;
/*
case CV_CAP_PROP_MODE:
int mode;
mode = cvRound(value);
...
...
@@ -1076,6 +1107,7 @@ bool CvCaptureFile::setProperty(int property_id, double value) {
}
}
break;
*/
default:
break
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录