[FFmpeg-devel] [PATCH] ffmpeg: add -map_channel option.

Michael Niedermayer michaelni at gmx.at
Mon Oct 24 16:19:10 CEST 2011


On Mon, Oct 24, 2011 at 02:05:55PM +0200, Clément Bœsch wrote:
> On Wed, Oct 19, 2011 at 11:42:15PM +0200, Michael Niedermayer wrote:
> > [...]
> > > diff --git a/libswresample/audioconvert.h b/libswresample/audioconvert.h
> > > index e5fd4df..ca98d54 100644
> > > --- a/libswresample/audioconvert.h
> > > +++ b/libswresample/audioconvert.h
> > > @@ -42,11 +42,14 @@ typedef struct AVAudioConvert AVAudioConvert;
> > >   * @param in_fmt Input sample format
> > >   * @param channels Number of channels
> > >   * @param flags See AV_CPU_FLAG_xx
> > > + * @param ch_map list of the channels id to pick from the source stream, NULL
> > > + *               if all channels must be selected
> > >   * @return NULL on error
> > >   */
> > >  AVAudioConvert *swr_audio_convert_alloc(enum AVSampleFormat out_fmt,
> > >                                          enum AVSampleFormat in_fmt,
> > > -                                        int channels, int flags);
> > > +                                        int channels, const int *ch_map,
> > > +                                        int flags);
> > >  
> > >  /**
> > >   * Free audio sample format converter context.
> > > diff --git a/libswresample/swresample.c b/libswresample/swresample.c
> > > index bb5b523..67b9831 100644
> > > --- a/libswresample/swresample.c
> > > +++ b/libswresample/swresample.c
> > > @@ -75,7 +75,7 @@ SwrContext *swr_alloc(void){
> > >  
> > >  SwrContext *swr_alloc2(struct SwrContext *s, int64_t out_ch_layout, enum AVSampleFormat out_sample_fmt, int out_sample_rate,
> > >                         int64_t  in_ch_layout, enum AVSampleFormat  in_sample_fmt, int  in_sample_rate,
> > > -                       int log_offset, void *log_ctx){
> > > +                       const int *channel_map, int log_offset, void *log_ctx){
> > >      if(!s) s= swr_alloc();
> > >      if(!s) return NULL;
> > >  
> > > @@ -89,6 +89,7 @@ SwrContext *swr_alloc2(struct SwrContext *s, int64_t out_ch_layout, enum AVSampl
> > >      av_set_int(s, "isf", in_sample_fmt);
> > >      av_set_int(s, "isr", in_sample_rate);
> > >  
> > > +    s->channel_map = channel_map;
> > >      s-> in.ch_count= av_get_channel_layout_nb_channels(s-> in_ch_layout);
> > >      s->out.ch_count= av_get_channel_layout_nb_channels(s->out_ch_layout);
> > >      s->int_sample_fmt = AV_SAMPLE_FMT_S16;
> > 
> > > @@ -176,7 +177,7 @@ int swr_init(SwrContext *s){
> > >      if(!s->out_ch_layout)
> > >          s->out_ch_layout= av_get_default_channel_layout(s->out.ch_count);
> > >  
> > > -    s->rematrix= s->out_ch_layout  !=s->in_ch_layout;
> > > +    s->rematrix= s->out_ch_layout != s->in_ch_layout && s->channel_map < 0;
> > 
> > pointer < 0 ?
> > 
> 
> This should be !s->channel_map of course (s->channel_map was an int in the
> first version of the patch).
> 
> > also shouldnt rematrix be independant of the existence of a channel_map
> > 
> 
> Well, AFAIU, the rematrix is meant to automatically set the audio gain
> levels for each channel; the channel mapping is "incompatible" with this,
> it's all about reordering, or maybe with another phrasing: ppl won't
> expect the levels to change (the number of output channels being fixed by
> the number of -map_channel and not a specific -ac option)

if your inputs represents 5.1 and your output represenst 7.0 you need
the rematrix code


> 
> Also, I was thinking of adding an external rematrix flag for libswr to
> allow disabling the gain level changes when the number of channels is
> changed, would it make any sense? Another solution might be to finish the
> MPlayer's af_pan port (which I'll try to send soon™©®), allowing arbitrary
> gain levels for each channels.

the "gain levels" can already be adjusted in libswr through clev and
slev. Adding support for finer grained control is trivial and welcome

[...]

-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Freedom in capitalist society always remains about the same as it was in
ancient Greek republics: Freedom for slave owners. -- Vladimir Lenin
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: Digital signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20111024/7688eb10/attachment.asc>


More information about the ffmpeg-devel mailing list