Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
O
opencv
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
opencv
Commits
cd9e4370
Commit
cd9e4370
authored
6 years ago
by
Alexander Alekhin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
videoio: backends priority list
parent
06c18906
No related merge requests found
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
212 additions
and
9 deletions
+212
-9
CMakeLists.txt
modules/videoio/CMakeLists.txt
+2
-0
cap.cpp
modules/videoio/src/cap.cpp
+0
-0
cap_mjpeg_encoder.cpp
modules/videoio/src/cap_mjpeg_encoder.cpp
+4
-1
precomp.hpp
modules/videoio/src/precomp.hpp
+5
-2
videoio_c.cpp
modules/videoio/src/videoio_c.cpp
+152
-0
videoio_registry.cpp
modules/videoio/src/videoio_registry.cpp
+0
-0
videoio_registry.hpp
modules/videoio/src/videoio_registry.hpp
+43
-0
test_ffmpeg.cpp
modules/videoio/test/test_ffmpeg.cpp
+6
-6
No files found.
modules/videoio/CMakeLists.txt
View file @
cd9e4370
...
...
@@ -20,6 +20,8 @@ set(videoio_hdrs
${
CMAKE_CURRENT_LIST_DIR
}
/src/precomp.hpp
)
set
(
videoio_srcs
${
CMAKE_CURRENT_LIST_DIR
}
/src/videoio_registry.cpp
${
CMAKE_CURRENT_LIST_DIR
}
/src/videoio_c.cpp
${
CMAKE_CURRENT_LIST_DIR
}
/src/cap.cpp
${
CMAKE_CURRENT_LIST_DIR
}
/src/cap_images.cpp
${
CMAKE_CURRENT_LIST_DIR
}
/src/cap_mjpeg_encoder.cpp
...
...
This diff is collapsed.
Click to expand it.
modules/videoio/src/cap.cpp
View file @
cd9e4370
This diff is collapsed.
Click to expand it.
modules/videoio/src/cap_mjpeg_encoder.cpp
View file @
cd9e4370
...
...
@@ -1530,8 +1530,11 @@ void MotionJpegWriter::writeFrameData( const uchar* data, int step, int colorspa
}
Ptr
<
IVideoWriter
>
createMotionJpegWriter
(
const
String
&
filename
,
double
fps
,
Size
frameSize
,
bool
iscolor
)
Ptr
<
IVideoWriter
>
createMotionJpegWriter
(
const
String
&
filename
,
int
fourcc
,
double
fps
,
Size
frameSize
,
bool
iscolor
)
{
if
(
fourcc
!=
CV_FOURCC
(
'M'
,
'J'
,
'P'
,
'G'
))
return
Ptr
<
IVideoWriter
>
();
Ptr
<
IVideoWriter
>
iwriter
=
makePtr
<
mjpeg
::
MotionJpegWriter
>
(
filename
,
fps
,
frameSize
,
iscolor
);
if
(
!
iwriter
->
isOpened
()
)
iwriter
.
release
();
...
...
This diff is collapsed.
Click to expand it.
modules/videoio/src/precomp.hpp
View file @
cd9e4370
...
...
@@ -47,6 +47,9 @@
#include "opencv2/core/utility.hpp"
#include "opencv2/core/private.hpp"
#include <opencv2/core/utils/configuration.private.hpp>
#include <opencv2/core/utils/logger.hpp>
#include "opencv2/imgcodecs.hpp"
#include "opencv2/imgproc.hpp"
...
...
@@ -59,7 +62,7 @@
#include <string.h>
#include <limits.h>
#include <ctype.h>
#include <assert.h>
#include <assert.h>
// FIXIT remove this
#if defined _WIN32 || defined WINCE
#if !defined _WIN32_WINNT
...
...
@@ -178,7 +181,7 @@ namespace cv
};
Ptr
<
IVideoCapture
>
createMotionJpegCapture
(
const
String
&
filename
);
Ptr
<
IVideoWriter
>
createMotionJpegWriter
(
const
String
&
filename
,
double
fps
,
Size
frameSize
,
bool
iscolor
);
Ptr
<
IVideoWriter
>
createMotionJpegWriter
(
const
String
&
filename
,
int
fourcc
,
double
fps
,
Size
frameSize
,
bool
iscolor
);
Ptr
<
IVideoCapture
>
createGPhoto2Capture
(
int
index
);
Ptr
<
IVideoCapture
>
createGPhoto2Capture
(
const
String
&
deviceName
);
...
...
This diff is collapsed.
Click to expand it.
modules/videoio/src/videoio_c.cpp
0 → 100644
View file @
cd9e4370
// This file is part of OpenCV project.
// It is subject to the license terms in the LICENSE file found in the top-level directory
// of this distribution and at http://opencv.org/license.html.
#include "precomp.hpp"
#include "videoio_registry.hpp"
using
namespace
cv
;
// Legacy C-like API
CV_IMPL
CvCapture
*
cvCreateCameraCapture
(
int
index
)
{
// interpret preferred interface (0 = autodetect)
int
apiPreference
=
(
index
/
100
)
*
100
;
if
(
apiPreference
)
{
index
%=
100
;
}
const
std
::
vector
<
VideoBackendInfo
>
backends
=
cv
::
videoio_registry
::
getAvailableBackends_CaptureByIndex
();
for
(
size_t
i
=
0
;
i
<
backends
.
size
();
i
++
)
{
const
VideoBackendInfo
&
info
=
backends
[
i
];
if
(
apiPreference
==
CAP_ANY
||
apiPreference
==
info
.
id
)
{
CvCapture
*
capture
=
NULL
;
Ptr
<
IVideoCapture
>
icap
;
// unused
VideoCapture_create
(
capture
,
icap
,
info
.
id
,
index
);
if
(
capture
)
{
return
capture
;
}
if
(
!
icap
.
empty
())
{
CV_LOG_WARNING
(
NULL
,
"cvCreateFileCaptureWithPreference: backend "
<<
info
.
name
<<
" doesn't support legacy API anymore."
)
}
}
}
return
NULL
;
}
CV_IMPL
CvCapture
*
cvCreateFileCaptureWithPreference
(
const
char
*
filename
,
int
apiPreference
)
{
const
std
::
vector
<
VideoBackendInfo
>
backends
=
cv
::
videoio_registry
::
getAvailableBackends_CaptureByFilename
();
for
(
size_t
i
=
0
;
i
<
backends
.
size
();
i
++
)
{
const
VideoBackendInfo
&
info
=
backends
[
i
];
if
(
apiPreference
==
CAP_ANY
||
apiPreference
==
info
.
id
)
{
CvCapture
*
capture
=
NULL
;
Ptr
<
IVideoCapture
>
icap
;
// unused
VideoCapture_create
(
capture
,
icap
,
info
.
id
,
filename
);
if
(
capture
)
{
return
capture
;
}
if
(
!
icap
.
empty
())
{
CV_LOG_WARNING
(
NULL
,
"cvCreateFileCaptureWithPreference: backend "
<<
info
.
name
<<
" doesn't support legacy API anymore."
)
}
}
}
return
NULL
;
}
CV_IMPL
CvCapture
*
cvCreateFileCapture
(
const
char
*
filename
)
{
return
cvCreateFileCaptureWithPreference
(
filename
,
CAP_ANY
);
}
CV_IMPL
CvVideoWriter
*
cvCreateVideoWriter
(
const
char
*
filename
,
int
fourcc
,
double
fps
,
CvSize
frameSize
,
int
is_color
)
{
const
std
::
vector
<
VideoBackendInfo
>
backends
=
cv
::
videoio_registry
::
getAvailableBackends_Writer
();
for
(
size_t
i
=
0
;
i
<
backends
.
size
();
i
++
)
{
const
VideoBackendInfo
&
info
=
backends
[
i
];
{
CvVideoWriter
*
writer_
=
NULL
;
Ptr
<
IVideoWriter
>
iwriter
;
// unused
VideoWriter_create
(
writer_
,
iwriter
,
info
.
id
,
filename
,
fourcc
,
fps
,
frameSize
,
is_color
!=
0
);
if
(
writer_
)
{
return
writer_
;
}
if
(
!
iwriter
.
empty
())
{
CV_LOG_WARNING
(
NULL
,
"cvCreateVideoWriter: backend "
<<
info
.
name
<<
" doesn't support legacy API anymore."
)
}
}
}
return
NULL
;
}
CV_IMPL
int
cvWriteFrame
(
CvVideoWriter
*
writer
,
const
IplImage
*
image
)
{
return
writer
?
writer
->
writeFrame
(
image
)
:
0
;
}
CV_IMPL
void
cvReleaseVideoWriter
(
CvVideoWriter
**
pwriter
)
{
if
(
pwriter
&&
*
pwriter
)
{
delete
*
pwriter
;
*
pwriter
=
0
;
}
}
CV_IMPL
void
cvReleaseCapture
(
CvCapture
**
pcapture
)
{
if
(
pcapture
&&
*
pcapture
)
{
delete
*
pcapture
;
*
pcapture
=
0
;
}
}
CV_IMPL
IplImage
*
cvQueryFrame
(
CvCapture
*
capture
)
{
if
(
!
capture
)
return
0
;
if
(
!
capture
->
grabFrame
())
return
0
;
return
capture
->
retrieveFrame
(
0
);
}
CV_IMPL
int
cvGrabFrame
(
CvCapture
*
capture
)
{
return
capture
?
capture
->
grabFrame
()
:
0
;
}
CV_IMPL
IplImage
*
cvRetrieveFrame
(
CvCapture
*
capture
,
int
idx
)
{
return
capture
?
capture
->
retrieveFrame
(
idx
)
:
0
;
}
CV_IMPL
double
cvGetCaptureProperty
(
CvCapture
*
capture
,
int
id
)
{
return
capture
?
capture
->
getProperty
(
id
)
:
0
;
}
CV_IMPL
int
cvSetCaptureProperty
(
CvCapture
*
capture
,
int
id
,
double
value
)
{
return
capture
?
capture
->
setProperty
(
id
,
value
)
:
0
;
}
CV_IMPL
int
cvGetCaptureDomain
(
CvCapture
*
capture
)
{
return
capture
?
capture
->
getCaptureDomain
()
:
0
;
}
This diff is collapsed.
Click to expand it.
modules/videoio/src/videoio_registry.cpp
0 → 100644
View file @
cd9e4370
This diff is collapsed.
Click to expand it.
modules/videoio/src/videoio_registry.hpp
0 → 100644
View file @
cd9e4370
// This file is part of OpenCV project.
// It is subject to the license terms in the LICENSE file found in the top-level directory
// of this distribution and at http://opencv.org/license.html.
#ifndef __OPENCV_VIDEOIO_VIDEOIO_REGISTRY_HPP__
#define __OPENCV_VIDEOIO_VIDEOIO_REGISTRY_HPP__
namespace
cv
{
/** Capabilities bitmask */
enum
BackendMode
{
MODE_CAPTURE_BY_INDEX
=
1
<<
0
,
//!< device index
MODE_CAPTURE_BY_FILENAME
=
1
<<
1
,
//!< filename or device path (v4l2)
MODE_WRITER
=
1
<<
4
,
//!< writer
MODE_CAPTURE_ALL
=
MODE_CAPTURE_BY_INDEX
+
MODE_CAPTURE_BY_FILENAME
,
};
struct
VideoBackendInfo
{
VideoCaptureAPIs
id
;
BackendMode
mode
;
int
priority
;
// 1000-<index*10> - default builtin priority
// 0 - disabled (OPENCV_VIDEOIO_PRIORITY_<name> = 0)
// >10000 - prioritized list (OPENCV_VIDEOIO_PRIORITY_LIST)
const
char
*
name
;
};
namespace
videoio_registry
{
std
::
vector
<
VideoBackendInfo
>
getAvailableBackends_CaptureByIndex
();
std
::
vector
<
VideoBackendInfo
>
getAvailableBackends_CaptureByFilename
();
std
::
vector
<
VideoBackendInfo
>
getAvailableBackends_Writer
();
}
// namespace
void
VideoCapture_create
(
CvCapture
*&
capture
,
Ptr
<
IVideoCapture
>&
icap
,
VideoCaptureAPIs
api
,
int
index
);
void
VideoCapture_create
(
CvCapture
*&
capture
,
Ptr
<
IVideoCapture
>&
icap
,
VideoCaptureAPIs
api
,
const
cv
::
String
&
filename
);
void
VideoWriter_create
(
CvVideoWriter
*&
writer
,
Ptr
<
IVideoWriter
>&
iwriter
,
VideoCaptureAPIs
api
,
const
String
&
filename
,
int
fourcc
,
double
fps
,
const
Size
&
frameSize
,
bool
isColor
);
}
// namespace
#endif // __OPENCV_VIDEOIO_VIDEOIO_REGISTRY_HPP__
This diff is collapsed.
Click to expand it.
modules/videoio/test/test_ffmpeg.cpp
View file @
cd9e4370
...
...
@@ -228,7 +228,7 @@ public:
static
std
::
string
TmpDirectory
;
CreateVideoWriterInvoker
(
std
::
vector
<
VideoWriter
*>&
_writers
,
std
::
vector
<
std
::
string
>&
_files
)
:
ParallelLoopBody
(),
writers
(
&
_writers
),
files
(
&
_files
)
writers
(
_writers
),
files
(
_files
)
{
}
...
...
@@ -240,16 +240,16 @@ public:
stream
<<
i
<<
".avi"
;
std
::
string
fileName
=
tempfile
(
stream
.
str
().
c_str
());
files
->
operator
[](
i
)
=
fileName
;
writers
->
operator
[](
i
)
=
new
VideoWriter
(
fileName
,
CAP_FFMPEG
,
VideoWriter
::
fourcc
(
'X'
,
'V'
,
'I'
,
'D'
),
25.0
f
,
FrameSize
);
files
[
i
]
=
fileName
;
writers
[
i
]
=
new
VideoWriter
(
fileName
,
CAP_FFMPEG
,
VideoWriter
::
fourcc
(
'X'
,
'V'
,
'I'
,
'D'
),
25.0
f
,
FrameSize
);
CV_Assert
(
writers
->
operator
[](
i
)
->
isOpened
());
CV_Assert
(
writers
[
i
]
->
isOpened
());
}
}
private
:
std
::
vector
<
VideoWriter
*>
*
writers
;
std
::
vector
<
std
::
string
>
*
files
;
std
::
vector
<
VideoWriter
*>
&
writers
;
std
::
vector
<
std
::
string
>
&
files
;
};
std
::
string
CreateVideoWriterInvoker
::
TmpDirectory
;
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment