[FFmpeg-cvslog] r24424 - in trunk/libavfilter: avfilter.c avfilter.h avfiltergraph.c defaults.c formats.c vf_scale.c
stefano
subversion
Thu Jul 22 13:12:47 CEST 2010
Author: stefano
Date: Thu Jul 22 13:12:47 2010
New Revision: 24424
Log:
Generalize pixel format enum fields to int formats.
This is needed to make the libavfilter framework work with audio
filters.
In particular add a type filed to AVFilterLink, change the field types:
enum PixelFormat format -> int format in AVFilterBuffer
enum PixelFormat *formats -> int *formats in AVFilterFormats
enum PixelFormat *format -> int format in AVFilterLink
and change the function signatures:
AVFilterFormats *avfilter_make_format_list(const enum PixelFormat *pix_fmts); ->
AVFilterFormats *avfilter_make_format_list(const int *fmts);
int avfilter_add_colorspace(AVFilterFormats **avff, enum PixelFormat pix_fmt); ->
int avfilter_add_format(AVFilterFormats **avff, int fmt);
AVFilterFormats *avfilter_all_colorspaces(void); ->
AVFilterFormats *avfilter_all_formats(enum AVMediaType type);
This change breaks libavfilter API/ABI.
Patch by S.N. Hemanth Meenakshisundaram |smeenaks|ucsd|edu|.
Modified:
trunk/libavfilter/avfilter.c
trunk/libavfilter/avfilter.h
trunk/libavfilter/avfiltergraph.c
trunk/libavfilter/defaults.c
trunk/libavfilter/formats.c
trunk/libavfilter/vf_scale.c
Modified: trunk/libavfilter/avfilter.c
==============================================================================
--- trunk/libavfilter/avfilter.c Thu Jul 22 11:56:09 2010 (r24423)
+++ trunk/libavfilter/avfilter.c Thu Jul 22 13:12:47 2010 (r24424)
@@ -98,7 +98,9 @@ int avfilter_link(AVFilterContext *src,
link->dst = dst;
link->srcpad = srcpad;
link->dstpad = dstpad;
- link->format = PIX_FMT_NONE;
+ link->type = src->output_pads[srcpad].type;
+ assert(PIX_FMT_NONE == -1 && SAMPLE_FMT_NONE == -1);
+ link->format = -1;
return 0;
}
@@ -122,7 +124,7 @@ int avfilter_insert_filter(AVFilterLink
link->dstpad = in;
filt->inputs[in] = link;
- /* if any information on supported colorspaces already exists on the
+ /* if any information on supported media formats already exists on the
* link, we need to preserve that */
if(link->out_formats)
avfilter_formats_changeref(&link->out_formats,
Modified: trunk/libavfilter/avfilter.h
==============================================================================
--- trunk/libavfilter/avfilter.h Thu Jul 22 11:56:09 2010 (r24423)
+++ trunk/libavfilter/avfilter.h Thu Jul 22 13:12:47 2010 (r24424)
@@ -25,7 +25,7 @@
#include "libavutil/avutil.h"
#define LIBAVFILTER_VERSION_MAJOR 1
-#define LIBAVFILTER_VERSION_MINOR 25
+#define LIBAVFILTER_VERSION_MINOR 26
#define LIBAVFILTER_VERSION_MICRO 1
#define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \
@@ -68,7 +68,7 @@ typedef struct AVFilterBuffer
{
uint8_t *data[4]; ///< buffer data for each plane
int linesize[4]; ///< number of bytes per line
- enum PixelFormat format; ///< colorspace
+ int format; ///< media format
unsigned refcount; ///< number of references to this buffer
@@ -190,7 +190,7 @@ typedef struct AVFilterFormats AVFilterF
struct AVFilterFormats
{
unsigned format_count; ///< number of formats
- enum PixelFormat *formats; ///< list of pixel formats
+ int *formats; ///< list of media formats
unsigned refcount; ///< number of references to this list
AVFilterFormats ***refs; ///< references to this list
@@ -199,25 +199,25 @@ struct AVFilterFormats
/**
* Create a list of supported formats. This is intended for use in
* AVFilter->query_formats().
- * @param pix_fmts list of pixel formats, terminated by PIX_FMT_NONE
+ * @param fmts list of media formats, terminated by -1
* @return the format list, with no existing references
*/
-AVFilterFormats *avfilter_make_format_list(const enum PixelFormat *pix_fmts);
+AVFilterFormats *avfilter_make_format_list(const int *fmts);
/**
- * Add pix_fmt to the list of pixel formats contained in *avff.
+ * Add fmt to the list of media formats contained in *avff.
* If *avff is NULL the function allocates the filter formats struct
* and puts its pointer in *avff.
*
* @return a non negative value in case of success, or a negative
* value corresponding to an AVERROR code in case of error
*/
-int avfilter_add_colorspace(AVFilterFormats **avff, enum PixelFormat pix_fmt);
+int avfilter_add_format(AVFilterFormats **avff, int fmt);
/**
- * Return a list of all colorspaces supported by FFmpeg.
+ * Return a list of all formats supported by FFmpeg for the given media type.
*/
-AVFilterFormats *avfilter_all_colorspaces(void);
+AVFilterFormats *avfilter_all_formats(enum AVMediaType type);
/**
* Return a format list which contains the intersection of the formats of
@@ -507,9 +507,11 @@ struct AVFilterLink
AVLINK_INIT ///< complete
} init_state;
+ enum AVMediaType type; ///< filter media type
+
int w; ///< agreed upon image width
int h; ///< agreed upon image height
- enum PixelFormat format; ///< agreed upon image colorspace
+ int format; ///< agreed upon media format
/**
* Lists of formats supported by the input and output filters respectively.
@@ -544,7 +546,7 @@ int avfilter_link(AVFilterContext *src,
AVFilterContext *dst, unsigned dstpad);
/**
- * Negotiate the colorspace, dimensions, etc of all inputs to a filter.
+ * Negotiate the media format, dimensions, etc of all inputs to a filter.
* @param filter the filter to negotiate the properties for its inputs
* @return zero on successful negotiation
*/
Modified: trunk/libavfilter/avfiltergraph.c
==============================================================================
--- trunk/libavfilter/avfiltergraph.c Thu Jul 22 11:56:09 2010 (r24423)
+++ trunk/libavfilter/avfiltergraph.c Thu Jul 22 13:12:47 2010 (r24424)
@@ -111,7 +111,7 @@ static int query_formats(AVFilterGraph *
int scaler_count = 0;
char inst_name[30];
- /* ask all the sub-filters for their supported colorspaces */
+ /* ask all the sub-filters for their supported media formats */
for(i = 0; i < graph->filter_count; i ++) {
if(graph->filters[i]->filter->query_formats)
graph->filters[i]->filter->query_formats(graph->filters[i]);
@@ -197,7 +197,7 @@ int avfilter_graph_config_formats(AVFilt
return -1;
/* Once everything is merged, it's possible that we'll still have
- * multiple valid colorspace choices. We pick the first one. */
+ * multiple valid media format choices. We pick the first one. */
pick_formats(graph);
return 0;
Modified: trunk/libavfilter/defaults.c
==============================================================================
--- trunk/libavfilter/defaults.c Thu Jul 22 11:56:09 2010 (r24423)
+++ trunk/libavfilter/defaults.c Thu Jul 22 13:12:47 2010 (r24424)
@@ -160,7 +160,11 @@ void avfilter_set_common_formats(AVFilte
int avfilter_default_query_formats(AVFilterContext *ctx)
{
- avfilter_set_common_formats(ctx, avfilter_all_colorspaces());
+ enum AVMediaType type = ctx->inputs [0] ? ctx->inputs [0]->type :
+ ctx->outputs[0] ? ctx->outputs[0]->type :
+ AVMEDIA_TYPE_VIDEO;
+
+ avfilter_set_common_formats(ctx, avfilter_all_formats(type));
return 0;
}
Modified: trunk/libavfilter/formats.c
==============================================================================
--- trunk/libavfilter/formats.c Thu Jul 22 11:56:09 2010 (r24423)
+++ trunk/libavfilter/formats.c Thu Jul 22 13:12:47 2010 (r24424)
@@ -70,47 +70,49 @@ AVFilterFormats *avfilter_merge_formats(
return ret;
}
-AVFilterFormats *avfilter_make_format_list(const enum PixelFormat *pix_fmts)
+AVFilterFormats *avfilter_make_format_list(const int *fmts)
{
AVFilterFormats *formats;
int count;
- for (count = 0; pix_fmts[count] != PIX_FMT_NONE; count++)
+ for (count = 0; fmts[count] != -1; count++)
;
formats = av_mallocz(sizeof(AVFilterFormats));
formats->formats = av_malloc(sizeof(*formats->formats) * count);
formats->format_count = count;
- memcpy(formats->formats, pix_fmts, sizeof(*formats->formats) * count);
+ memcpy(formats->formats, fmts, sizeof(*formats->formats) * count);
return formats;
}
-int avfilter_add_colorspace(AVFilterFormats **avff, enum PixelFormat pix_fmt)
+int avfilter_add_format(AVFilterFormats **avff, int fmt)
{
- enum PixelFormat *pix_fmts;
+ int *fmts;
if (!(*avff) && !(*avff = av_mallocz(sizeof(AVFilterFormats))))
return AVERROR(ENOMEM);
- pix_fmts = av_realloc((*avff)->formats,
- sizeof((*avff)->formats) * ((*avff)->format_count+1));
- if (!pix_fmts)
+ fmts = av_realloc((*avff)->formats,
+ sizeof((*avff)->formats) * ((*avff)->format_count+1));
+ if (!fmts)
return AVERROR(ENOMEM);
- (*avff)->formats = pix_fmts;
- (*avff)->formats[(*avff)->format_count++] = pix_fmt;
+ (*avff)->formats = fmts;
+ (*avff)->formats[(*avff)->format_count++] = fmt;
return 0;
}
-AVFilterFormats *avfilter_all_colorspaces(void)
+AVFilterFormats *avfilter_all_formats(enum AVMediaType type)
{
AVFilterFormats *ret = NULL;
- enum PixelFormat pix_fmt;
+ int fmt;
+ int num_formats = type == AVMEDIA_TYPE_VIDEO ? PIX_FMT_NB : 0;
- for (pix_fmt = 0; pix_fmt < PIX_FMT_NB; pix_fmt++)
- if (!(av_pix_fmt_descriptors[pix_fmt].flags & PIX_FMT_HWACCEL))
- avfilter_add_colorspace(&ret, pix_fmt);
+ for (fmt = 0; fmt < num_formats; fmt++)
+ if ((type != AVMEDIA_TYPE_VIDEO) ||
+ (type == AVMEDIA_TYPE_VIDEO && !(av_pix_fmt_descriptors[fmt].flags & PIX_FMT_HWACCEL)))
+ avfilter_add_format(&ret, fmt);
return ret;
}
Modified: trunk/libavfilter/vf_scale.c
==============================================================================
--- trunk/libavfilter/vf_scale.c Thu Jul 22 11:56:09 2010 (r24423)
+++ trunk/libavfilter/vf_scale.c Thu Jul 22 13:12:47 2010 (r24424)
@@ -83,7 +83,7 @@ static int query_formats(AVFilterContext
formats = NULL;
for (pix_fmt = 0; pix_fmt < PIX_FMT_NB; pix_fmt++)
if ( sws_isSupportedInput(pix_fmt)
- && (ret = avfilter_add_colorspace(&formats, pix_fmt)) < 0) {
+ && (ret = avfilter_add_format(&formats, pix_fmt)) < 0) {
avfilter_formats_unref(&formats);
return ret;
}
@@ -93,7 +93,7 @@ static int query_formats(AVFilterContext
formats = NULL;
for (pix_fmt = 0; pix_fmt < PIX_FMT_NB; pix_fmt++)
if ( sws_isSupportedOutput(pix_fmt)
- && (ret = avfilter_add_colorspace(&formats, pix_fmt)) < 0) {
+ && (ret = avfilter_add_format(&formats, pix_fmt)) < 0) {
avfilter_formats_unref(&formats);
return ret;
}
More information about the ffmpeg-cvslog
mailing list