Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
gst-plugin-rs
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Packages & Registries
Packages & Registries
Container Registry
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jordan Petridіs
gst-plugin-rs
Commits
e930133b
Commit
e930133b
authored
Jan 12, 2019
by
François Laignel
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Update for gstreamer-rs MR 200
See
gstreamer/gstreamer-rs!200
parent
abe87fae
Changes
23
Show whitespace changes
Inline
Side-by-side
Showing
23 changed files
with
400 additions
and
570 deletions
+400
-570
gst-plugin-audiofx/src/audioecho.rs
gst-plugin-audiofx/src/audioecho.rs
+5
-11
gst-plugin-file/src/filesink.rs
gst-plugin-file/src/filesink.rs
+20
-23
gst-plugin-file/src/filesrc.rs
gst-plugin-file/src/filesrc.rs
+19
-29
gst-plugin-flv/src/flvdemux.rs
gst-plugin-flv/src/flvdemux.rs
+8
-11
gst-plugin-http/src/httpsrc.rs
gst-plugin-http/src/httpsrc.rs
+18
-24
gst-plugin-threadshare/Cargo.toml
gst-plugin-threadshare/Cargo.toml
+1
-0
gst-plugin-threadshare/examples/benchmark.rs
gst-plugin-threadshare/examples/benchmark.rs
+1
-4
gst-plugin-threadshare/src/appsrc.rs
gst-plugin-threadshare/src/appsrc.rs
+22
-29
gst-plugin-threadshare/src/proxy.rs
gst-plugin-threadshare/src/proxy.rs
+70
-99
gst-plugin-threadshare/src/queue.rs
gst-plugin-threadshare/src/queue.rs
+49
-64
gst-plugin-threadshare/src/tcpclientsrc.rs
gst-plugin-threadshare/src/tcpclientsrc.rs
+21
-28
gst-plugin-threadshare/src/udpsrc.rs
gst-plugin-threadshare/src/udpsrc.rs
+22
-29
gst-plugin-threadshare/tests/proxy.rs
gst-plugin-threadshare/tests/proxy.rs
+15
-19
gst-plugin-threadshare/tests/queue.rs
gst-plugin-threadshare/tests/queue.rs
+15
-19
gst-plugin-threadshare/tests/tcpclientsrc.rs
gst-plugin-threadshare/tests/tcpclientsrc.rs
+18
-22
gst-plugin-threadshare/tests/udpsrc.rs
gst-plugin-threadshare/tests/udpsrc.rs
+1
-1
gst-plugin-togglerecord/Cargo.toml
gst-plugin-togglerecord/Cargo.toml
+0
-1
gst-plugin-togglerecord/examples/gtk_recording.rs
gst-plugin-togglerecord/examples/gtk_recording.rs
+2
-4
gst-plugin-togglerecord/src/togglerecord.rs
gst-plugin-togglerecord/src/togglerecord.rs
+38
-42
gst-plugin-togglerecord/tests/tests.rs
gst-plugin-togglerecord/tests/tests.rs
+29
-71
gst-plugin-tutorial/src/identity.rs
gst-plugin-tutorial/src/identity.rs
+4
-9
gst-plugin-tutorial/src/rgb2gray.rs
gst-plugin-tutorial/src/rgb2gray.rs
+20
-29
gst-plugin-tutorial/src/sinesrc.rs
gst-plugin-tutorial/src/sinesrc.rs
+2
-2
No files found.
gst-plugin-audiofx/src/audioecho.rs
View file @
e930133b
...
@@ -254,20 +254,14 @@ impl BaseTransformImpl for AudioEcho {
...
@@ -254,20 +254,14 @@ impl BaseTransformImpl for AudioEcho {
&
self
,
&
self
,
_
element
:
&
gst_base
::
BaseTransform
,
_
element
:
&
gst_base
::
BaseTransform
,
buf
:
&
mut
gst
::
BufferRef
,
buf
:
&
mut
gst
::
BufferRef
,
)
->
gst
::
FlowReturn
{
)
->
Result
<
gst
::
FlowSuccess
,
gst
::
FlowError
>
{
let
mut
settings
=
*
self
.settings
.lock
()
.unwrap
();
let
mut
settings
=
*
self
.settings
.lock
()
.unwrap
();
settings
.delay
=
cmp
::
min
(
settings
.max_delay
,
settings
.delay
);
settings
.delay
=
cmp
::
min
(
settings
.max_delay
,
settings
.delay
);
let
mut
state_guard
=
self
.state
.lock
()
.unwrap
();
let
mut
state_guard
=
self
.state
.lock
()
.unwrap
();
let
state
=
match
*
state_guard
{
let
state
=
state_guard
.as_mut
()
.ok_or
(
gst
::
FlowError
::
NotNegotiated
)
?
;
None
=>
return
gst
::
FlowReturn
::
NotNegotiated
,
Some
(
ref
mut
state
)
=>
state
,
};
let
mut
map
=
match
buf
.map_writable
()
{
let
mut
map
=
buf
.map_writable
()
.ok_or
(
gst
::
FlowError
::
Error
)
?
;
None
=>
return
gst
::
FlowReturn
::
Error
,
Some
(
map
)
=>
map
,
};
match
state
.info
.format
()
{
match
state
.info
.format
()
{
gst_audio
::
AUDIO_FORMAT_F64
=>
{
gst_audio
::
AUDIO_FORMAT_F64
=>
{
...
@@ -278,10 +272,10 @@ impl BaseTransformImpl for AudioEcho {
...
@@ -278,10 +272,10 @@ impl BaseTransformImpl for AudioEcho {
let
data
=
map
.as_mut_slice_of
::
<
f32
>
()
.unwrap
();
let
data
=
map
.as_mut_slice_of
::
<
f32
>
()
.unwrap
();
Self
::
process
(
data
,
state
,
&
settings
);
Self
::
process
(
data
,
state
,
&
settings
);
}
}
_
=>
return
gst
::
FlowReturn
::
NotNegotiated
,
_
=>
return
Err
(
gst
::
FlowError
::
NotNegotiated
)
,
}
}
gst
::
FlowReturn
::
Ok
Ok
(
gst
::
FlowSuccess
::
Ok
)
}
}
fn
set_caps
(
fn
set_caps
(
...
...
gst-plugin-file/src/filesink.rs
View file @
e930133b
...
@@ -265,7 +265,11 @@ impl BaseSinkImpl for FileSink {
...
@@ -265,7 +265,11 @@ impl BaseSinkImpl for FileSink {
// TODO: implement seek in BYTES format
// TODO: implement seek in BYTES format
fn
render
(
&
self
,
element
:
&
gst_base
::
BaseSink
,
buffer
:
&
gst
::
BufferRef
)
->
gst
::
FlowReturn
{
fn
render
(
&
self
,
element
:
&
gst_base
::
BaseSink
,
buffer
:
&
gst
::
BufferRef
,
)
->
Result
<
gst
::
FlowSuccess
,
gst
::
FlowError
>
{
let
mut
state
=
self
.state
.lock
()
.unwrap
();
let
mut
state
=
self
.state
.lock
()
.unwrap
();
let
(
file
,
position
)
=
match
*
state
{
let
(
file
,
position
)
=
match
*
state
{
State
::
Started
{
State
::
Started
{
...
@@ -274,35 +278,28 @@ impl BaseSinkImpl for FileSink {
...
@@ -274,35 +278,28 @@ impl BaseSinkImpl for FileSink {
}
=>
(
file
,
position
),
}
=>
(
file
,
position
),
State
::
Stopped
=>
{
State
::
Stopped
=>
{
gst_element_error!
(
element
,
gst
::
CoreError
::
Failed
,
[
"Not started yet"
]);
gst_element_error!
(
element
,
gst
::
CoreError
::
Failed
,
[
"Not started yet"
]);
return
gst
::
FlowReturn
::
Error
;
return
Err
(
gst
::
FlowError
::
Error
)
;
}
}
};
};
gst_trace!
(
self
.cat
,
obj
:
element
,
"Rendering {:?}"
,
buffer
);
gst_trace!
(
self
.cat
,
obj
:
element
,
"Rendering {:?}"
,
buffer
);
let
map
=
match
buffer
.map_readable
()
{
let
map
=
buffer
.map_readable
()
.ok_or_else
(||
{
None
=>
{
gst_element_error!
(
element
,
gst
::
CoreError
::
Failed
,
[
"Failed to map buffer"
]);
gst_element_error!
(
element
,
gst
::
CoreError
::
Failed
,
[
"Failed to map buffer"
]);
return
gst
::
FlowReturn
::
Error
;
gst
::
FlowError
::
Error
}
})
?
;
Some
(
map
)
=>
map
,
};
match
file
.write_all
(
map
.as_ref
())
{
Ok
(())
=>
{
*
position
+=
map
.len
()
as
u64
;
gst
::
FlowReturn
::
Ok
file
.write_all
(
map
.as_ref
())
.map_err
(|
err
|
{
}
Err
(
err
)
=>
{
gst_element_error!
(
gst_element_error!
(
element
,
element
,
gst
::
ResourceError
::
Write
,
gst
::
ResourceError
::
Write
,
[
"Failed to write buffer: {}"
,
err
]
[
"Failed to write buffer: {}"
,
err
]
);
);
gst
::
FlowError
::
Error
})
?
;
gst
::
FlowReturn
::
Error
*
position
+=
map
.len
()
as
u64
;
}
}
Ok
(
gst
::
FlowSuccess
::
Ok
)
}
}
}
}
...
...
gst-plugin-file/src/filesrc.rs
View file @
e930133b
...
@@ -306,7 +306,7 @@ impl BaseSrcImpl for FileSrc {
...
@@ -306,7 +306,7 @@ impl BaseSrcImpl for FileSrc {
offset
:
u64
,
offset
:
u64
,
_
length
:
u32
,
_
length
:
u32
,
buffer
:
&
mut
gst
::
BufferRef
,
buffer
:
&
mut
gst
::
BufferRef
,
)
->
gst
::
FlowReturn
{
)
->
Result
<
gst
::
FlowSuccess
,
gst
::
FlowError
>
{
let
mut
state
=
self
.state
.lock
()
.unwrap
();
let
mut
state
=
self
.state
.lock
()
.unwrap
();
let
(
file
,
position
)
=
match
*
state
{
let
(
file
,
position
)
=
match
*
state
{
...
@@ -316,54 +316,44 @@ impl BaseSrcImpl for FileSrc {
...
@@ -316,54 +316,44 @@ impl BaseSrcImpl for FileSrc {
}
=>
(
file
,
position
),
}
=>
(
file
,
position
),
State
::
Stopped
=>
{
State
::
Stopped
=>
{
gst_element_error!
(
element
,
gst
::
CoreError
::
Failed
,
[
"Not started yet"
]);
gst_element_error!
(
element
,
gst
::
CoreError
::
Failed
,
[
"Not started yet"
]);
return
gst
::
FlowReturn
::
Error
;
return
Err
(
gst
::
FlowError
::
Error
)
;
}
}
};
};
if
*
position
!=
offset
{
if
*
position
!=
offset
{
if
let
Err
(
err
)
=
file
.seek
(
SeekFrom
::
Start
(
offset
))
{
file
.seek
(
SeekFrom
::
Start
(
offset
))
.map_err
(|
err
|
{
gst_element_error!
(
gst_element_error!
(
element
,
element
,
gst
::
LibraryError
::
Failed
,
gst
::
LibraryError
::
Failed
,
[
"Failed to seek to {}: {}"
,
offset
,
err
.to_string
()]
[
"Failed to seek to {}: {}"
,
offset
,
err
.to_string
()]
);
);
return
gst
::
FlowReturn
::
Error
;
gst
::
FlowError
::
Error
}
}
)
?
;
*
position
=
offset
;
*
position
=
offset
;
}
}
let
size
=
{
let
size
=
{
let
mut
map
=
match
buffer
.map_writable
()
{
let
mut
map
=
buffer
.map_writable
()
.ok_or_else
(||
{
Some
(
map
)
=>
map
,
gst_element_error!
(
element
,
gst
::
LibraryError
::
Failed
,
[
"Failed to map buffer"
]);
None
=>
{
gst
::
FlowError
::
Error
gst_element_error!
(
})
?
;
element
,
gst
::
LibraryError
::
Failed
,
[
"Failed to map buffer"
]
);
return
gst
::
FlowReturn
::
Error
;
}
};
match
file
.read
(
map
.as_mut
())
{
file
.read
(
map
.as_mut
())
.map_err
(|
err
|
{
Ok
(
size
)
=>
size
,
Err
(
err
)
=>
{
gst_element_error!
(
gst_element_error!
(
element
,
element
,
gst
::
LibraryError
::
Failed
,
gst
::
LibraryError
::
Failed
,
[
"Failed to read at {}: {}"
,
offset
,
err
.to_string
()]
[
"Failed to read at {}: {}"
,
offset
,
err
.to_string
()]
);
);
return
gst
::
FlowReturn
::
Error
;
gst
::
FlowError
::
Error
}
})
?
}
};
};
*
position
+=
size
as
u64
;
*
position
+=
size
as
u64
;
buffer
.set_size
(
size
);
buffer
.set_size
(
size
);
gst
::
FlowReturn
::
Ok
Ok
(
gst
::
FlowSuccess
::
Ok
)
}
}
}
}
...
...
gst-plugin-flv/src/flvdemux.rs
View file @
e930133b
...
@@ -158,7 +158,7 @@ impl ObjectSubclass for FlvDemux {
...
@@ -158,7 +158,7 @@ impl ObjectSubclass for FlvDemux {
sinkpad
.set_chain_function
(|
pad
,
parent
,
buffer
|
{
sinkpad
.set_chain_function
(|
pad
,
parent
,
buffer
|
{
FlvDemux
::
catch_panic_pad_function
(
FlvDemux
::
catch_panic_pad_function
(
parent
,
parent
,
||
gst
::
FlowReturn
::
Error
,
||
Err
(
gst
::
FlowError
::
Error
)
,
|
demux
,
element
|
demux
.sink_chain
(
pad
,
element
,
buffer
),
|
demux
,
element
|
demux
.sink_chain
(
pad
,
element
,
buffer
),
)
)
});
});
...
@@ -461,7 +461,7 @@ impl FlvDemux {
...
@@ -461,7 +461,7 @@ impl FlvDemux {
pad
:
&
gst
::
Pad
,
pad
:
&
gst
::
Pad
,
element
:
&
gst
::
Element
,
element
:
&
gst
::
Element
,
buffer
:
gst
::
Buffer
,
buffer
:
gst
::
Buffer
,
)
->
gst
::
FlowReturn
{
)
->
Result
<
gst
::
FlowSuccess
,
gst
::
FlowError
>
{
gst_log!
(
CAT
,
obj
:
pad
,
"Handling buffer {:?}"
,
buffer
);
gst_log!
(
CAT
,
obj
:
pad
,
"Handling buffer {:?}"
,
buffer
);
let
mut
adapter
=
self
.adapter
.lock
()
.unwrap
();
let
mut
adapter
=
self
.adapter
.lock
()
.unwrap
();
...
@@ -476,7 +476,7 @@ impl FlvDemux {
...
@@ -476,7 +476,7 @@ impl FlvDemux {
Ok
(
header
)
=>
header
,
Ok
(
header
)
=>
header
,
Err
(
_
)
=>
{
Err
(
_
)
=>
{
gst_trace!
(
CAT
,
obj
:
element
,
"Need more data"
);
gst_trace!
(
CAT
,
obj
:
element
,
"Need more data"
);
return
gst
::
FlowReturn
::
Ok
;
return
Ok
(
gst
::
FlowSuccess
::
Ok
)
;
}
}
};
};
...
@@ -505,7 +505,7 @@ impl FlvDemux {
...
@@ -505,7 +505,7 @@ impl FlvDemux {
let
avail
=
adapter
.available
();
let
avail
=
adapter
.available
();
if
avail
==
0
{
if
avail
==
0
{
gst_trace!
(
CAT
,
obj
:
element
,
"Need more data"
);
gst_trace!
(
CAT
,
obj
:
element
,
"Need more data"
);
return
gst
::
FlowReturn
::
Ok
;
return
Ok
(
gst
::
FlowSuccess
::
Ok
)
;
}
}
let
skip
=
cmp
::
min
(
avail
,
*
skip_left
as
usize
);
let
skip
=
cmp
::
min
(
avail
,
*
skip_left
as
usize
);
adapter
.flush
(
skip
);
adapter
.flush
(
skip
);
...
@@ -517,22 +517,20 @@ impl FlvDemux {
...
@@ -517,22 +517,20 @@ impl FlvDemux {
match
res
{
match
res
{
Ok
(
None
)
=>
{
Ok
(
None
)
=>
{
gst_trace!
(
CAT
,
obj
:
element
,
"Need more data"
);
gst_trace!
(
CAT
,
obj
:
element
,
"Need more data"
);
return
gst
::
FlowReturn
::
Ok
;
return
Ok
(
gst
::
FlowSuccess
::
Ok
)
;
}
}
Ok
(
Some
(
events
))
=>
{
Ok
(
Some
(
events
))
=>
{
drop
(
state
);
drop
(
state
);
drop
(
adapter
);
drop
(
adapter
);
if
let
Err
(
err
)
=
self
.handle_events
(
element
,
events
)
{
self
.handle_events
(
element
,
events
)
?
;
return
err
.into
();
}
adapter
=
self
.adapter
.lock
()
.unwrap
();
adapter
=
self
.adapter
.lock
()
.unwrap
();
state
=
self
.state
.lock
()
.unwrap
();
state
=
self
.state
.lock
()
.unwrap
();
}
}
Err
(
err
)
=>
{
Err
(
err
)
=>
{
element
.post_error_message
(
&
err
);
element
.post_error_message
(
&
err
);
return
gst
::
FlowReturn
::
Error
;
return
Err
(
gst
::
FlowError
::
Error
)
;
}
}
}
}
}
}
...
@@ -622,8 +620,7 @@ impl FlvDemux {
...
@@ -622,8 +620,7 @@ impl FlvDemux {
self
.flow_combiner
self
.flow_combiner
.lock
()
.lock
()
.unwrap
()
.unwrap
()
.update_pad_flow
(
&
pad
,
res
)
.update_pad_flow
(
&
pad
,
res
)
?
;
.into_result
()
?
;
}
}
}
}
Event
::
HaveAllStreams
=>
{
Event
::
HaveAllStreams
=>
{
...
...
gst-plugin-http/src/httpsrc.rs
View file @
e930133b
...
@@ -350,7 +350,7 @@ impl BaseSrcImpl for HttpSrc {
...
@@ -350,7 +350,7 @@ impl BaseSrcImpl for HttpSrc {
offset
:
u64
,
offset
:
u64
,
_
:
u32
,
_
:
u32
,
buffer
:
&
mut
gst
::
BufferRef
,
buffer
:
&
mut
gst
::
BufferRef
,
)
->
gst
::
FlowReturn
{
)
->
Result
<
gst
::
FlowSuccess
,
gst
::
FlowError
>
{
let
mut
state
=
self
.state
.lock
()
.unwrap
();
let
mut
state
=
self
.state
.lock
()
.unwrap
();
let
(
response
,
position
)
=
match
*
state
{
let
(
response
,
position
)
=
match
*
state
{
...
@@ -362,7 +362,7 @@ impl BaseSrcImpl for HttpSrc {
...
@@ -362,7 +362,7 @@ impl BaseSrcImpl for HttpSrc {
State
::
Stopped
=>
{
State
::
Stopped
=>
{
gst_element_error!
(
src
,
gst
::
LibraryError
::
Failed
,
[
"Not started yet"
]);
gst_element_error!
(
src
,
gst
::
LibraryError
::
Failed
,
[
"Not started yet"
]);
return
gst
::
FlowReturn
::
Error
;
return
Err
(
gst
::
FlowError
::
Error
)
;
}
}
};
};
...
@@ -373,24 +373,19 @@ impl BaseSrcImpl for HttpSrc {
...
@@ -373,24 +373,19 @@ impl BaseSrcImpl for HttpSrc {
[
"Got unexpected offset {}, expected {}"
,
offset
,
position
]
[
"Got unexpected offset {}, expected {}"
,
offset
,
position
]
);
);
return
gst
::
FlowReturn
::
Error
;
return
Err
(
gst
::
FlowError
::
Error
)
;
}
}
let
size
=
{
let
size
=
{
let
mut
map
=
match
buffer
.map_writable
()
{
let
mut
map
=
buffer
.map_writable
()
.ok_or_else
(||
{
None
=>
{
gst_element_error!
(
src
,
gst
::
LibraryError
::
Failed
,
[
"Failed to map buffer"
]);
gst_element_error!
(
src
,
gst
::
LibraryError
::
Failed
,
[
"Failed to map buffer"
]);
return
gst
::
FlowReturn
::
Error
;
gst
::
FlowError
::
Error
}
})
?
;
Some
(
map
)
=>
map
,
};
let
data
=
map
.as_mut_slice
();
let
data
=
map
.as_mut_slice
();
match
response
.read
(
data
)
{
response
.read
(
data
)
.map_err
(|
err
|
{
Ok
(
size
)
=>
size
,
Err
(
err
)
=>
{
gst_error!
(
self
.cat
,
obj
:
src
,
"Failed to read: {:?}"
,
err
);
gst_error!
(
self
.cat
,
obj
:
src
,
"Failed to read: {:?}"
,
err
);
gst_element_error!
(
gst_element_error!
(
src
,
src
,
...
@@ -398,20 +393,19 @@ impl BaseSrcImpl for HttpSrc {
...
@@ -398,20 +393,19 @@ impl BaseSrcImpl for HttpSrc {
[
"Failed to read at {}: {}"
,
offset
,
err
.to_string
()]
[
"Failed to read at {}: {}"
,
offset
,
err
.to_string
()]
);
);
return
gst
::
FlowReturn
::
Error
;
gst
::
FlowError
::
Error
}
})
?
}
};
};
if
size
==
0
{
if
size
==
0
{
return
gst
::
FlowReturn
::
Eos
;
return
Err
(
gst
::
FlowError
::
Eos
)
;
}
}
*
position
+=
size
as
u64
;
*
position
+=
size
as
u64
;
buffer
.set_size
(
size
);
buffer
.set_size
(
size
);
gst
::
FlowReturn
::
Ok
Ok
(
gst
::
FlowSuccess
::
Ok
)
}
}
}
}
...
...
gst-plugin-threadshare/Cargo.toml
View file @
e930133b
...
@@ -13,6 +13,7 @@ gstreamer-sys = { git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs-s
...
@@ -13,6 +13,7 @@ gstreamer-sys = { git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs-s
glib
=
{
git
=
"https://github.com/gtk-rs/glib"
,
features
=
["subclassing"]
}
glib
=
{
git
=
"https://github.com/gtk-rs/glib"
,
features
=
["subclassing"]
}
gio
=
{
git
=
"https://github.com/gtk-rs/gio"
}
gio
=
{
git
=
"https://github.com/gtk-rs/gio"
}
gstreamer
=
{
git
=
"https://gitlab.freedesktop.org/gstreamer/gstreamer-rs"
,
features
=
["subclassing"]
}
gstreamer
=
{
git
=
"https://gitlab.freedesktop.org/gstreamer/gstreamer-rs"
,
features
=
["subclassing"]
}
gstreamer-app
=
{
git
=
"https://gitlab.freedesktop.org/gstreamer/gstreamer-rs"
}
gstreamer-check
=
{
git
=
"https://gitlab.freedesktop.org/gstreamer/gstreamer-rs"
}
gstreamer-check
=
{
git
=
"https://gitlab.freedesktop.org/gstreamer/gstreamer-rs"
}
tokio
=
"0.1"
tokio
=
"0.1"
tokio-reactor
=
"0.1"
tokio-reactor
=
"0.1"
...
...
gst-plugin-threadshare/examples/benchmark.rs
View file @
e930133b
...
@@ -164,10 +164,7 @@ fn main() {
...
@@ -164,10 +164,7 @@ fn main() {
glib
::
Continue
(
true
)
glib
::
Continue
(
true
)
});
});
assert_ne!
(
pipeline
.set_state
(
gst
::
State
::
Playing
)
.unwrap
();
pipeline
.set_state
(
gst
::
State
::
Playing
),
gst
::
StateChangeReturn
::
Failure
);
println!
(
"started"
);
println!
(
"started"
);
...
...
gst-plugin-threadshare/src/appsrc.rs
View file @
e930133b
...
@@ -173,9 +173,9 @@ impl AppSrc {
...
@@ -173,9 +173,9 @@ impl AppSrc {
true
true
}
}
EventView
::
FlushStop
(
..
)
=>
{
EventView
::
FlushStop
(
..
)
=>
{
let
(
re
t
,
state
,
pending
)
=
element
.get_state
(
0
.into
());
let
(
re
s
,
state
,
pending
)
=
element
.get_state
(
0
.into
());
if
re
t
==
gst
::
StateChangeReturn
::
Success
&&
state
==
gst
::
State
::
Playing
if
re
s
==
Ok
(
gst
::
StateChangeSuccess
::
Success
)
&&
state
==
gst
::
State
::
Playing
||
re
t
==
gst
::
StateChangeReturn
::
Async
&&
pending
==
gst
::
State
::
Playing
||
re
s
==
Ok
(
gst
::
StateChangeSuccess
::
Async
)
&&
pending
==
gst
::
State
::
Playing
{
{
let
_
=
self
.start
(
element
);
let
_
=
self
.start
(
element
);
}
}
...
@@ -331,7 +331,7 @@ impl AppSrc {
...
@@ -331,7 +331,7 @@ impl AppSrc {
let
res
=
match
item
{
let
res
=
match
item
{
Either
::
Left
(
buffer
)
=>
{
Either
::
Left
(
buffer
)
=>
{
gst_log!
(
self
.cat
,
obj
:
element
,
"Forwarding buffer {:?}"
,
buffer
);
gst_log!
(
self
.cat
,
obj
:
element
,
"Forwarding buffer {:?}"
,
buffer
);
self
.src_pad
.push
(
buffer
)
.
into_result
()
.
map
(|
_
|
())
self
.src_pad
.push
(
buffer
)
.map
(|
_
|
())
}
}
Either
::
Right
(
event
)
=>
{
Either
::
Right
(
event
)
=>
{
gst_log!
(
self
.cat
,
obj
:
element
,
"Forwarding event {:?}"
,
event
);
gst_log!
(
self
.cat
,
obj
:
element
,
"Forwarding event {:?}"
,
event
);
...
@@ -638,41 +638,34 @@ impl ElementImpl for AppSrc {
...
@@ -638,41 +638,34 @@ impl ElementImpl for AppSrc {
&
self
,
&
self
,
element
:
&
gst
::
Element
,
element
:
&
gst
::
Element
,
transition
:
gst
::
StateChange
,
transition
:
gst
::
StateChange
,
)
->
gst
::
StateChangeReturn
{
)
->
Result
<
gst
::
StateChangeSuccess
,
gst
::
StateChangeError
>
{
gst_trace!
(
self
.cat
,
obj
:
element
,
"Changing state {:?}"
,
transition
);
gst_trace!
(
self
.cat
,
obj
:
element
,
"Changing state {:?}"
,
transition
);
match
transition
{
match
transition
{
gst
::
StateChange
::
NullToReady
=>
match
self
.prepare
(
element
)
{
gst
::
StateChange
::
NullToReady
=>
{
Err
(
err
)
=>
{
self
.prepare
(
element
)
.map_err
(|
err
|
{
element
.post_error_message
(
&
err
);
element
.post_error_message
(
&
err
);
return
gst
::
StateChangeReturn
::
Failure
;
gst
::
StateChangeError
})
?
;
}
gst
::
StateChange
::
PlayingToPaused
=>
{
self
.stop
(
element
)
.map_err
(|
_
|
gst
::
StateChangeError
)
?
;
}
gst
::
StateChange
::
ReadyToNull
=>
{
self
.unprepare
(
element
)
.map_err
(|
_
|
gst
::
StateChangeError
)
?
;
}
}
Ok
(
_
)
=>
(),
},
gst
::
StateChange
::
PlayingToPaused
=>
match
self
.stop
(
element
)
{
Err
(
_
)
=>
return
gst
::
StateChangeReturn
::
Failure
,
Ok
(
_
)
=>
(),
},
gst
::
StateChange
::
ReadyToNull
=>
match
self
.unprepare
(
element
)
{
Err
(
_
)
=>
return
gst
::
StateChangeReturn
::
Failure
,
Ok
(
_
)
=>
(),
},
_
=>
(),
_
=>
(),
}
}
let
mut
ret
=
self
.parent_change_state
(
element
,
transition
);
let
mut
success
=
self
.parent_change_state
(
element
,
transition
)
?
;
if
ret
==
gst
::
StateChangeReturn
::
Failure
{
return
ret
;
}
match
transition
{
match
transition
{
gst
::
StateChange
::
ReadyToPaused
=>
{
gst
::
StateChange
::
ReadyToPaused
=>
{
ret
=
gst
::
StateChangeReturn
::
NoPreroll
;
success
=
gst
::
StateChangeSuccess
::
NoPreroll
;
}
gst
::
StateChange
::
PausedToPlaying
=>
{
self
.start
(
element
)
.map_err
(|
_
|
gst
::
StateChangeError
)
?
;
}
}
gst
::
StateChange
::
PausedToPlaying
=>
match
self
.start
(
element
)
{
Err
(
_
)
=>
return
gst
::
StateChangeReturn
::
Failure
,
Ok
(
_
)
=>
(),
},
gst
::
StateChange
::
PausedToReady
=>
{
gst
::
StateChange
::
PausedToReady
=>
{
let
mut
state
=
self
.state
.lock
()
.unwrap
();
let
mut
state
=
self
.state
.lock
()
.unwrap
();
state
.need_initial_events
=
true
;
state
.need_initial_events
=
true
;
...
@@ -680,7 +673,7 @@ impl ElementImpl for AppSrc {
...
@@ -680,7 +673,7 @@ impl ElementImpl for AppSrc {
_
=>
(),
_
=>
(),
}
}
ret
Ok
(
success
)
}
}
}
}
...
...
gst-plugin-threadshare/src/proxy.rs
View file @
e930133b
...
@@ -198,7 +198,7 @@ impl SharedQueue {
...
@@ -198,7 +198,7 @@ impl SharedQueue {
let
inner
=
Arc
::
new
(
Mutex
::
new
(
SharedQueueInner
{
let
inner
=
Arc
::
new
(
Mutex
::
new
(
SharedQueueInner
{
name
:
name
.into
(),
name
:
name
.into
(),
queue
:
None
,
queue
:
None
,
last_re
t
:
gst
::
FlowReturn
::
Flushing
,
last_re
s
:
Err
(
gst
::
FlowError
::
Flushing
)
,
pending_queue
:
None
,
pending_queue
:
None
,
pending_future_cancel
:
None
,
pending_future_cancel
:
None
,
have_sink
:
as_sink
,
have_sink
:
as_sink
,
...
@@ -236,7 +236,7 @@ impl Drop for SharedQueue {
...
@@ -236,7 +236,7 @@ impl Drop for SharedQueue {
struct
SharedQueueInner
{
struct
SharedQueueInner
{
name
:
String
,
name
:
String
,
queue
:
Option
<
DataQueue
>
,
queue
:
Option
<
DataQueue
>
,