~ubuntu-branches/ubuntu/utopic/libav/utopic

« back to all changes in this revision

Viewing changes to libavfilter/audio.c

  • Committer: Package Import Robot
  • Author(s): Reinhard Tartler
  • Date: 2012-12-21 15:32:13 UTC
  • mto: (1.2.18)
  • mto: This revision was merged to the branch mainline in revision 34.
  • Revision ID: package-import@ubuntu.com-20121221153213-fudzrugjzivtv0wp
Tags: upstream-9~beta3
ImportĀ upstreamĀ versionĀ 9~beta3

Show diffs side-by-side

added added

removed removed

Lines of Context:
16
16
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
17
 */
18
18
 
19
 
#include "libavutil/audioconvert.h"
 
19
#include "libavutil/channel_layout.h"
20
20
#include "libavutil/common.h"
21
21
 
22
22
#include "audio.h"
146
146
    av_freep(&samples);
147
147
    return NULL;
148
148
}
149
 
 
150
 
static int default_filter_samples(AVFilterLink *link,
151
 
                                  AVFilterBufferRef *samplesref)
152
 
{
153
 
    return ff_filter_samples(link->dst->outputs[0], samplesref);
154
 
}
155
 
 
156
 
int ff_filter_samples(AVFilterLink *link, AVFilterBufferRef *samplesref)
157
 
{
158
 
    int (*filter_samples)(AVFilterLink *, AVFilterBufferRef *);
159
 
    AVFilterPad *dst = link->dstpad;
160
 
    AVFilterBufferRef *buf_out;
161
 
 
162
 
    FF_DPRINTF_START(NULL, filter_samples); ff_dlog_link(NULL, link, 1);
163
 
 
164
 
    if (!(filter_samples = dst->filter_samples))
165
 
        filter_samples = default_filter_samples;
166
 
 
167
 
    /* prepare to copy the samples if the buffer has insufficient permissions */
168
 
    if ((dst->min_perms & samplesref->perms) != dst->min_perms ||
169
 
        dst->rej_perms & samplesref->perms) {
170
 
        av_log(link->dst, AV_LOG_DEBUG,
171
 
               "Copying audio data in avfilter (have perms %x, need %x, reject %x)\n",
172
 
               samplesref->perms, link->dstpad->min_perms, link->dstpad->rej_perms);
173
 
 
174
 
        buf_out = ff_default_get_audio_buffer(link, dst->min_perms,
175
 
                                              samplesref->audio->nb_samples);
176
 
        if (!buf_out) {
177
 
            avfilter_unref_buffer(samplesref);
178
 
            return AVERROR(ENOMEM);
179
 
        }
180
 
        buf_out->pts                = samplesref->pts;
181
 
        buf_out->audio->sample_rate = samplesref->audio->sample_rate;
182
 
 
183
 
        /* Copy actual data into new samples buffer */
184
 
        av_samples_copy(buf_out->extended_data, samplesref->extended_data,
185
 
                        0, 0, samplesref->audio->nb_samples,
186
 
                        av_get_channel_layout_nb_channels(link->channel_layout),
187
 
                        link->format);
188
 
 
189
 
        avfilter_unref_buffer(samplesref);
190
 
    } else
191
 
        buf_out = samplesref;
192
 
 
193
 
    return filter_samples(link, buf_out);
194
 
}
195