From 4df56b516fa538519a05c9fa9b2df5c9b4e72d79 Mon Sep 17 00:00:00 2001 From: Tae-il Lim Date: Thu, 1 Dec 2016 15:30:31 +0900 Subject: [PATCH] codec/parameters: impl `AsRef` for all `codec::Context` wrappers --- examples/transcode-audio.rs | 2 +- src/codec/decoder/audio.rs | 7 +++++++ src/codec/decoder/decoder.rs | 6 ++++++ src/codec/decoder/opened.rs | 8 +++++++- src/codec/decoder/subtitle.rs | 7 +++++++ src/codec/decoder/video.rs | 6 ++++++ src/codec/encoder/audio.rs | 14 +++++++++++++- src/codec/encoder/encoder.rs | 6 ++++++ src/codec/encoder/subtitle.rs | 14 +++++++++++++- src/codec/encoder/video.rs | 14 +++++++++++++- src/codec/parameters.rs | 5 +++-- 11 files changed, 82 insertions(+), 7 deletions(-) diff --git a/examples/transcode-audio.rs b/examples/transcode-audio.rs index 8d15266..a575a98 100644 --- a/examples/transcode-audio.rs +++ b/examples/transcode-audio.rs @@ -75,7 +75,7 @@ fn transcoder>(ictx: &mut format::context::Input, octx: &mut form output.set_time_base((1, decoder.rate() as i32)); let encoder = try!(encoder.open_as(codec)); - output.set_parameters(&***encoder); + output.set_parameters(&encoder); let filter = try!(filter(filter_spec, &decoder, &encoder)); diff --git a/src/codec/decoder/audio.rs b/src/codec/decoder/audio.rs index 6a1c04d..bbad37d 100644 --- a/src/codec/decoder/audio.rs +++ b/src/codec/decoder/audio.rs @@ -7,6 +7,7 @@ use super::Opened; use ::{packet, Error, AudioService, ChannelLayout}; use ::frame; use ::util::format; +use ::codec::Context; pub struct Audio(pub Opened); @@ -117,3 +118,9 @@ impl DerefMut for Audio { &mut self.0 } } + +impl AsRef for Audio { + fn as_ref(&self) -> &Context { + &self + } +} diff --git a/src/codec/decoder/decoder.rs b/src/codec/decoder/decoder.rs index fd2a257..4048c88 100644 --- a/src/codec/decoder/decoder.rs +++ b/src/codec/decoder/decoder.rs @@ -128,3 +128,9 @@ impl DerefMut for Decoder { &mut self.0 } } + +impl AsRef for Decoder { + fn as_ref(&self) -> &Context { + &self + } +} diff --git a/src/codec/decoder/opened.rs b/src/codec/decoder/opened.rs index ebc5c55..cedb176 100644 --- a/src/codec/decoder/opened.rs +++ b/src/codec/decoder/opened.rs @@ -2,7 +2,7 @@ use std::ops::{Deref, DerefMut}; use ffi::*; use super::{Video, Audio, Subtitle, Decoder}; -use ::codec::Profile; +use ::codec::{Profile, Context}; use ::{Error, Rational}; use ::media; @@ -95,3 +95,9 @@ impl DerefMut for Opened { &mut self.0 } } + +impl AsRef for Opened { + fn as_ref(&self) -> &Context { + &self + } +} diff --git a/src/codec/decoder/subtitle.rs b/src/codec/decoder/subtitle.rs index 6052b26..baea82e 100644 --- a/src/codec/decoder/subtitle.rs +++ b/src/codec/decoder/subtitle.rs @@ -5,6 +5,7 @@ use ffi::*; use super::Opened; use ::{packet, Error}; +use ::codec::Context; pub struct Subtitle(pub Opened); @@ -34,3 +35,9 @@ impl DerefMut for Subtitle { &mut self.0 } } + +impl AsRef for Subtitle { + fn as_ref(&self) -> &Context { + &self + } +} diff --git a/src/codec/decoder/video.rs b/src/codec/decoder/video.rs index f24b008..61f924f 100644 --- a/src/codec/decoder/video.rs +++ b/src/codec/decoder/video.rs @@ -9,6 +9,7 @@ use ::frame; use ::util::format; use ::util::chroma; use ::color; +use ::codec::Context; pub struct Video(pub Opened); @@ -150,3 +151,8 @@ impl DerefMut for Video { } } +impl AsRef for Video { + fn as_ref(&self) -> &Context { + &self + } +} diff --git a/src/codec/encoder/audio.rs b/src/codec/encoder/audio.rs index 41f9190..8b06427 100644 --- a/src/codec/encoder/audio.rs +++ b/src/codec/encoder/audio.rs @@ -7,7 +7,7 @@ use ffi::*; use super::Encoder as Super; use ::{packet, Error, Dictionary, ChannelLayout, frame}; use ::util::format; -use codec::traits; +use codec::{traits, Context}; pub struct Audio(pub Super); @@ -131,6 +131,12 @@ impl DerefMut for Audio { } } +impl AsRef for Audio { + fn as_ref(&self) -> &Context { + &self + } +} + pub struct Encoder(pub Audio); impl Encoder { @@ -174,3 +180,9 @@ impl Deref for Encoder { &self.0 } } + +impl AsRef for Encoder { + fn as_ref(&self) -> &Context { + &self + } +} diff --git a/src/codec/encoder/encoder.rs b/src/codec/encoder/encoder.rs index bdeb439..de60457 100644 --- a/src/codec/encoder/encoder.rs +++ b/src/codec/encoder/encoder.rs @@ -135,3 +135,9 @@ impl DerefMut for Encoder { &mut self.0 } } + +impl AsRef for Encoder { + fn as_ref(&self) -> &Context { + &self + } +} diff --git a/src/codec/encoder/subtitle.rs b/src/codec/encoder/subtitle.rs index 8a3fbaf..030bd28 100644 --- a/src/codec/encoder/subtitle.rs +++ b/src/codec/encoder/subtitle.rs @@ -6,7 +6,7 @@ use ffi::*; use super::Encoder as Super; use ::{Error, Dictionary}; -use codec::traits; +use codec::{traits, Context}; pub struct Subtitle(pub Super); @@ -68,6 +68,12 @@ impl DerefMut for Subtitle { } } +impl AsRef for Subtitle { + fn as_ref(&self) -> &Context { + &self + } +} + pub struct Encoder(pub Subtitle); impl Encoder { @@ -88,3 +94,9 @@ impl Deref for Encoder { &self.0 } } + +impl AsRef for Encoder { + fn as_ref(&self) -> &Context { + &self + } +} diff --git a/src/codec/encoder/video.rs b/src/codec/encoder/video.rs index 691291c..58b4fb8 100644 --- a/src/codec/encoder/video.rs +++ b/src/codec/encoder/video.rs @@ -7,7 +7,7 @@ use ffi::*; use super::Encoder as Super; use super::{MotionEstimation, Prediction, Comparison, Decision}; use ::{packet, Error, Rational, Dictionary, frame, format}; -use codec::traits; +use codec::{traits, Context}; pub struct Video(pub Super); @@ -382,6 +382,12 @@ impl DerefMut for Video { } } +impl AsRef for Video { + fn as_ref(&self) -> &Context { + &self + } +} + pub struct Encoder(pub Video); impl Encoder { @@ -436,3 +442,9 @@ impl DerefMut for Encoder { &mut self.0 } } + +impl AsRef for Encoder { + fn as_ref(&self) -> &Context { + &self + } +} diff --git a/src/codec/parameters.rs b/src/codec/parameters.rs index eef1c25..d79bcc9 100644 --- a/src/codec/parameters.rs +++ b/src/codec/parameters.rs @@ -70,9 +70,10 @@ impl Clone for Parameters { } } -impl<'a> From<&'a Context> for Parameters { - fn from(context: &'a Context) -> Parameters { +impl> From for Parameters { + fn from(context: C) -> Parameters { let mut parameters = Parameters::new(); + let context = context.as_ref(); unsafe { avcodec_parameters_from_context(parameters.as_mut_ptr(), context.as_ptr()); }