Merge pull request #12 from eaglesemanation/master
Add non-str pipeline support
This commit is contained in:
commit
65f9cc5a5d
3 changed files with 20 additions and 7 deletions
2
Cargo.lock
generated
2
Cargo.lock
generated
|
@ -1419,7 +1419,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "iced_video_player"
|
||||
version = "0.1.3"
|
||||
version = "0.3.0"
|
||||
dependencies = [
|
||||
"glib",
|
||||
"gstreamer",
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
//! use iced_video_player::{Video, VideoPlayer};
|
||||
//! use iced::{Sandbox, Element};
|
||||
//!
|
||||
//! # #![allow(clippy::needless_doctest_main)]
|
||||
//! fn main() {
|
||||
//! App::run(Default::default());
|
||||
//! }
|
||||
|
|
24
src/video.rs
24
src/video.rs
|
@ -1,8 +1,7 @@
|
|||
use crate::Error;
|
||||
use gst::prelude::*;
|
||||
use gst_base::prelude::*;
|
||||
use gstreamer as gst;
|
||||
use gstreamer_app as gst_app;
|
||||
use gstreamer_app::prelude::*;
|
||||
use gstreamer_base as gst_base;
|
||||
use iced::widget::image as img;
|
||||
use std::cell::RefCell;
|
||||
|
@ -118,16 +117,29 @@ impl Video {
|
|||
Self::from_pipeline(pipeline, None)
|
||||
}
|
||||
|
||||
/// Creates a new video based on GStreamer pipeline in a same format as used in gst-launch-1.0.
|
||||
/// Expects an appsink plugin to be present with name set to `iced_video` and caps to
|
||||
/// `video/x-raw,format=RGBA,pixel-aspect-ratio=1/1`
|
||||
pub fn from_pipeline<S: AsRef<str>>(pipeline: S, is_live: Option<bool>) -> Result<Self, Error> {
|
||||
static NEXT_ID: AtomicU64 = AtomicU64::new(0);
|
||||
let id = NEXT_ID.fetch_add(1, Ordering::SeqCst);
|
||||
|
||||
gst::init()?;
|
||||
|
||||
let pipeline = gst::parse::launch(pipeline.as_ref())?
|
||||
.downcast::<gst::Pipeline>()
|
||||
.map_err(|_| Error::Cast)?;
|
||||
|
||||
Self::from_gst_pipeline(pipeline, is_live)
|
||||
}
|
||||
|
||||
/// Creates a new video based on GStreamer pipeline.
|
||||
/// Expects an appsink plugin to be present with name set to `iced_video` and caps to
|
||||
/// `video/x-raw,format=RGBA,pixel-aspect-ratio=1/1`
|
||||
pub fn from_gst_pipeline(
|
||||
pipeline: gst::Pipeline,
|
||||
is_live: Option<bool>,
|
||||
) -> Result<Self, Error> {
|
||||
gst::init()?;
|
||||
static NEXT_ID: AtomicU64 = AtomicU64::new(0);
|
||||
let id = NEXT_ID.fetch_add(1, Ordering::SeqCst);
|
||||
|
||||
let mut live = false;
|
||||
|
||||
match is_live {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue