Skip to content

Commit 0bbd9e9

Browse files
author
admin
committed
refactor code:
trait `Target` at `src/util/option.rs` be instead of `AsMutPtr`, `AsPtr`
1 parent 1815bda commit 0bbd9e9

File tree

4 files changed

+42
-30
lines changed

4 files changed

+42
-30
lines changed

src/codec/context.rs

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ use super::encoder::Encoder;
77
use super::{threading, Compliance, Debug, Flags, Id};
88
use crate::ffi::*;
99
use crate::media;
10-
use crate::AsPtr;
10+
use crate::option;
11+
use crate::{AsMutPtr, AsPtr};
1112
use crate::{Codec, Error};
1213
use libc::c_int;
1314

@@ -167,3 +168,18 @@ impl Clone for Context {
167168
}
168169
}
169170
}
171+
172+
/// `AVCodecContext` in `Context` is the target of `option` operations.
173+
impl AsPtr<AVCodecContext> for Context {
174+
fn as_ptr(&self) -> *const AVCodecContext {
175+
self.ptr as *const _
176+
}
177+
}
178+
179+
impl AsMutPtr<AVCodecContext> for Context {
180+
fn as_mut_ptr(&mut self) -> *mut AVCodecContext {
181+
self.ptr as *mut _
182+
}
183+
}
184+
185+
impl option::Settable<AVCodecContext> for Context {}

src/filter/context/context.rs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@ use std::marker::PhantomData;
22

33
use super::{Sink, Source};
44
use crate::ffi::*;
5-
use crate::{format, option};
6-
use libc::c_void;
5+
use crate::{format, option, AsMutPtr, AsPtr};
76

87
#[cfg(feature = "ffmpeg_5_1")]
98
use crate::ChannelLayout;
@@ -66,14 +65,16 @@ impl<'a> Context<'a> {
6665
}
6766
}
6867

