1
mirror of https://git.videolan.org/git/ffmpeg.git synced 2024-07-11 23:27:55 +02:00

avfilter: filter_samples: read pts before filtering.

The call to the next filter_sample will likely unref the
current buffer, so it is not possible to read it afterwards.
This commit is contained in:
Nicolas George 2012-04-28 00:41:01 +02:00
parent 832c3b10d2
commit 75d5624cb2

View File

@ -570,11 +570,11 @@ int avfilter_poll_frame(AVFilterLink *link)
return min; 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; 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) if (link->graph && link->age_index >= 0)
ff_avfilter_graph_update_heap(link->graph, link); 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); 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) void avfilter_end_frame(AVFilterLink *link)
@ -696,6 +696,7 @@ void avfilter_filter_samples(AVFilterLink *link, AVFilterBufferRef *samplesref)
void (*filter_samples)(AVFilterLink *, AVFilterBufferRef *); void (*filter_samples)(AVFilterLink *, AVFilterBufferRef *);
AVFilterPad *dst = link->dstpad; AVFilterPad *dst = link->dstpad;
int i; int i;
int64_t pts;
FF_DPRINTF_START(NULL, filter_samples); ff_dlog_link(NULL, link, 1); 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 } else
link->cur_buf = samplesref; link->cur_buf = samplesref;
pts = link->cur_buf->pts;
filter_samples(link, link->cur_buf); filter_samples(link, link->cur_buf);
update_link_current_pts(link); update_link_current_pts(link, pts);
} }
#define MAX_REGISTERED_AVFILTERS_NB 128 #define MAX_REGISTERED_AVFILTERS_NB 128