Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
GStreamer
gst-plugins-rs
Commits
d6d306f9
Commit
d6d306f9
authored
May 15, 2016
by
Luis de Bethencourt
Committed by
Sebastian Dröge
May 15, 2016
Browse files
RsFileSink writes buffers to a file
parent
87bd914c
Changes
3
Hide whitespace changes
Inline
Side-by-side
src/rsfilesink.rs
View file @
d6d306f9
...
...
@@ -76,7 +76,16 @@ impl Sink for FileSink {
match
self
.location
{
None
=>
return
false
,
Some
(
ref
location
)
=>
{
return
true
;
match
File
::
create
(
location
.as_path
())
{
Ok
(
file
)
=>
{
self
.file
=
Some
(
file
);
return
true
;
},
Err
(
err
)
=>
{
println_err!
(
"Could not open file for writing '{}': {}"
,
location
.to_str
()
.unwrap_or
(
"Non-UTF8 path"
),
err
.to_string
());
return
false
;
}
}
},
}
}
...
...
@@ -88,8 +97,20 @@ impl Sink for FileSink {
true
}
fn
render
(
&
mut
self
)
->
Result
<
usize
,
GstFlowReturn
>
{
println!
(
"Got a buffer!"
);
Err
(
GstFlowReturn
::
Ok
)
fn
render
(
&
mut
self
,
data
:
&
mut
[
u8
])
->
GstFlowReturn
{
match
self
.file
{
None
=>
return
GstFlowReturn
::
Error
,
Some
(
ref
mut
f
)
=>
{
match
f
.write_all
(
data
)
{
Ok
(
_
)
=>
{
return
GstFlowReturn
::
Ok
},
Err
(
err
)
=>
{
println_err!
(
"Failed to write: {}"
,
err
);
return
GstFlowReturn
::
Error
},
}
},
}
}
}
src/rssink.c
View file @
d6d306f9
...
...
@@ -16,7 +16,7 @@ static GHashTable *sinks;
/* Declarations for Rust code */
extern
gboolean
sinks_register
(
void
*
plugin
);
extern
GstFlowReturn
sink_render
(
void
*
filesink
);
extern
GstFlowReturn
sink_render
(
void
*
filesink
,
void
*
data
,
size_t
data_len
);
extern
gboolean
sink_set_uri
(
void
*
filesink
,
const
char
*
uri
);
extern
char
*
sink_get_uri
(
void
*
filesink
);
extern
gboolean
sink_start
(
void
*
filesink
);
...
...
@@ -132,9 +132,12 @@ static GstFlowReturn
gst_rs_sink_render
(
GstBaseSink
*
basesink
,
GstBuffer
*
buffer
)
{
GstRsSink
*
sink
=
GST_RS_SINK
(
basesink
);
GstMapInfo
map
;
GstFlowReturn
ret
;
ret
=
sink_render
(
sink
->
instance
);
gst_buffer_map
(
buffer
,
&
map
,
GST_MAP_READ
);
ret
=
sink_render
(
sink
->
instance
,
map
.
data
,
map
.
size
);
gst_buffer_unmap
(
buffer
,
&
map
);
return
ret
;
}
...
...
src/rssink.rs
View file @
d6d306f9
use
libc
::{
c_char
};
use
std
::
ffi
::{
CStr
,
CString
};
use
std
::
slice
;
use
std
::
ptr
;
use
utils
::
*
;
...
...
@@ -9,7 +10,7 @@ pub trait Sink {
fn
get_uri
(
&
self
)
->
Option
<
String
>
;
fn
start
(
&
mut
self
)
->
bool
;
fn
stop
(
&
mut
self
)
->
bool
;
fn
render
(
&
mut
self
)
->
Result
<
usize
,
GstFlowReturn
>
;
fn
render
(
&
mut
self
,
data
:
&
mut
[
u8
])
->
GstFlowReturn
;
}
#[no_mangle]
...
...
@@ -37,15 +38,11 @@ pub extern "C" fn sink_get_uri(ptr: *mut Box<Sink>) -> *mut c_char {
}
#[no_mangle]
pub
extern
"C"
fn
sink_render
(
ptr
:
*
mut
Box
<
Sink
>
)
->
GstFlowReturn
{
pub
extern
"C"
fn
sink_render
(
ptr
:
*
mut
Box
<
Sink
>
,
data_ptr
:
*
mut
u8
,
data_len
:
usize
)
->
GstFlowReturn
{
let
source
:
&
mut
Box
<
Sink
>
=
unsafe
{
&
mut
*
ptr
};
match
source
.render
()
{
Ok
(
data
)
=>
{
GstFlowReturn
::
Ok
},
Err
(
ret
)
=>
ret
,
}
let
mut
data
=
unsafe
{
slice
::
from_raw_parts_mut
(
data_ptr
,
data_len
)
};
source
.render
(
data
)
}
#[no_mangle]
...
...
Write
Preview
Supports
Markdown
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