From d252c1cf28196835e9378e372958b474f5835b30 Mon Sep 17 00:00:00 2001 From: kieran Date: Wed, 6 Nov 2024 14:27:14 +0000 Subject: [PATCH] fix: update example --- examples/main.rs | 18 +++++++++--------- src/decode.rs | 1 - src/filter.rs | 3 +-- src/lib.rs | 1 - src/stream_info.rs | 1 - 5 files changed, 10 insertions(+), 14 deletions(-) diff --git a/examples/main.rs b/examples/main.rs index 2938376..701d739 100644 --- a/examples/main.rs +++ b/examples/main.rs @@ -1,6 +1,5 @@ -use ffmpeg_rs_raw::{Decoder, Demuxer, DemuxerInfo, Filter}; -use ffmpeg_sys_the_third::AVHWDeviceType::AV_HWDEVICE_TYPE_CUDA; -use ffmpeg_sys_the_third::{av_frame_free, av_packet_free, AVMediaType}; +use ffmpeg_rs_raw::{get_frame_from_hw, Decoder, Demuxer, DemuxerInfo, Scaler}; +use ffmpeg_sys_the_third::{av_frame_free, av_packet_free, AVMediaType, AVPixelFormat}; use log::{error, info}; use std::env::args; use std::fs::File; @@ -42,8 +41,8 @@ fn scan_input(mut demuxer: Demuxer) { unsafe fn decode_input(demuxer: Demuxer, info: DemuxerInfo) { let mut decoder = Decoder::new(); - //decoder.enable_hw_decoder_any(); - decoder.enable_hw_decoder(AV_HWDEVICE_TYPE_CUDA); + decoder.enable_hw_decoder_any(); + for ref stream in info.channels { decoder .setup_decoder(stream, None) @@ -54,9 +53,7 @@ unsafe fn decode_input(demuxer: Demuxer, info: DemuxerInfo) { } unsafe fn loop_decoder(mut demuxer: Demuxer, mut decoder: Decoder) { - let mut filter = - Filter::parse(&format!("scale_cuda=w={}:h={}", -2, 1080)).expect("filter add failed"); - + let mut scale = Scaler::new(); loop { let (mut pkt, stream) = demuxer.get_packet().expect("demuxer failed"); if pkt.is_null() { @@ -74,7 +71,10 @@ unsafe fn loop_decoder(mut demuxer: Demuxer, mut decoder: Decoder) { for (mut frame, _stream) in frames { // do nothing but decode entire stream if media_type == AVMediaType::AVMEDIA_TYPE_VIDEO { - let mut new_frame = filter.process_frame(frame).expect("scale failed"); + frame = get_frame_from_hw(frame).expect("get frame failed"); + let mut new_frame = scale + .process_frame(frame, 512, 512, AVPixelFormat::AV_PIX_FMT_RGBA) + .expect("scale failed"); av_frame_free(&mut new_frame); } av_frame_free(&mut frame); diff --git a/src/decode.rs b/src/decode.rs index e549e76..42fb6dc 100644 --- a/src/decode.rs +++ b/src/decode.rs @@ -1,6 +1,5 @@ use crate::{options_to_dict, return_ffmpeg_error, rstr, StreamInfoChannel}; use std::collections::{HashMap, HashSet}; -use std::ffi::CStr; use std::fmt::{Display, Formatter}; use std::ptr; diff --git a/src/filter.rs b/src/filter.rs index cc76ad9..021e342 100644 --- a/src/filter.rs +++ b/src/filter.rs @@ -1,13 +1,12 @@ use crate::{cstr, return_ffmpeg_error, rstr, set_opts}; use anyhow::Error; use ffmpeg_sys_the_third::{ - av_free, av_strdup, avfilter_get_by_name, avfilter_graph_alloc, avfilter_graph_alloc_filter, + av_strdup, avfilter_get_by_name, avfilter_graph_alloc, avfilter_graph_alloc_filter, avfilter_graph_config, avfilter_graph_create_filter, avfilter_graph_dump, avfilter_graph_parse, avfilter_inout_alloc, AVFilterContext, AVFilterGraph, AVFrame, }; use log::debug; use std::collections::HashMap; -use std::ffi::CStr; use std::ptr; pub struct Filter { diff --git a/src/lib.rs b/src/lib.rs index e1f9f8c..ee05b3d 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -5,7 +5,6 @@ use ffmpeg_sys_the_third::{ AV_OPT_SEARCH_CHILDREN, }; use std::collections::HashMap; -use std::ffi::CStr; use std::ptr; mod decode; diff --git a/src/stream_info.rs b/src/stream_info.rs index b70b088..d00319f 100644 --- a/src/stream_info.rs +++ b/src/stream_info.rs @@ -2,7 +2,6 @@ use crate::{format_time, rstr}; use ffmpeg_sys_the_third::{ av_get_pix_fmt_name, av_get_sample_fmt_name, avcodec_get_name, AVMediaType, AVStream, }; -use std::ffi::CStr; use std::fmt::{Display, Formatter}; use std::intrinsics::transmute;