codec/parameters: make api more flexible and consistent
This commit is contained in:
parent
f1ce26a137
commit
36ac2513c1
@ -51,7 +51,7 @@ fn transcoder<P: AsRef<Path>>(ictx: &mut format::context::Input, octx: &mut form
|
|||||||
let codec = try!(ffmpeg::encoder::find(octx.format().codec(path, media::Type::Audio)).expect("failed to find encoder").audio());
|
let codec = try!(ffmpeg::encoder::find(octx.format().codec(path, media::Type::Audio)).expect("failed to find encoder").audio());
|
||||||
let global = octx.format().flags().contains(ffmpeg::format::flag::GLOBAL_HEADER);
|
let global = octx.format().flags().contains(ffmpeg::format::flag::GLOBAL_HEADER);
|
||||||
|
|
||||||
try!(decoder.set_parameters(input.codec_parameters()));
|
try!(decoder.set_parameters(input.parameters()));
|
||||||
|
|
||||||
let mut output = try!(octx.add_stream(codec));
|
let mut output = try!(octx.add_stream(codec));
|
||||||
let mut encoder = try!(output.codec().encoder().audio());
|
let mut encoder = try!(output.codec().encoder().audio());
|
||||||
@ -75,7 +75,7 @@ fn transcoder<P: AsRef<Path>>(ictx: &mut format::context::Input, octx: &mut form
|
|||||||
output.set_time_base((1, decoder.rate() as i32));
|
output.set_time_base((1, decoder.rate() as i32));
|
||||||
|
|
||||||
let encoder = try!(encoder.open_as(codec));
|
let encoder = try!(encoder.open_as(codec));
|
||||||
try!(output.set_codec_parameters_from(&encoder));
|
output.set_parameters(&***encoder);
|
||||||
|
|
||||||
let filter = try!(filter(filter_spec, &decoder, &encoder));
|
let filter = try!(filter(filter_spec, &decoder, &encoder));
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@ use std::rc::Rc;
|
|||||||
|
|
||||||
use ffi::*;
|
use ffi::*;
|
||||||
use media;
|
use media;
|
||||||
use super::Id;
|
use super::{Id, Context};
|
||||||
|
|
||||||
pub struct Parameters {
|
pub struct Parameters {
|
||||||
ptr: *mut AVCodecParameters,
|
ptr: *mut AVCodecParameters,
|
||||||
@ -69,3 +69,13 @@ impl Clone for Parameters {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<'a> From<&'a Context> for Parameters {
|
||||||
|
fn from(context: &'a Context) -> Parameters {
|
||||||
|
let mut parameters = Parameters::new();
|
||||||
|
unsafe {
|
||||||
|
avcodec_parameters_from_context(parameters.as_mut_ptr(), context.as_ptr());
|
||||||
|
}
|
||||||
|
parameters
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -27,7 +27,7 @@ impl<'a> Stream<'a> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn codec_parameters(&self) -> codec::Parameters {
|
pub fn parameters(&self) -> codec::Parameters {
|
||||||
unsafe {
|
unsafe {
|
||||||
codec::Parameters::wrap((*self.as_ptr()).codecpar, Some(self.context.destructor()))
|
codec::Parameters::wrap((*self.as_ptr()).codecpar, Some(self.context.destructor()))
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,7 @@ use std::ops::Deref;
|
|||||||
use std::mem;
|
use std::mem;
|
||||||
|
|
||||||
use ffi::*;
|
use ffi::*;
|
||||||
use ::{Rational, Error};
|
use ::{Rational, codec};
|
||||||
use super::Stream;
|
use super::Stream;
|
||||||
use format::context::common::Context;
|
use format::context::common::Context;
|
||||||
|
|
||||||
@ -41,12 +41,11 @@ impl<'a> StreamMut<'a> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn set_codec_parameters_from(&mut self, context: &::codec::Context) -> Result<(), Error> {
|
pub fn set_parameters<P: Into<codec::Parameters>>(&mut self, parameters: P) {
|
||||||
|
let parameters = parameters.into();
|
||||||
|
|
||||||
unsafe {
|
unsafe {
|
||||||
match avcodec_parameters_from_context((*self.as_mut_ptr()).codecpar, context.as_ptr()) {
|
avcodec_parameters_copy((*self.as_mut_ptr()).codecpar, parameters.as_ptr());
|
||||||
e if e < 0 => Err(Error::from(e)),
|
|
||||||
_ => Ok(()),
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user