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
990afa90
Commit
990afa90
authored
6 years ago
by
Alexander Alekhin
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #14054 from mshabunin:fix-dc1394
parents
c03a936c
e4a4f93b
No related merge requests found
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
1 addition
and
106 deletions
+1
-106
cap_dc1394_v2.cpp
modules/videoio/src/cap_dc1394_v2.cpp
+1
-106
No files found.
modules/videoio/src/cap_dc1394_v2.cpp
View file @
990afa90
...
...
@@ -59,108 +59,6 @@
#include <stdlib.h>
#include <string.h>
static
dc1394error_t
adaptBufferStereoLocal
(
dc1394video_frame_t
*
in
,
dc1394video_frame_t
*
out
)
{
uint32_t
bpp
;
// buffer position is not changed. Size is boubled in Y
out
->
size
[
0
]
=
in
->
size
[
0
];
out
->
size
[
1
]
=
in
->
size
[
1
]
*
2
;
out
->
position
[
0
]
=
in
->
position
[
0
];
out
->
position
[
1
]
=
in
->
position
[
1
];
// color coding is set to mono8 or raw8.
switch
(
in
->
color_coding
)
{
case
DC1394_COLOR_CODING_RAW16
:
out
->
color_coding
=
DC1394_COLOR_CODING_RAW8
;
break
;
case
DC1394_COLOR_CODING_MONO16
:
case
DC1394_COLOR_CODING_YUV422
:
out
->
color_coding
=
DC1394_COLOR_CODING_MONO8
;
break
;
default:
return
DC1394_INVALID_COLOR_CODING
;
}
// keep the color filter value in all cases. if the format is not raw it will not be further used anyway
out
->
color_filter
=
in
->
color_filter
;
// the output YUV byte order must be already set if the buffer is YUV422 at the output
// if the output is not YUV we don't care about this field.
// Hence nothing to do.
// we always convert to 8bits (at this point) we can safely set this value to 8.
out
->
data_depth
=
8
;
// don't know what to do with stride... >>>> TODO: STRIDE SHOULD BE TAKEN INTO ACCOUNT... <<<<
// out->stride=??
// the video mode should not change. Color coding and other stuff can be accessed in specific fields of this struct
out
->
video_mode
=
in
->
video_mode
;
// padding is kept:
out
->
padding_bytes
=
in
->
padding_bytes
;
// image bytes changes: >>>> TODO: STRIDE SHOULD BE TAKEN INTO ACCOUNT... <<<<
dc1394_get_color_coding_bit_size
(
out
->
color_coding
,
&
bpp
);
out
->
image_bytes
=
(
out
->
size
[
0
]
*
out
->
size
[
1
]
*
bpp
)
/
8
;
// total is image_bytes + padding_bytes
out
->
total_bytes
=
out
->
image_bytes
+
out
->
padding_bytes
;
// bytes-per-packet and packets_per_frame are internal data that can be kept as is.
out
->
packet_size
=
in
->
packet_size
;
out
->
packets_per_frame
=
in
->
packets_per_frame
;
// timestamp, frame_behind, id and camera are copied too:
out
->
timestamp
=
in
->
timestamp
;
out
->
frames_behind
=
in
->
frames_behind
;
out
->
camera
=
in
->
camera
;
out
->
id
=
in
->
id
;
// verify memory allocation:
if
(
out
->
total_bytes
>
out
->
allocated_image_bytes
)
{
free
(
out
->
image
);
out
->
image
=
(
uint8_t
*
)
malloc
(
out
->
total_bytes
*
sizeof
(
uint8_t
));
out
->
allocated_image_bytes
=
out
->
total_bytes
;
}
// Copy padding bytes:
memcpy
(
&
(
out
->
image
[
out
->
image_bytes
]),
&
(
in
->
image
[
in
->
image_bytes
]),
out
->
padding_bytes
);
out
->
little_endian
=
DC1394_FALSE
;
// not used before 1.32 is out.
out
->
data_in_padding
=
DC1394_FALSE
;
// not used before 1.32 is out.
return
DC1394_SUCCESS
;
}
static
dc1394error_t
dc1394_deinterlace_stereo_frames_fixed
(
dc1394video_frame_t
*
in
,
dc1394video_frame_t
*
out
,
dc1394stereo_method_t
method
)
{
if
((
in
->
color_coding
==
DC1394_COLOR_CODING_RAW16
)
||
(
in
->
color_coding
==
DC1394_COLOR_CODING_MONO16
)
||
(
in
->
color_coding
==
DC1394_COLOR_CODING_YUV422
))
{
switch
(
method
)
{
case
DC1394_STEREO_METHOD_INTERLACED
:
adaptBufferStereoLocal
(
in
,
out
);
//FIXED by AB:
// dc1394_deinterlace_stereo(in->image, out->image, in->size[0], in->size[1]);
dc1394_deinterlace_stereo
(
in
->
image
,
out
->
image
,
out
->
size
[
0
],
out
->
size
[
1
]);
break
;
case
DC1394_STEREO_METHOD_FIELD
:
adaptBufferStereoLocal
(
in
,
out
);
memcpy
(
out
->
image
,
in
->
image
,
out
->
image_bytes
);
break
;
}
return
DC1394_INVALID_STEREO_METHOD
;
}
else
return
DC1394_FUNCTION_NOT_SUPPORTED
;
}
static
uint32_t
getControlRegister
(
dc1394camera_t
*
camera
,
uint64_t
offset
)
{
uint32_t
value
=
0
;
...
...
@@ -566,10 +464,7 @@ bool CvCaptureCAM_DC1394_v2_CPP::grabFrame()
if
(
nimages
==
2
)
{
fs
=
(
dc1394video_frame_t
*
)
calloc
(
1
,
sizeof
(
*
fs
));
//dc1394_deinterlace_stereo_frames(dcFrame, fs, DC1394_STEREO_METHOD_INTERLACED);
dc1394_deinterlace_stereo_frames_fixed
(
dcFrame
,
fs
,
DC1394_STEREO_METHOD_INTERLACED
);
dc1394_deinterlace_stereo_frames
(
dcFrame
,
fs
,
DC1394_STEREO_METHOD_INTERLACED
);
dc1394_capture_enqueue
(
dcCam
,
dcFrame
);
// release the captured frame as soon as possible
dcFrame
=
0
;
if
(
!
fs
->
image
)
...
...
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