[FFmpeg-devel] [PATCH 1/3] avfilter: filter_samples: read pts before filtering.
Nicolas George
nicolas.george at normalesup.org
Sat Apr 28 00:53:42 CEST 2012
The call to the next filter_sample will likely unref the
current buffer, so it is not possible to read it afterwards.
Signed-off-by: Nicolas George <nicolas.george at normalesup.org>
---
libavfilter/avfilter.c | 12 +++++++-----
1 files changed, 7 insertions(+), 5 deletions(-)
diff --git a/libavfilter/avfilter.c b/libavfilter/avfilter.c
index 6bc66d0..d71ffdc 100644
--- a/libavfilter/avfilter.c
+++ b/libavfilter/avfilter.c
@@ -570,11 +570,11 @@ int avfilter_poll_frame(AVFilterLink *link)
return min;
}
-static void update_link_current_pts(AVFilterLink *link)
+static void update_link_current_pts(AVFilterLink *link, int64_t pts)
{
- if (link->cur_buf->pts == AV_NOPTS_VALUE)
+ if (pts == AV_NOPTS_VALUE)
return;
- link->current_pts = link->cur_buf->pts; /* TODO use duration */
+ link->current_pts = pts; /* TODO use duration */
if (link->graph && link->age_index >= 0)
ff_avfilter_graph_update_heap(link->graph, link);
}
@@ -619,7 +619,7 @@ void avfilter_start_frame(AVFilterLink *link, AVFilterBufferRef *picref)
}
start_frame(link, link->cur_buf);
- update_link_current_pts(link);
+ update_link_current_pts(link, link->cur_buf->pts);
}
void avfilter_end_frame(AVFilterLink *link)
@@ -696,6 +696,7 @@ void avfilter_filter_samples(AVFilterLink *link, AVFilterBufferRef *samplesref)
void (*filter_samples)(AVFilterLink *, AVFilterBufferRef *);
AVFilterPad *dst = link->dstpad;
int i;
+ int64_t pts;
FF_DPRINTF_START(NULL, filter_samples); ff_dlog_link(NULL, link, 1);
@@ -723,8 +724,9 @@ void avfilter_filter_samples(AVFilterLink *link, AVFilterBufferRef *samplesref)
} else
link->cur_buf = samplesref;
+ pts = link->cur_buf->pts;
filter_samples(link, link->cur_buf);
- update_link_current_pts(link);
+ update_link_current_pts(link, pts);
}
#define MAX_REGISTERED_AVFILTERS_NB 128
--
1.7.2.5
More information about the ffmpeg-devel
mailing list