| @@ -166,7 +166,7 @@ static int default_start_frame(AVFilterLink *inlink, AVFilterBufferRef *picref) · 165 unmodified lines |
| 166 | if (inlink->dst->nb_outputs) | 166 | if (inlink->dst->nb_outputs) |
| 167 | outlink = inlink->dst->outputs[0]; | 167 | outlink = inlink->dst->outputs[0]; |
| 168 | | 168 | |
| 169 | if (outlink && (inlink->dstpad->start_frame || inlink->dstpad->end_frame || inlink->dstpad->draw_slice)) { | 169 | if (outlink && (inlink->dstpad->start_frame || inlink->dstpad->end_frame)) { |
| 170 | AVFilterBufferRef *buf_out; | 170 | AVFilterBufferRef *buf_out; |
| 171 | outlink->out_buf = ff_get_video_buffer(outlink, AV_PERM_WRITE, outlink->w, outlink->h); | 171 | outlink->out_buf = ff_get_video_buffer(outlink, AV_PERM_WRITE, outlink->w, outlink->h); |
| 172 | if (!outlink->out_buf) | 172 | if (!outlink->out_buf) |
| @@ -283,7 +283,7 @@ static int default_end_frame(AVFilterLink *inlink) · 110 unmodified lines |
| 283 | int ret = inlink->dstpad->filter_frame(inlink, inlink->cur_buf); | 283 | int ret = inlink->dstpad->filter_frame(inlink, inlink->cur_buf); |
| 284 | inlink->cur_buf = NULL; | 284 | inlink->cur_buf = NULL; |
| 285 | return ret; | 285 | return ret; |
| 286 | } else if (inlink->dstpad->start_frame || inlink->dstpad->end_frame || inlink->dstpad->draw_slice){ | 286 | } else if (inlink->dstpad->start_frame || inlink->dstpad->end_frame){ |
| 287 | return ff_end_frame(outlink); | 287 | return ff_end_frame(outlink); |
| 288 | } else { | 288 | } else { |
| 289 | int ret = ff_filter_frame(outlink, inlink->cur_buf); | 289 | int ret = ff_filter_frame(outlink, inlink->cur_buf); |
| @@ -309,23 +309,10 @@ int ff_end_frame(AVFilterLink *link) · 19 unmodified lines |
| 309 | return ret; | 309 | return ret; |
| 310 | } | 310 | } |
| 311 | | 311 | |
| 312 | static int default_draw_slice(AVFilterLink *inlink, int y, int h, int slice_dir) | | |
| 313 | { | | |
| 314 | AVFilterLink *outlink = NULL; | | |
| 315 | | | |
| 316 | if (inlink->dst->nb_outputs) | | |
| 317 | outlink = inlink->dst->outputs[0]; | | |
| 318 | | | |
| 319 | if (outlink && (inlink->dstpad->start_frame || inlink->dstpad->end_frame || inlink->dstpad->draw_slice)) | | |
| 320 | return ff_draw_slice(outlink, y, h, slice_dir); | | |
| 321 | return 0; | | |
| 322 | } | | |
| 323 | | | |
| 324 | int ff_draw_slice(AVFilterLink *link, int y, int h, int slice_dir) | 312 | int ff_draw_slice(AVFilterLink *link, int y, int h, int slice_dir) |
| 325 | { | 313 | { |
| 326 | uint8_t *src[4], *dst[4]; | 314 | uint8_t *src[4], *dst[4]; |
| 327 | int i, j, vsub, ret; | 315 | int i, j, vsub; |
| 328 | int (*draw_slice)(AVFilterLink *, int, int, int); | | |
| 329 | | 316 | |
| 330 | FF_TPRINTF_START(NULL, draw_slice); ff_tlog_link(NULL, link, 0); ff_tlog(NULL, " y:%d h:%d dir:%d\n", y, h, slice_dir); | 317 | FF_TPRINTF_START(NULL, draw_slice); ff_tlog_link(NULL, link, 0); ff_tlog(NULL, " y:%d h:%d dir:%d\n", y, h, slice_dir); |
| 331 | | 318 | |
| @@ -358,14 +345,8 @@ int ff_draw_slice(AVFilterLink *link, int y, int h, int slice_dir) · 26 unmodified lines |
| 358 | } | 345 | } |
| 359 | } | 346 | } |
| 360 | | 347 | |
| 361 | if (!(draw_slice = link->dstpad->draw_slice)) | | |
| 362 | draw_slice = default_draw_slice; | | |
| 363 | ret = draw_slice(link, y, h, slice_dir); | | |
| 364 | if (ret < 0) | | |
| 365 | clear_link(link); | | |
| 366 | else | | |
| 367 | /* incoming buffers must not be freed in start frame, | 348 | /* incoming buffers must not be freed in start frame, |
| 368 | because they can still be in use by the automatic copy mechanism */ | 349 | because they can still be in use by the automatic copy mechanism */ |
| 369 | av_assert1(link->cur_buf_copy->buf->refcount > 0); | 350 | av_assert1(link->cur_buf_copy->buf->refcount > 0); |
| 370 | return ret; | 351 | return 0; |
| 371 | } | 352 | } |