X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavfilter%2Fvideo.h;h=c677f300470b0ede83ca02095919e5c87dfd077d;hb=7a72695c05f12f21a62dc99fa64d1726fc11b236;hp=e24dd9a38ea02ee71e819d43955e2773dcb1a301;hpb=ca7fa3a5167dc480917491bca4a1bc873d24125a;p=ffmpeg diff --git a/libavfilter/video.h b/libavfilter/video.h index e24dd9a38ea..c677f300470 100644 --- a/libavfilter/video.h +++ b/libavfilter/video.h @@ -28,9 +28,70 @@ AVFilterBufferRef *ff_default_get_video_buffer(AVFilterLink *link, int perms, int w, int h); AVFilterBufferRef *ff_null_get_video_buffer(AVFilterLink *link, int perms, int w, int h); +/** + * Request a picture buffer with a specific set of permissions. + * + * @param link the output link to the filter from which the buffer will + * be requested + * @param perms the required access permissions + * @param w the minimum width of the buffer to allocate + * @param h the minimum height of the buffer to allocate + * @return A reference to the buffer. This must be unreferenced with + * avfilter_unref_buffer when you are finished with it. + */ +AVFilterBufferRef *ff_get_video_buffer(AVFilterLink *link, int perms, + int w, int h); + +int ff_inplace_start_frame(AVFilterLink *link, AVFilterBufferRef *picref); +int ff_null_start_frame(AVFilterLink *link, AVFilterBufferRef *picref); +int ff_null_draw_slice(AVFilterLink *link, int y, int h, int slice_dir); +int ff_null_end_frame(AVFilterLink *link); + +/** + * Notify the next filter of the start of a frame. + * + * @param link the output link the frame will be sent over + * @param picref A reference to the frame about to be sent. The data for this + * frame need only be valid once draw_slice() is called for that + * portion. The receiving filter will free this reference when + * it no longer needs it. + * + * @return >= 0 on success, a negative AVERROR on error. This function will + * unreference picref in case of error. + */ +int ff_start_frame(AVFilterLink *link, AVFilterBufferRef *picref); + +/** + * Pass video frame along and keep an internal reference for later use. + */ +int ff_null_start_frame_keep_ref(AVFilterLink *inlink, AVFilterBufferRef *picref); -void ff_null_start_frame(AVFilterLink *link, AVFilterBufferRef *picref); -void ff_null_draw_slice(AVFilterLink *link, int y, int h, int slice_dir); -void ff_null_end_frame(AVFilterLink *link); +/** + * Notify the next filter that the current frame has finished. + * + * @param link the output link the frame was sent over + * + * @return >= 0 on success, a negative AVERROR on error + */ +int ff_end_frame(AVFilterLink *link); + +/** + * Send a slice to the next filter. + * + * Slices have to be provided in sequential order, either in + * top-bottom or bottom-top order. If slices are provided in + * non-sequential order the behavior of the function is undefined. + * + * @param link the output link over which the frame is being sent + * @param y offset in pixels from the top of the image for this slice + * @param h height of this slice in pixels + * @param slice_dir the assumed direction for sending slices, + * from the top slice to the bottom slice if the value is 1, + * from the bottom slice to the top slice if the value is -1, + * for other values the behavior of the function is undefined. + * + * @return >= 0 on success, a negative AVERROR on error. + */ +int ff_draw_slice(AVFilterLink *link, int y, int h, int slice_dir); #endif /* AVFILTER_VIDEO_H */