1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2025-01-08 13:22:53 +02:00

lavfi: add audio channel packing negotiation fields

Signed-off-by: Stefano Sabatini <stefano.sabatini-lala@poste.it>
This commit is contained in:
Mina Nagy Zaki 2011-06-28 08:56:19 +03:00 committed by Stefano Sabatini
parent 7bda0c9a82
commit b57df29f95
6 changed files with 51 additions and 3 deletions

View File

@ -13,6 +13,14 @@ libavutil: 2011-04-18
API changes, most recent first: API changes, most recent first:
2011-07-16 - xxxxxx - lavfi 2.27.0
Add audio packing negotiation fields and helper functions.
In particular, add AVFilterPacking enum, planar, in_packings and
out_packings fields to AVFilterLink, and the functions:
avfilter_set_common_packing_formats()
avfilter_all_packing_formats()
2011-07-10 - a67c061 - lavf 53.3.0 2011-07-10 - a67c061 - lavf 53.3.0
Add avformat_find_stream_info(), deprecate av_find_stream_info(). Add avformat_find_stream_info(), deprecate av_find_stream_info().

View File

@ -221,6 +221,9 @@ int avfilter_insert_filter(AVFilterLink *link, AVFilterContext *filt,
if (link->out_chlayouts) if (link->out_chlayouts)
avfilter_formats_changeref(&link->out_chlayouts, avfilter_formats_changeref(&link->out_chlayouts,
&filt->outputs[filt_dstpad_idx]->out_chlayouts); &filt->outputs[filt_dstpad_idx]->out_chlayouts);
if (link->out_packing)
avfilter_formats_changeref(&link->out_packing,
&filt->outputs[filt_dstpad_idx]->out_packing);
return 0; return 0;
} }

View File

