History

lavfi: prefer nb_samples over size in AVFilterBufferRefAudioProps

Remove AVFilterBufferRefAudioProps.size, and use nb_samples in avfilter_get_audio_buffer() and avfilter_default_get_audio_buffer() in place of size. This is required as the size in the audio buffer may be aligned, so it may not contain a well defined number of samples.

Stefano Sabatini committed 15 years ago

Commit 95a02421 parent 0bc2cca4 files · +24 −20Browse files

Unified · Split

4 files
  1. doc/APIchanges +5 −0
  2. libavfilter/avfilter.c +8 −7
  3. libavfilter/avfilter.h +6 −7
  4. libavfilter/defaults.c +5 −6
doc/APIchanges+5−0
@@ -13,6 +13,11 @@ libavutil: 2011-04-18 · 12 unmodified lines
1313
1414 API changes, most recent first:
1515
16+2011-06-06 - xxxxxx - lavfi 2.14.0 - AVFilterBufferRefAudioProps
17+ Remove AVFilterBufferRefAudioProps.size, and use nb_samples in
18+ avfilter_get_audio_buffer() and avfilter_default_get_audio_buffer() in
19+ place of size.
20+
1621 2011-06-06 - xxxxxx - lavu 51.6.0 - av_samples_alloc()
1722 Switch nb_channels and nb_samples parameters order in
1823 av_samples_alloc().
libavfilter/avfilter.c+8−7
@@ -305,10 +305,9 @@ static void ff_dlog_ref(void *ctx, AVFilterBufferRef *ref, int end) · 304 unmodified lines
305305 av_get_picture_type_char(ref->video->pict_type));
306306 }
307307 if (ref->audio) {
308− av_dlog(ctx, " cl:%"PRId64"d sn:%d s:%d sr:%d p:%d",
308+ av_dlog(ctx, " cl:%"PRId64"d n:%d r:%d p:%d",
309309 ref->audio->channel_layout,
310310 ref->audio->nb_samples,
311− ref->audio->size,
312311 ref->audio->sample_rate,
313312 ref->audio->planar);
314313 }
@@ -405,16 +404,16 @@ fail: · 90 unmodified lines
405404 }
406405
407406 AVFilterBufferRef *avfilter_get_audio_buffer(AVFilterLink *link, int perms,
408− enum AVSampleFormat sample_fmt, int size,
407+ enum AVSampleFormat sample_fmt, int nb_samples,
409408 int64_t channel_layout, int planar)
410409 {
411410 AVFilterBufferRef *ret = NULL;
412411
413412 if (link->dstpad->get_audio_buffer)
414− ret = link->dstpad->get_audio_buffer(link, perms, sample_fmt, size, channel_layout, planar);
413+ ret = link->dstpad->get_audio_buffer(link, perms, sample_fmt, nb_samples, channel_layout, planar);
415414
416415 if (!ret)
417− ret = avfilter_default_get_audio_buffer(link, perms, sample_fmt, size, channel_layout, planar);
416+ ret = avfilter_default_get_audio_buffer(link, perms, sample_fmt, nb_samples, channel_layout, planar);
418417
419418 if (ret)
420419 ret->type = AVMEDIA_TYPE_AUDIO;
@@ -545,6 +544,7 @@ void avfilter_filter_samples(AVFilterLink *link, AVFilterBufferRef *samplesref) · 124 unmodified lines
545544 {
546545 void (*filter_samples)(AVFilterLink *, AVFilterBufferRef *);
547546 AVFilterPad *dst = link->dstpad;
547+ int i;
548548
549549 FF_DPRINTF_START(NULL, filter_samples); ff_dlog_link(NULL, link, 1);
550550
@@ -561,14 +561,15 @@ void avfilter_filter_samples(AVFilterLink *link, AVFilterBufferRef *samplesref) · 10 unmodified lines
561561
562562 link->cur_buf = avfilter_default_get_audio_buffer(link, dst->min_perms,
563563 samplesref->format,
564− samplesref->audio->size,
564+ samplesref->audio->nb_samples,
565565 samplesref->audio->channel_layout,
566566 samplesref->audio->planar);
567567 link->cur_buf->pts = samplesref->pts;
568568 link->cur_buf->audio->sample_rate = samplesref->audio->sample_rate;
569569
570570 /* Copy actual data into new samples buffer */
571− memcpy(link->cur_buf->data[0], samplesref->data[0], samplesref->audio->size);
571+ for (i = 0; samplesref->data[i]; i++)
572+ memcpy(link->cur_buf->data[i], samplesref->data[i], samplesref->linesize[0]);
572573
573574 avfilter_unref_buffer(samplesref);
574575 } else
libavfilter/avfilter.h+6−7
@@ -26,7 +26,7 @@ · 25 unmodified lines
2626 #include "libavutil/samplefmt.h"
2727
2828 #define LIBAVFILTER_VERSION_MAJOR 2
29−#define LIBAVFILTER_VERSION_MINOR 13
29+#define LIBAVFILTER_VERSION_MINOR 14
3030 #define LIBAVFILTER_VERSION_MICRO 0
3131
3232 #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \
@@ -98,8 +98,7 @@ typedef struct AVFilterBuffer { · 65 unmodified lines
9898 */
9999 typedef struct AVFilterBufferRefAudioProps {
100100 int64_t channel_layout; ///< channel layout of audio buffer
101− int nb_samples; ///< number of audio samples
102− int size; ///< audio buffer size
101+ int nb_samples; ///< number of audio samples per channel
103102 uint32_t sample_rate; ///< audio buffer sample rate
104103 int planar; ///< audio buffer - planar or packed
105104 } AVFilterBufferRefAudioProps;
@@ -372,7 +371,7 @@ struct AVFilterPad { · 266 unmodified lines
372371 * Input audio pads only.
373372 */
374373 AVFilterBufferRef *(*get_audio_buffer)(AVFilterLink *link, int perms,
375− enum AVSampleFormat sample_fmt, int size,
374+ enum AVSampleFormat sample_fmt, int nb_samples,
376375 int64_t channel_layout, int planar);
377376
378377 /**
@@ -461,7 +460,7 @@ AVFilterBufferRef *avfilter_default_get_video_buffer(AVFilterLink *link, · 82 unmodified lines
461460
462461 /** default handler for get_audio_buffer() for audio inputs */
463462 AVFilterBufferRef *avfilter_default_get_audio_buffer(AVFilterLink *link, int perms,
464− enum AVSampleFormat sample_fmt, int size,
463+ enum AVSampleFormat sample_fmt, int nb_samples,
465464 int64_t channel_layout, int planar);
466465
467466 /**
@@ -684,14 +683,14 @@ avfilter_get_video_buffer_ref_from_arrays(uint8_t * const data[4], const int lin · 216 unmodified lines
684683 * be requested
685684 * @param perms the required access permissions
686685 * @param sample_fmt the format of each sample in the buffer to allocate
687− * @param size the buffer size in bytes
686+ * @param nb_samples the number of samples per channel
688687 * @param channel_layout the number and type of channels per sample in the buffer to allocate
689688 * @param planar audio data layout - planar or packed
690689 * @return A reference to the samples. This must be unreferenced with
691690 * avfilter_unref_buffer when you are finished with it.
692691 */
693692 AVFilterBufferRef *avfilter_get_audio_buffer(AVFilterLink *link, int perms,
694− enum AVSampleFormat sample_fmt, int size,
693+ enum AVSampleFormat sample_fmt, int nb_samples,
695694 int64_t channel_layout, int planar);
696695
697696 /**
libavfilter/defaults.c+5−6
@@ -81,7 +81,7 @@ AVFilterBufferRef *avfilter_default_get_video_buffer(AVFilterLink *link, int per · 80 unmodified lines
8181 }
8282
8383 AVFilterBufferRef *avfilter_default_get_audio_buffer(AVFilterLink *link, int perms,
84− enum AVSampleFormat sample_fmt, int size,
84+ enum AVSampleFormat sample_fmt, int nb_samples,
8585 int64_t channel_layout, int planar)
8686 {
8787 AVFilterBuffer *samples = av_mallocz(sizeof(AVFilterBuffer));
@@ -100,7 +100,7 @@ AVFilterBufferRef *avfilter_default_get_audio_buffer(AVFilterLink *link, int per · 12 unmodified lines
100100 goto fail;
101101
102102 ref->audio->channel_layout = channel_layout;
103− ref->audio->size = size;
103+ ref->audio->nb_samples = nb_samples;
104104 ref->audio->planar = planar;
105105
106106 /* make sure the buffer gets read permission or it's useless for output */
@@ -112,8 +112,7 @@ AVFilterBufferRef *avfilter_default_get_audio_buffer(AVFilterLink *link, int per · 5 unmodified lines
112112 sample_size = av_get_bits_per_sample_fmt(sample_fmt) >>3;
113113 chans_nb = av_get_channel_layout_nb_channels(channel_layout);
114114
115− per_channel_size = size/chans_nb;
116− ref->audio->nb_samples = per_channel_size/sample_size;
115+ per_channel_size = nb_samples * sample_size;
117116
118117 /* Set the number of bytes to traverse to reach next sample of a particular channel:
119118 * For planar, this is simply the sample size.
@@ -124,7 +123,7 @@ AVFilterBufferRef *avfilter_default_get_audio_buffer(AVFilterLink *link, int per · 4 unmodified lines
124123 memset(&samples->linesize[chans_nb], 0, (8-chans_nb) * sizeof(samples->linesize[0]));
125124
126125 /* Calculate total buffer size, round to multiple of 16 to be SIMD friendly */
127− bufsize = (size + 15)&~15;
126+ bufsize = (nb_samples * chans_nb * sample_size + 15)&~15;
128127 buf = av_malloc(bufsize);
129128 if (!buf)
130129 goto fail;
@@ -212,7 +211,7 @@ void avfilter_default_filter_samples(AVFilterLink *inlink, AVFilterBufferRef *sa · 81 unmodified lines
212211
213212 if (outlink) {
214213 outlink->out_buf = avfilter_default_get_audio_buffer(inlink, AV_PERM_WRITE, samplesref->format,
215− samplesref->audio->size,
214+ samplesref->audio->nb_samples,
216215 samplesref->audio->channel_layout,
217216 samplesref->audio->planar);
218217 outlink->out_buf->pts = samplesref->pts;

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t