Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
7
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Open sidebar
George Kiagiadakis
gst-plugins-good
Commits
c7d735a5
Commit
c7d735a5
authored
May 04, 2014
by
Nicolas Dufresne
Committed by
Nicolas Dufresne
May 08, 2014
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
v4l2bufferpool: Ensure we don't re-enqueue buffer during flush
parent
01feadc2
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
18 additions
and
2 deletions
+18
-2
sys/v4l2/gstv4l2bufferpool.c
sys/v4l2/gstv4l2bufferpool.c
+17
-2
sys/v4l2/gstv4l2bufferpool.h
sys/v4l2/gstv4l2bufferpool.h
+1
-0
No files found.
sys/v4l2/gstv4l2bufferpool.c
View file @
c7d735a5
...
...
@@ -595,6 +595,9 @@ start_streaming (GstV4l2BufferPool * pool)
{
GstV4l2Object
*
obj
=
pool
->
obj
;
if
(
pool
->
streaming
)
return
TRUE
;
switch
(
obj
->
mode
)
{
case
GST_V4L2_IO_RW
:
break
;
...
...
@@ -608,9 +611,10 @@ start_streaming (GstV4l2BufferPool * pool)
if
(
!
V4L2_TYPE_IS_OUTPUT
(
obj
->
type
))
{
GstBufferPool
*
bpool
=
GST_BUFFER_POOL
(
pool
);
GstBufferPoolAcquireParams
params
=
{
0
};
gint
n_to_q
=
pool
->
num_allocated
-
pool
->
num_queued
;
GstFlowReturn
ret
;
while
(
pool
->
num_queued
<
pool
->
num_allocated
)
{
while
(
n_to_q
>
0
)
{
GstBuffer
*
buf
;
params
.
flags
=
GST_BUFFER_POOL_ACQUIRE_FLAG_DONTWAIT
;
...
...
@@ -621,7 +625,11 @@ start_streaming (GstV4l2BufferPool * pool)
goto
requeue_failed
;
gst_v4l2_buffer_pool_release_buffer
(
bpool
,
buf
);
n_to_q
--
;
}
if
(
pool
->
num_allocated
!=
pool
->
num_queued
)
goto
requeue_failed
;
}
GST_DEBUG_OBJECT
(
pool
,
"STREAMON"
);
...
...
@@ -863,6 +871,8 @@ stop_streaming (GstV4l2BufferPool * pool)
return
TRUE
;
}
pool
->
flushing
=
TRUE
;
switch
(
obj
->
mode
)
{
case
GST_V4L2_IO_RW
:
break
;
...
...
@@ -904,6 +914,7 @@ stop_streaming (GstV4l2BufferPool * pool)
break
;
}
pool
->
flushing
=
FALSE
;
pool
->
streaming
=
FALSE
;
if
(
pool
->
other_pool
)
...
...
@@ -1275,7 +1286,11 @@ gst_v4l2_buffer_pool_release_buffer (GstBufferPool * bpool, GstBuffer * buffer)
case
GST_V4L2_IO_USERPTR
:
case
GST_V4L2_IO_DMABUF_IMPORT
:
{
if
(
gst_v4l2_is_buffer_valid
(
buffer
,
NULL
))
{
if
(
pool
->
flushing
)
{
/* put back on outstanding list */
GST_BUFFER_POOL_CLASS
(
parent_class
)
->
release_buffer
(
bpool
,
buffer
);
}
else
if
(
gst_v4l2_is_buffer_valid
(
buffer
,
NULL
))
{
/* queue back in the device */
if
(
pool
->
other_pool
)
gst_v4l2_buffer_pool_prepare_buffer
(
pool
,
buffer
,
NULL
);
...
...
sys/v4l2/gstv4l2bufferpool.h
View file @
c7d735a5
...
...
@@ -68,6 +68,7 @@ struct _GstV4l2BufferPool
guint
copy_threshold
;
/* when our pool runs lower, start handing out copies */
gboolean
streaming
;
gboolean
flushing
;
GstBuffer
*
buffers
[
VIDEO_MAX_FRAME
];
...
...
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