diff --git a/Gir_GstPlayer.toml b/Gir_GstPlayer.toml
index 01d9debce..49d4fa54a 100644
--- a/Gir_GstPlayer.toml
+++ b/Gir_GstPlayer.toml
@@ -19,7 +19,6 @@ generate = [
"GstPlayer.PlayerSignalDispatcher",
"GstPlayer.PlayerSnapshotFormat",
"GstPlayer.PlayerState",
- "GstPlayer.PlayerStreamInfo",
"GstPlayer.PlayerVideoRenderer",
"GstPlayer.PlayerVisualization",
]
@@ -29,6 +28,8 @@ manual = [
"GLib.MainContext",
"GObject.Object",
"Gst.Element",
+ "GstVideo.VideoMultiviewFlags",
+ "GstVideo.VideoMultiviewFramePacking",
]
[[object]]
@@ -64,13 +65,52 @@ trait = false
[[object.function]]
name = "set_config"
- # Pass by value
+ # Custom type
ignore = true
[[object.function]]
name = "new"
ignore = true
+ [[object.function]]
+ name = "get_config"
+ # Custom type
+ ignore = true
+
+ [[object.function]]
+ pattern = "config_.*"
+ # Custom type
+ ignore = true
+
+ [[object.function]]
+ name = "get_pipeline"
+ [object.function.return]
+ nullable = false
+
+ [[object.function]]
+ name = "set_audio_track"
+ [object.function.return]
+ bool_return_is_error = "Failed to set audio track"
+
+ [[object.function]]
+ name = "set_subtitle_track"
+ [object.function.return]
+ bool_return_is_error = "Failed to set subtitle track"
+
+ [[object.function]]
+ name = "set_video_track"
+ [object.function.return]
+ bool_return_is_error = "Failed to set video track"
+
+ [[object.function]]
+ name = "set_visualization"
+ [[object.function.parameter]]
+ name = "name"
+ nullable = true
+
+ [object.function.return]
+ bool_return_is_error = "Failed to set visualization"
+
[[object.signal]]
name = "buffering"
concurrency = "send"
@@ -129,6 +169,16 @@ trait = false
name = "warning"
concurrency = "send"
+
+[[object]]
+name = "GstPlayer.PlayerStreamInfo"
+status = "generate"
+
+ [[object.function]]
+ name = "get_stream_type"
+ [object.function.return]
+ nullable = false
+
[[object]]
name = "GstPlayer.PlayerAudioInfo"
status = "generate"
@@ -139,6 +189,16 @@ name = "GstPlayer.PlayerVideoInfo"
status = "generate"
trait = false
+ [[object.function]]
+ name = "get_framerate"
+ # Fraction
+ ignore = true
+
+ [[object.function]]
+ name = "get_pixel_aspect_ratio"
+ # Fraction
+ ignore = true
+
[[object]]
name = "GstPlayer.PlayerSubtitleInfo"
status = "generate"
@@ -149,6 +209,11 @@ name = "GstPlayer.PlayerMediaInfo"
status = "generate"
trait = false
+ [[object.function]]
+ name = "get_uri"
+ [object.function.return]
+ nullable = false
+
[[object]]
name = "GstPlayer.PlayerVideoOverlayVideoRenderer"
status = "generate"
diff --git a/gir-files/GstPlayer-1.0.gir b/gir-files/GstPlayer-1.0.gir
index 47f6631d6..ce95d355a 100644
--- a/gir-files/GstPlayer-1.0.gir
+++ b/gir-files/GstPlayer-1.0.gir
@@ -405,8 +405,8 @@ The caller should free it with g_object_unref()
Retrieve the current value of the indicated @type.
The current value of @type, Default: -1 "none"
-
+
@@ -733,8 +733,8 @@ value.
The new value for the @type
-
+
diff --git a/gstreamer-player/Cargo.toml b/gstreamer-player/Cargo.toml
index 8ccded38f..c0945f940 100644
--- a/gstreamer-player/Cargo.toml
+++ b/gstreamer-player/Cargo.toml
@@ -17,9 +17,11 @@ bitflags = "1.0"
libc = "0.2"
glib-sys = { git = "https://github.com/gtk-rs/sys" }
gobject-sys = { git = "https://github.com/gtk-rs/sys" }
+gstreamer-sys = { git = "https://github.com/sdroege/gstreamer-sys", features = ["v1_12"] }
gstreamer-player-sys = { git = "https://github.com/sdroege/gstreamer-sys", features = ["v1_12"] }
glib = { git = "https://github.com/gtk-rs/glib" }
gstreamer = { path = "../gstreamer", features = ["v1_12"] }
+gstreamer-video = { path = "../gstreamer-video", features = ["v1_12"] }
[build-dependencies.rustdoc-stripper]
version = "0.1"
diff --git a/gstreamer-player/src/auto/player.rs b/gstreamer-player/src/auto/player.rs
index e8be24415..93720c871 100644
--- a/gstreamer-player/src/auto/player.rs
+++ b/gstreamer-player/src/auto/player.rs
@@ -11,6 +11,7 @@ use PlayerSubtitleInfo;
use PlayerVideoInfo;
use PlayerVisualization;
use ffi;
+use glib;
use glib::StaticType;
use glib::Value;
use glib::signal::SignalHandlerId;
@@ -19,6 +20,7 @@ use glib::translate::*;
use glib_ffi;
use gobject_ffi;
use gst;
+use gst_video;
use libc;
use std::boxed::Box as Box_;
use std::mem;
@@ -34,12 +36,6 @@ glib_wrapper! {
}
impl Player {
- pub fn config_set_seek_accurate(&self, accurate: bool) {
- unsafe {
- ffi::gst_player_config_set_seek_accurate(self.to_glib_none().0, accurate.to_glib());
- }
- }
-
pub fn get_audio_video_offset(&self) -> i64 {
unsafe {
ffi::gst_player_get_audio_video_offset(self.to_glib_none().0)
@@ -52,12 +48,6 @@ impl Player {
}
}
- pub fn get_config(&self) -> Option {
- unsafe {
- from_glib_full(ffi::gst_player_get_config(self.to_glib_none().0))
- }
- }
-
pub fn get_current_audio_track(&self) -> Option {
unsafe {
from_glib_full(ffi::gst_player_get_current_audio_track(self.to_glib_none().0))
@@ -94,13 +84,17 @@ impl Player {
}
}
- //pub fn get_multiview_flags(&self) -> /*Ignored*/gst_video::VideoMultiviewFlags {
- // unsafe { TODO: call ffi::gst_player_get_multiview_flags() }
- //}
+ pub fn get_multiview_flags(&self) -> gst_video::VideoMultiviewFlags {
+ unsafe {
+ from_glib(ffi::gst_player_get_multiview_flags(self.to_glib_none().0))
+ }
+ }
- //pub fn get_multiview_mode(&self) -> /*Ignored*/gst_video::VideoMultiviewMode {
- // unsafe { TODO: call ffi::gst_player_get_multiview_mode() }
- //}
+ pub fn get_multiview_mode(&self) -> gst_video::VideoMultiviewFramePacking {
+ unsafe {
+ from_glib(ffi::gst_player_get_multiview_mode(self.to_glib_none().0))
+ }
+ }
pub fn get_mute(&self) -> bool {
unsafe {
@@ -108,7 +102,7 @@ impl Player {
}
}
- pub fn get_pipeline(&self) -> Option {
+ pub fn get_pipeline(&self) -> gst::Element {
unsafe {
from_glib_full(ffi::gst_player_get_pipeline(self.to_glib_none().0))
}
@@ -176,9 +170,9 @@ impl Player {
}
}
- pub fn set_audio_track(&self, stream_index: i32) -> bool {
+ pub fn set_audio_track(&self, stream_index: i32) -> Result<(), glib::error::BoolError> {
unsafe {
- from_glib(ffi::gst_player_set_audio_track(self.to_glib_none().0, stream_index))
+ glib::error::BoolError::from_glib(ffi::gst_player_set_audio_track(self.to_glib_none().0, stream_index), "Failed to set audio track")
}
}
@@ -200,13 +194,17 @@ impl Player {
}
}
- //pub fn set_multiview_flags(&self, flags: /*Ignored*/gst_video::VideoMultiviewFlags) {
- // unsafe { TODO: call ffi::gst_player_set_multiview_flags() }
- //}
+ pub fn set_multiview_flags(&self, flags: gst_video::VideoMultiviewFlags) {
+ unsafe {
+ ffi::gst_player_set_multiview_flags(self.to_glib_none().0, flags.to_glib());
+ }
+ }
- //pub fn set_multiview_mode(&self, mode: /*Ignored*/gst_video::VideoMultiviewMode) {
- // unsafe { TODO: call ffi::gst_player_set_multiview_mode() }
- //}
+ pub fn set_multiview_mode(&self, mode: gst_video::VideoMultiviewFramePacking) {
+ unsafe {
+ ffi::gst_player_set_multiview_mode(self.to_glib_none().0, mode.to_glib());
+ }
+ }
pub fn set_mute(&self, val: bool) {
unsafe {
@@ -220,9 +218,9 @@ impl Player {
}
}
- pub fn set_subtitle_track(&self, stream_index: i32) -> bool {
+ pub fn set_subtitle_track(&self, stream_index: i32) -> Result<(), glib::error::BoolError> {
unsafe {
- from_glib(ffi::gst_player_set_subtitle_track(self.to_glib_none().0, stream_index))
+ glib::error::BoolError::from_glib(ffi::gst_player_set_subtitle_track(self.to_glib_none().0, stream_index), "Failed to set subtitle track")
}
}
@@ -244,9 +242,9 @@ impl Player {
}
}
- pub fn set_video_track(&self, stream_index: i32) -> bool {
+ pub fn set_video_track(&self, stream_index: i32) -> Result<(), glib::error::BoolError> {
unsafe {
- from_glib(ffi::gst_player_set_video_track(self.to_glib_none().0, stream_index))
+ glib::error::BoolError::from_glib(ffi::gst_player_set_video_track(self.to_glib_none().0, stream_index), "Failed to set video track")
}
}
@@ -256,9 +254,11 @@ impl Player {
}
}
- pub fn set_visualization(&self, name: &str) -> bool {
+ pub fn set_visualization<'a, P: Into