69-
unsafe impl<'a> option::Target for Context<'a> {
70-
fn as_ptr(&self) -> *const c_void {
68+
impl<'a> AsPtr<AVFilterContext> for Context<'a> {
69+
fn as_ptr(&self) -> *const AVFilterContext {
7170
self.ptr as *const _
7271
}
72+
}
7373

74-
fn as_mut_ptr(&mut self) -> *mut c_void {
74+
impl<'a> AsMutPtr<AVFilterContext> for Context<'a> {
75+
fn as_mut_ptr(&mut self) -> *mut AVFilterContext {
7576
self.ptr as *mut _
7677
}
7778
}
7879

79-
impl<'a> option::Settable for Context<'a> {}
80+
impl<'a> option::Settable<AVFilterContext> for Context<'a> {}

src/util/option/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
mod traits;
2-
pub use self::traits::{Gettable, Iterable, Settable, Target};
2+
pub use self::traits::{Gettable, Iterable, Settable};
33

44
use crate::ffi::*;
55
use libc::c_uint;

src/util/option/traits.rs

Lines changed: 17 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ use std::mem;
55

66
use crate::ffi::*;
77
use crate::util::format;
8-
use crate::{Error, Rational};
9-
use libc::{c_int, c_void};
8+
use crate::{AsMutPtr, AsPtr, Error, Rational};
9+
use libc::c_int;
1010

1111
#[cfg(not(feature = "ffmpeg_7_0"))]
1212
use crate::ChannelLayoutMask;
@@ -20,21 +20,16 @@ macro_rules! check {
2020
};
2121
}
2222

23-
pub unsafe trait Target {
24-
fn as_ptr(&self) -> *const c_void;
25-
fn as_mut_ptr(&mut self) -> *mut c_void;
26-
}
27-
28-
pub trait Settable: Target {
29-
fn set<T: 'static>(&mut self, name: &str, value: &T) -> Result<(), Error> {
23+
pub trait Settable<T>: AsPtr<T> + AsMutPtr<T> {
24+
fn set<V: 'static>(&mut self, name: &str, value: &V) -> Result<(), Error> {
3025
unsafe {
3126
let name = CString::new(name).unwrap();
3227

3328
check!(av_opt_set_bin(
34-
self.as_mut_ptr(),
29+
self.as_mut_ptr() as *mut _,
3530
name.as_ptr(),
3631
value as *const _ as *const _,
37-
mem::size_of::<T>() as c_int,
32+
mem::size_of::<V>() as c_int,
3833
AV_OPT_SEARCH_CHILDREN
3934
))
4035
}
@@ -46,7 +41,7 @@ pub trait Settable: Target {
4641
let value = CString::new(value).unwrap();
4742

4843
check!(av_opt_set(
49-
self.as_mut_ptr(),
44+
self.as_mut_ptr() as *mut _,
5045
name.as_ptr(),
5146
value.as_ptr(),
5247
AV_OPT_SEARCH_CHILDREN
@@ -59,7 +54,7 @@ pub trait Settable: Target {
5954
let name = CString::new(name).unwrap();
6055

6156
check!(av_opt_set_int(
62-
self.as_mut_ptr(),
57+
self.as_mut_ptr() as *mut _,
6358
name.as_ptr(),
6459
value,
6560
AV_OPT_SEARCH_CHILDREN
@@ -72,20 +67,20 @@ pub trait Settable: Target {
7267
let name = CString::new(name).unwrap();
7368

7469
check!(av_opt_set_double(
75-
self.as_mut_ptr(),
70+
self.as_mut_ptr() as *mut _,
7671
name.as_ptr(),
7772
value,
7873
AV_OPT_SEARCH_CHILDREN
7974
))
8075
}
8176
}
8277

83-
fn set_rational<T: Into<Rational>>(&mut self, name: &str, value: T) -> Result<(), Error> {
78+
fn set_rational<V: Into<Rational>>(&mut self, name: &str, value: V) -> Result<(), Error> {
8479
unsafe {
8580
let name = CString::new(name).unwrap();
8681

8782
check!(av_opt_set_q(
88-
self.as_mut_ptr(),
83+
self.as_mut_ptr() as *mut _,
8984
name.as_ptr(),
9085
value.into().into(),
9186
AV_OPT_SEARCH_CHILDREN
@@ -98,7 +93,7 @@ pub trait Settable: Target {
9893
let name = CString::new(name).unwrap();
9994

10095
check!(av_opt_set_image_size(
101-
self.as_mut_ptr(),
96+
self.as_mut_ptr() as *mut _,
10297
name.as_ptr(),
10398
w as c_int,
10499
h as c_int,
@@ -112,7 +107,7 @@ pub trait Settable: Target {
112107
let name = CString::new(name).unwrap();
113108

114109
check!(av_opt_set_pixel_fmt(
115-
self.as_mut_ptr(),
110+
self.as_mut_ptr() as *mut _,
116111
name.as_ptr(),
117112
format.into(),
118113
AV_OPT_SEARCH_CHILDREN
@@ -125,7 +120,7 @@ pub trait Settable: Target {
125120
let name = CString::new(name).unwrap();
126121

127122
check!(av_opt_set_sample_fmt(
128-
self.as_mut_ptr(),
123+
self.as_mut_ptr() as *mut _,
129124
name.as_ptr(),
130125
format.into(),
131126
AV_OPT_SEARCH_CHILDREN
@@ -139,7 +134,7 @@ pub trait Settable: Target {
139134
let name = CString::new(name).unwrap();
140135

141136
check!(av_opt_set_channel_layout(
142-
self.as_mut_ptr(),
137+
self.as_mut_ptr() as *mut _,
143138
name.as_ptr(),
144139
layout.bits() as i64,
145140
AV_OPT_SEARCH_CHILDREN
@@ -148,6 +143,6 @@ pub trait Settable: Target {
148143
}
149144
}
150145

151-
pub trait Gettable: Target {}
146+
pub trait Gettable<T>: AsPtr<T> + AsMutPtr<T> {}
152147

153-
pub trait Iterable: Target {}
148+
pub trait Iterable<T>: AsPtr<T> + AsMutPtr<T> {}

0 commit comments

Comments
 (0)