Skip to content
Snippets Groups Projects
Commit 75d5624c authored by Nicolas George's avatar Nicolas George
Browse files

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.
parent 832c3b10
No related branches found
No related tags found
No related merge requests found
...@@ -570,11 +570,11 @@ int avfilter_poll_frame(AVFilterLink *link) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment