X-Git-Url: http://git.videolan.org/?p=ffmpeg.git;a=blobdiff_plain;f=libavfilter%2Fbuffersink.h;h=83a8bd947137eee1afebd11d21be670ae5e5a7c7;hp=8f94a9c94d5ff00ddeb570138c314f1220684dbc;hb=ba7dfe5c50b2b618b54ff1e7c3972b07d172f163;hpb=a2cd9be212fca02dd3d6ee65cb6ab9f84c5e28e5 diff --git a/libavfilter/buffersink.h b/libavfilter/buffersink.h index 8f94a9c94d..83a8bd9471 100644 --- a/libavfilter/buffersink.h +++ b/libavfilter/buffersink.h @@ -21,15 +21,23 @@ /** * @file + * @ingroup lavfi_buffersink * memory buffer sink API */ #include "avfilter.h" +/** + * @defgroup lavfi_buffersink Buffer sink API + * @ingroup lavfi + * @{ + */ + +#if FF_API_AVFILTERBUFFER /** * Get a buffer with filtered data from sink and put it in buf. * - * @param sink pointer to a context of a buffersink or abuffersink AVFilter. + * @param ctx pointer to a context of a buffersink or abuffersink AVFilter. * @param buf pointer to the buffer will be written here if buf is non-NULL. buf * must be freed by the caller using avfilter_unref_buffer(). * Buf may also be NULL to query whether a buffer is ready to be @@ -38,14 +46,15 @@ * @return >= 0 in case of success, a negative AVERROR code in case of * failure. */ -int av_buffersink_read(AVFilterContext *sink, AVFilterBufferRef **buf); +attribute_deprecated +int av_buffersink_read(AVFilterContext *ctx, AVFilterBufferRef **buf); /** * Same as av_buffersink_read, but with the ability to specify the number of * samples read. This function is less efficient than av_buffersink_read(), * because it copies the data around. * - * @param sink pointer to a context of the abuffersink AVFilter. + * @param ctx pointer to a context of the abuffersink AVFilter. * @param buf pointer to the buffer will be written here if buf is non-NULL. buf * must be freed by the caller using avfilter_unref_buffer(). buf * will contain exactly nb_samples audio samples, except at the end @@ -56,7 +65,48 @@ int av_buffersink_read(AVFilterContext *sink, AVFilterBufferRef **buf); * @warning do not mix this function with av_buffersink_read(). Use only one or * the other with a single sink, not both. */ +attribute_deprecated int av_buffersink_read_samples(AVFilterContext *ctx, AVFilterBufferRef **buf, int nb_samples); +#endif + +/** + * Get a frame with filtered data from sink and put it in frame. + * + * @param ctx pointer to a context of a buffersink or abuffersink AVFilter. + * @param frame pointer to an allocated frame that will be filled with data. + * The data must be freed using av_frame_unref() / av_frame_free() + * + * @return + * - >= 0 if a frame was successfully returned. + * - AVERROR(EAGAIN) if no frames are available at this point; more + * input frames must be added to the filtergraph to get more output. + * - AVERROR_EOF if there will be no more output frames on this sink. + * - A different negative AVERROR code in other failure cases. + */ +int av_buffersink_get_frame(AVFilterContext *ctx, AVFrame *frame); + +/** + * Same as av_buffersink_get_frame(), but with the ability to specify the number + * of samples read. This function is less efficient than + * av_buffersink_get_frame(), because it copies the data around. + * + * @param ctx pointer to a context of the abuffersink AVFilter. + * @param frame pointer to an allocated frame that will be filled with data. + * The data must be freed using av_frame_unref() / av_frame_free() + * frame will contain exactly nb_samples audio samples, except at + * the end of stream, when it can contain less than nb_samples. + * + * @return The return codes have the same meaning as for + * av_buffersink_get_samples(). + * + * @warning do not mix this function with av_buffersink_get_frame(). Use only one or + * the other with a single sink, not both. + */ +int av_buffersink_get_samples(AVFilterContext *ctx, AVFrame *frame, int nb_samples); + +/** + * @} + */ #endif /* AVFILTER_BUFFERSINK_H */