fix: update example
This commit is contained in:
parent
f8a085af09
commit
d252c1cf28
@ -1,6 +1,5 @@
|
|||||||
use ffmpeg_rs_raw::{Decoder, Demuxer, DemuxerInfo, Filter};
|
use ffmpeg_rs_raw::{get_frame_from_hw, Decoder, Demuxer, DemuxerInfo, Scaler};
|
||||||
use ffmpeg_sys_the_third::AVHWDeviceType::AV_HWDEVICE_TYPE_CUDA;
|
use ffmpeg_sys_the_third::{av_frame_free, av_packet_free, AVMediaType, AVPixelFormat};
|
||||||
use ffmpeg_sys_the_third::{av_frame_free, av_packet_free, AVMediaType};
|
|
||||||
use log::{error, info};
|
use log::{error, info};
|
||||||
use std::env::args;
|
use std::env::args;
|
||||||
use std::fs::File;
|
use std::fs::File;
|
||||||
@ -42,8 +41,8 @@ fn scan_input(mut demuxer: Demuxer) {
|
|||||||
|
|
||||||
unsafe fn decode_input(demuxer: Demuxer, info: DemuxerInfo) {
|
unsafe fn decode_input(demuxer: Demuxer, info: DemuxerInfo) {
|
||||||
let mut decoder = Decoder::new();
|
let mut decoder = Decoder::new();
|
||||||
//decoder.enable_hw_decoder_any();
|
decoder.enable_hw_decoder_any();
|
||||||
decoder.enable_hw_decoder(AV_HWDEVICE_TYPE_CUDA);
|
|
||||||
for ref stream in info.channels {
|
for ref stream in info.channels {
|
||||||
decoder
|
decoder
|
||||||
.setup_decoder(stream, None)
|
.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) {
|
unsafe fn loop_decoder(mut demuxer: Demuxer, mut decoder: Decoder) {
|
||||||
let mut filter =
|
let mut scale = Scaler::new();
|
||||||
Filter::parse(&format!("scale_cuda=w={}:h={}", -2, 1080)).expect("filter add failed");
|
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
let (mut pkt, stream) = demuxer.get_packet().expect("demuxer failed");
|
let (mut pkt, stream) = demuxer.get_packet().expect("demuxer failed");
|
||||||
if pkt.is_null() {
|
if pkt.is_null() {
|
||||||
@ -74,7 +71,10 @@ unsafe fn loop_decoder(mut demuxer: Demuxer, mut decoder: Decoder) {
|
|||||||
for (mut frame, _stream) in frames {
|
for (mut frame, _stream) in frames {
|
||||||
// do nothing but decode entire stream
|
// do nothing but decode entire stream
|
||||||
if media_type == AVMediaType::AVMEDIA_TYPE_VIDEO {
|
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 new_frame);
|
||||||
}
|
}
|
||||||
av_frame_free(&mut frame);
|
av_frame_free(&mut frame);
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
use crate::{options_to_dict, return_ffmpeg_error, rstr, StreamInfoChannel};
|
use crate::{options_to_dict, return_ffmpeg_error, rstr, StreamInfoChannel};
|
||||||
use std::collections::{HashMap, HashSet};
|
use std::collections::{HashMap, HashSet};
|
||||||
use std::ffi::CStr;
|
|
||||||
use std::fmt::{Display, Formatter};
|
use std::fmt::{Display, Formatter};
|
||||||
use std::ptr;
|
use std::ptr;
|
||||||
|
|
||||||
|
@ -1,13 +1,12 @@
|
|||||||
use crate::{cstr, return_ffmpeg_error, rstr, set_opts};
|
use crate::{cstr, return_ffmpeg_error, rstr, set_opts};
|
||||||
use anyhow::Error;
|
use anyhow::Error;
|
||||||
use ffmpeg_sys_the_third::{
|
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_graph_config, avfilter_graph_create_filter, avfilter_graph_dump, avfilter_graph_parse,
|
||||||
avfilter_inout_alloc, AVFilterContext, AVFilterGraph, AVFrame,
|
avfilter_inout_alloc, AVFilterContext, AVFilterGraph, AVFrame,
|
||||||
};
|
};
|
||||||
use log::debug;
|
use log::debug;
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use std::ffi::CStr;
|
|
||||||
use std::ptr;
|
use std::ptr;
|
||||||
|
|
||||||
pub struct Filter {
|
pub struct Filter {
|
||||||
|
@ -5,7 +5,6 @@ use ffmpeg_sys_the_third::{
|
|||||||
AV_OPT_SEARCH_CHILDREN,
|
AV_OPT_SEARCH_CHILDREN,
|
||||||
};
|
};
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use std::ffi::CStr;
|
|
||||||
use std::ptr;
|
use std::ptr;
|
||||||
|
|
||||||
mod decode;
|
mod decode;
|
||||||
|
@ -2,7 +2,6 @@ use crate::{format_time, rstr};
|
|||||||
use ffmpeg_sys_the_third::{
|
use ffmpeg_sys_the_third::{
|
||||||
av_get_pix_fmt_name, av_get_sample_fmt_name, avcodec_get_name, AVMediaType, AVStream,
|
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::fmt::{Display, Formatter};
|
||||||
use std::intrinsics::transmute;
|
use std::intrinsics::transmute;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user