@ -29,7 +29,7 @@
#include "libavutil/rational.h" #include "libavutil/rational.h"
#define LIBAVFILTER_VERSION_MAJOR 2 #define LIBAVFILTER_VERSION_MAJOR 2
#define LIBAVFILTER_VERSION_MINOR 26 #define LIBAVFILTER_VERSION_MINOR 27
#define LIBAVFILTER_VERSION_MICRO 0 #define LIBAVFILTER_VERSION_MICRO 0
#define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \ #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \
@ -264,6 +264,11 @@ AVFilterFormats *avfilter_all_formats(enum AVMediaType type);
*/ */
AVFilterFormats *avfilter_all_channel_layouts(void); AVFilterFormats *avfilter_all_channel_layouts(void);
/**
* Return a list of all audio packing formats.
*/
AVFilterFormats *avfilter_all_packing_formats(void);
/** /**
* Return a format list which contains the intersection of the formats of * Return a format list which contains the intersection of the formats of
* a and b. Also, all the references of a, all the references of b, and * a and b. Also, all the references of a, all the references of b, and
@ -482,6 +487,7 @@ AVFilterBufferRef *avfilter_default_get_audio_buffer(AVFilterLink *link, int per
void avfilter_set_common_pixel_formats(AVFilterContext *ctx, AVFilterFormats *formats); void avfilter_set_common_pixel_formats(AVFilterContext *ctx, AVFilterFormats *formats);
void avfilter_set_common_sample_formats(AVFilterContext *ctx, AVFilterFormats *formats); void avfilter_set_common_sample_formats(AVFilterContext *ctx, AVFilterFormats *formats);
void avfilter_set_common_channel_layouts(AVFilterContext *ctx, AVFilterFormats *formats); void avfilter_set_common_channel_layouts(AVFilterContext *ctx, AVFilterFormats *formats);
void avfilter_set_common_packing_formats(AVFilterContext *ctx, AVFilterFormats *formats);
/** Default handler for query_formats() */ /** Default handler for query_formats() */
int avfilter_default_query_formats(AVFilterContext *ctx); int avfilter_default_query_formats(AVFilterContext *ctx);
@ -570,6 +576,11 @@ struct AVFilterContext {
void *priv; ///< private data for use by the filter void *priv; ///< private data for use by the filter
}; };
enum AVFilterPacking {
AVFILTER_PACKED = 0,
AVFILTER_PLANAR,
};
/** /**
* A link between two filters. This contains pointers to the source and * A link between two filters. This contains pointers to the source and
* destination filters between which this link exists, and the indexes of * destination filters between which this link exists, and the indexes of
@ -597,9 +608,10 @@ struct AVFilterLink {
int w; ///< agreed upon image width int w; ///< agreed upon image width
int h; ///< agreed upon image height int h; ///< agreed upon image height
AVRational sample_aspect_ratio; ///< agreed upon sample aspect ratio AVRational sample_aspect_ratio; ///< agreed upon sample aspect ratio
/* These two parameters apply only to audio */ /* These parameters apply only to audio */
int64_t channel_layout; ///< channel layout of current buffer (see libavutil/audioconvert.h) int64_t channel_layout; ///< channel layout of current buffer (see libavutil/audioconvert.h)
int64_t sample_rate; ///< samples per second int64_t sample_rate; ///< samples per second
int planar; ///< agreed upon packing mode of audio buffers. true if planar.
int format; ///< agreed upon media format int format; ///< agreed upon media format
@ -615,6 +627,8 @@ struct AVFilterLink {
AVFilterFormats *in_chlayouts; AVFilterFormats *in_chlayouts;
AVFilterFormats *out_chlayouts; AVFilterFormats *out_chlayouts;
AVFilterFormats *in_packing;
AVFilterFormats *out_packing;
/** /**
* The buffer reference currently being sent across the link by the source * The buffer reference currently being sent across the link by the source

View File

@ -203,8 +203,12 @@ static void pick_format(AVFilterLink *link)
link->channel_layout = link->in_chlayouts->formats[0]; link->channel_layout = link->in_chlayouts->formats[0];
avfilter_formats_unref(&link->in_chlayouts); avfilter_formats_unref(&link->in_chlayouts);
avfilter_formats_unref(&link->out_chlayouts); avfilter_formats_unref(&link->out_chlayouts);
}
link->in_packing->format_count = 1;
link->planar = link->in_packing->formats[0] == AVFILTER_PLANAR;
avfilter_formats_unref(&link->in_packing);
avfilter_formats_unref(&link->out_packing);
}
} }
static void pick_formats(AVFilterGraph *graph) static void pick_formats(AVFilterGraph *graph)

View File

@ -239,11 +239,19 @@ void avfilter_set_common_channel_layouts(AVFilterContext *ctx, AVFilterFormats *
offsetof(AVFilterLink, out_chlayouts)); offsetof(AVFilterLink, out_chlayouts));
} }
void avfilter_set_common_packing_formats(AVFilterContext *ctx, AVFilterFormats *formats)
{
set_common_formats(ctx, formats, AVMEDIA_TYPE_AUDIO,
offsetof(AVFilterLink, in_packing),
offsetof(AVFilterLink, out_packing));
}
int avfilter_default_query_formats(AVFilterContext *ctx) int avfilter_default_query_formats(AVFilterContext *ctx)
{ {
avfilter_set_common_pixel_formats(ctx, avfilter_all_formats(AVMEDIA_TYPE_VIDEO)); avfilter_set_common_pixel_formats(ctx, avfilter_all_formats(AVMEDIA_TYPE_VIDEO));
avfilter_set_common_sample_formats(ctx, avfilter_all_formats(AVMEDIA_TYPE_AUDIO)); avfilter_set_common_sample_formats(ctx, avfilter_all_formats(AVMEDIA_TYPE_AUDIO));
avfilter_set_common_channel_layouts(ctx, avfilter_all_channel_layouts()); avfilter_set_common_channel_layouts(ctx, avfilter_all_channel_layouts());
avfilter_set_common_packing_formats(ctx, avfilter_all_packing_formats());
return 0; return 0;
} }

View File

@ -173,6 +173,17 @@ AVFilterFormats *avfilter_all_channel_layouts(void)
return avfilter_make_format64_list(chlayouts); return avfilter_make_format64_list(chlayouts);
} }
AVFilterFormats *avfilter_all_packing_formats(void)
{
static int packing[] = {
AVFILTER_PACKED,
AVFILTER_PLANAR,
-1,
};
return avfilter_make_format_list(packing);
}
void avfilter_formats_ref(AVFilterFormats *f, AVFilterFormats **ref) void avfilter_formats_ref(AVFilterFormats *f, AVFilterFormats **ref)
{ {
*ref = f; *ref = f;