[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