[PATCH] Implement av_link_dstpad() and av_link_srcpad() and use them in place of the macros link_dpad and link_spad.
Stefano Sabatini
stefano.sabatini-lala
Sat Sep 4 13:38:32 CEST 2010
---
libavfilter/avfilter.c | 36 ++++++++++++++++--------------------
libavfilter/avfilter.h | 16 ++++++++++++++++
2 files changed, 32 insertions(+), 20 deletions(-)
diff --git a/libavfilter/avfilter.c b/libavfilter/avfilter.c
index bc8c67e..c904fe2 100644
--- a/libavfilter/avfilter.c
+++ b/libavfilter/avfilter.c
@@ -42,10 +42,6 @@ const char *avfilter_license(void)
return LICENSE_PREFIX FFMPEG_LICENSE + sizeof(LICENSE_PREFIX) - 1;
}
-/** helper macros to get the in/out pad on the dst/src filter */
-#define link_dpad(link) link->dst-> input_pads[link->dstpad]
-#define link_spad(link) link->src->output_pads[link->srcpad]
-
AVFilterBufferRef *avfilter_ref_buffer(AVFilterBufferRef *ref, int pmask)
{
AVFilterBufferRef *ret = av_malloc(sizeof(AVFilterBufferRef));
@@ -175,12 +171,12 @@ int avfilter_config_links(AVFilterContext *filter)
if (avfilter_config_links(link->src))
return -1;
- if (!(config_link = link_spad(link).config_props))
+ if (!(config_link = av_link_srcpad(link)->config_props))
config_link = avfilter_default_config_output_link;
if (config_link(link))
return -1;
- if ((config_link = link_dpad(link).config_props))
+ if ((config_link = av_link_dstpad(link)->config_props))
if (config_link(link))
return -1;
@@ -249,8 +245,8 @@ AVFilterBufferRef *avfilter_get_video_buffer(AVFilterLink *link, int perms, int
FF_DPRINTF_START(NULL, get_video_buffer); ff_dprintf_link(NULL, link, 0);
dprintf(NULL, " perms:%s w:%d h:%d\n", ff_get_ref_perms_string(buf, sizeof(buf), perms), w, h);
- if (link_dpad(link).get_video_buffer)
- ret = link_dpad(link).get_video_buffer(link, perms, w, h);
+ if (av_link_dstpad(link)->get_video_buffer)
+ ret = av_link_dstpad(link)->get_video_buffer(link, perms, w, h);
if (!ret)
ret = avfilter_default_get_video_buffer(link, perms, w, h);
@@ -269,8 +265,8 @@ AVFilterBufferRef *avfilter_get_audio_buffer(AVFilterLink *link, int perms,
{
AVFilterBufferRef *ret = NULL;
- if (link_dpad(link).get_audio_buffer)
- ret = link_dpad(link).get_audio_buffer(link, perms, sample_fmt, size, channel_layout, planar);
+ if (av_link_dstpad(link)->get_audio_buffer)
+ ret = av_link_dstpad(link)->get_audio_buffer(link, perms, sample_fmt, size, channel_layout, planar);
if (!ret)
ret = avfilter_default_get_audio_buffer(link, perms, sample_fmt, size, channel_layout, planar);
@@ -285,8 +281,8 @@ int avfilter_request_frame(AVFilterLink *link)
{
FF_DPRINTF_START(NULL, request_frame); ff_dprintf_link(NULL, link, 1);
- if (link_spad(link).request_frame)
- return link_spad(link).request_frame(link);
+ if (av_link_srcpad(link)->request_frame)
+ return av_link_srcpad(link)->request_frame(link);
else if (link->src->inputs[0])
return avfilter_request_frame(link->src->inputs[0]);
else return -1;
@@ -296,8 +292,8 @@ int avfilter_poll_frame(AVFilterLink *link)
{
int i, min = INT_MAX;
- if (link_spad(link).poll_frame)
- return link_spad(link).poll_frame(link);
+ if (av_link_srcpad(link)->poll_frame)
+ return av_link_srcpad(link)->poll_frame(link);
for (i = 0; i < link->src->input_count; i++) {
int val;
@@ -315,7 +311,7 @@ int avfilter_poll_frame(AVFilterLink *link)
void avfilter_start_frame(AVFilterLink *link, AVFilterBufferRef *picref)
{
void (*start_frame)(AVFilterLink *, AVFilterBufferRef *);
- AVFilterPad *dst = &link_dpad(link);
+ AVFilterPad *dst = av_link_dstpad(link);
FF_DPRINTF_START(NULL, start_frame); ff_dprintf_link(NULL, link, 0); dprintf(NULL, " "); ff_dprintf_ref(NULL, picref, 1);
@@ -328,7 +324,7 @@ void avfilter_start_frame(AVFilterLink *link, AVFilterBufferRef *picref)
av_log(link->dst, AV_LOG_DEBUG,
"frame copy needed (have perms %x, need %x, reject %x)\n",
picref->perms,
- link_dpad(link).min_perms, link_dpad(link).rej_perms);
+ av_link_dstpad(link)->min_perms, av_link_dstpad(link)->rej_perms);
link->cur_buf = avfilter_get_video_buffer(link, dst->min_perms, link->w, link->h);
link->src_buf = picref;
@@ -344,7 +340,7 @@ void avfilter_end_frame(AVFilterLink *link)
{
void (*end_frame)(AVFilterLink *);
- if (!(end_frame = link_dpad(link).end_frame))
+ if (!(end_frame = av_link_dstpad(link)->end_frame))
end_frame = avfilter_default_end_frame;
end_frame(link);
@@ -393,7 +389,7 @@ void avfilter_draw_slice(AVFilterLink *link, int y, int h, int slice_dir)
}
}
- if (!(draw_slice = link_dpad(link).draw_slice))
+ if (!(draw_slice = av_link_dstpad(link)->draw_slice))
draw_slice = avfilter_default_draw_slice;
draw_slice(link, y, h, slice_dir);
}
@@ -401,7 +397,7 @@ void avfilter_draw_slice(AVFilterLink *link, int y, int h, int slice_dir)
void avfilter_filter_samples(AVFilterLink *link, AVFilterBufferRef *samplesref)
{
void (*filter_samples)(AVFilterLink *, AVFilterBufferRef *);
- AVFilterPad *dst = &link_dpad(link);
+ AVFilterPad *dst = av_link_dstpad(link);
if (!(filter_samples = dst->filter_samples))
filter_samples = avfilter_default_filter_samples;
@@ -412,7 +408,7 @@ void avfilter_filter_samples(AVFilterLink *link, AVFilterBufferRef *samplesref)
av_log(link->dst, AV_LOG_DEBUG,
"Copying audio data in avfilter (have perms %x, need %x, reject %x)\n",
- samplesref->perms, link_dpad(link).min_perms, link_dpad(link).rej_perms);
+ samplesref->perms, av_link_dstpad(link)->min_perms, av_link_dstpad(link)->rej_perms);
link->cur_buf = avfilter_default_get_audio_buffer(link, dst->min_perms,
samplesref->format,
diff --git a/libavfilter/avfilter.h b/libavfilter/avfilter.h
index 721519a..19e2b42 100644
--- a/libavfilter/avfilter.h
+++ b/libavfilter/avfilter.h
@@ -601,6 +601,22 @@ struct AVFilterLink {
};
/**
+ * Return the destination pad of link if any or NULL.
+ */
+static inline AVFilterPad *av_link_dstpad(AVFilterLink *link)
+{
+ return link->dst ? &link->dst->input_pads[link->dstpad] : NULL;
+}
+
+/**
+ * Return the source pad of link if any or NULL.
+ */
+static inline AVFilterPad *av_link_srcpad(AVFilterLink *link)
+{
+ return link->src ? &link->src->output_pads[link->srcpad] : NULL;
+}
+
+/**
* Link two filters together.
*
* @param src the source filter
--
1.7.1
--UlVJffcvxoiEqYs2--
More information about the ffmpeg-devel
mailing list