|
|
@ -96,6 +96,12 @@ static int query_formats_noformat(AVFilterContext *ctx) |
|
|
|
return 0; |
|
|
|
return 0; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static AVFilterPicRef *get_video_buffer(AVFilterLink *link, int perms, |
|
|
|
|
|
|
|
int w, int h) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
return avfilter_get_video_buffer(link->dst->outputs[0], perms, w, h); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static void start_frame(AVFilterLink *link, AVFilterPicRef *picref) |
|
|
|
static void start_frame(AVFilterLink *link, AVFilterPicRef *picref) |
|
|
|
{ |
|
|
|
{ |
|
|
|
avfilter_start_frame(link->dst->outputs[0], picref); |
|
|
|
avfilter_start_frame(link->dst->outputs[0], picref); |
|
|
@ -123,6 +129,7 @@ AVFilter avfilter_vf_format = { |
|
|
|
|
|
|
|
|
|
|
|
.inputs = (AVFilterPad[]) {{ .name = "default", |
|
|
|
.inputs = (AVFilterPad[]) {{ .name = "default", |
|
|
|
.type = CODEC_TYPE_VIDEO, |
|
|
|
.type = CODEC_TYPE_VIDEO, |
|
|
|
|
|
|
|
.get_video_buffer= get_video_buffer, |
|
|
|
.start_frame = start_frame, |
|
|
|
.start_frame = start_frame, |
|
|
|
.draw_slice = draw_slice, |
|
|
|
.draw_slice = draw_slice, |
|
|
|
.end_frame = end_frame, }, |
|
|
|
.end_frame = end_frame, }, |
|
|
@ -144,6 +151,7 @@ AVFilter avfilter_vf_noformat = { |
|
|
|
|
|
|
|
|
|
|
|
.inputs = (AVFilterPad[]) {{ .name = "default", |
|
|
|
.inputs = (AVFilterPad[]) {{ .name = "default", |
|
|
|
.type = CODEC_TYPE_VIDEO, |
|
|
|
.type = CODEC_TYPE_VIDEO, |
|
|
|
|
|
|
|
.get_video_buffer= get_video_buffer, |
|
|
|
.start_frame = start_frame, |
|
|
|
.start_frame = start_frame, |
|
|
|
.draw_slice = draw_slice, |
|
|
|
.draw_slice = draw_slice, |
|
|
|
.end_frame = end_frame, }, |
|
|
|
.end_frame = end_frame, }, |
|
|
|