vsrc_buffer: add av_vsrc_buffer_add_frame()

The new function is a wrapper around
av_vsrc_buffer_add_video_buffer_ref(), and allows to simplify the act
of pushing AVFrame data to the source buffer.
pull/2/head
Stefano Sabatini 14 years ago
parent d3fddb8454
commit c000a9f783
  1. 3
      doc/APIchanges
  2. 7
      ffmpeg.c
  3. 9
      libavfilter/avcodec.h
  4. 2
      libavfilter/avfilter.h
  5. 17
      libavfilter/vsrc_buffer.c

@ -13,6 +13,9 @@ libavutil: 2011-04-18
API changes, most recent first: API changes, most recent first:
2011-05-XX - XXXXXX - lavfi 2.8.0 - avcodec.h
Add av_vsrc_buffer_add_frame() to libavfilter/avcodec.h.
2011-05-XX - XXXXXX - lavfi 2.6.0 - avcodec.h 2011-05-XX - XXXXXX - lavfi 2.6.0 - avcodec.h
Add avfilter_get_video_buffer_ref_from_frame() to libavfilter/avcodec.h. Add avfilter_get_video_buffer_ref_from_frame() to libavfilter/avcodec.h.

@ -1643,18 +1643,13 @@ static int output_packet(AVInputStream *ist, int ist_index,
#if CONFIG_AVFILTER #if CONFIG_AVFILTER
if(ist->st->codec->codec_type == AVMEDIA_TYPE_VIDEO) { if(ist->st->codec->codec_type == AVMEDIA_TYPE_VIDEO) {
for(i=0;i<nb_ostreams;i++) { for(i=0;i<nb_ostreams;i++) {
AVFilterBufferRef *picref;
ost = ost_table[i]; ost = ost_table[i];
if (ost->input_video_filter && ost->source_index == ist_index) { if (ost->input_video_filter && ost->source_index == ist_index) {
if (!picture.sample_aspect_ratio.num) if (!picture.sample_aspect_ratio.num)
picture.sample_aspect_ratio = ist->st->sample_aspect_ratio; picture.sample_aspect_ratio = ist->st->sample_aspect_ratio;
picture.pts = ist->pts; picture.pts = ist->pts;
picref = av_vsrc_buffer_add_frame(ost->input_video_filter, &picture);
avfilter_get_video_buffer_ref_from_frame(&picture, AV_PERM_WRITE);
av_vsrc_buffer_add_video_buffer_ref(ost->input_video_filter, picref);
picref->buf->data[0] = NULL;
avfilter_unref_buffer(picref);
} }
} }
} }

@ -45,4 +45,13 @@ void avfilter_copy_frame_props(AVFilterBufferRef *dst, const AVFrame *src);
*/ */
AVFilterBufferRef *avfilter_get_video_buffer_ref_from_frame(const AVFrame *frame, int perms); AVFilterBufferRef *avfilter_get_video_buffer_ref_from_frame(const AVFrame *frame, int perms);
/**
* Add frame data to buffer_src.
*
* @param buffer_src pointer to a buffer source context
* @return >= 0 in case of success, a negative AVERROR code in case of
* failure
*/
int av_vsrc_buffer_add_frame(AVFilterContext *buffer_src, const AVFrame *frame);
#endif /* AVFILTER_AVCODEC_H */ #endif /* AVFILTER_AVCODEC_H */

@ -26,7 +26,7 @@
#include "libavutil/samplefmt.h" #include "libavutil/samplefmt.h"
#define LIBAVFILTER_VERSION_MAJOR 2 #define LIBAVFILTER_VERSION_MAJOR 2
#define LIBAVFILTER_VERSION_MINOR 7 #define LIBAVFILTER_VERSION_MINOR 8
#define LIBAVFILTER_VERSION_MICRO 0 #define LIBAVFILTER_VERSION_MICRO 0
#define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \ #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \

@ -106,6 +106,23 @@ int av_vsrc_buffer_add_video_buffer_ref(AVFilterContext *buffer_filter, AVFilter
return 0; return 0;
} }
#if CONFIG_AVCODEC
#include "avcodec.h"
int av_vsrc_buffer_add_frame(AVFilterContext *buffer_src, const AVFrame *frame)
{
AVFilterBufferRef *picref =
avfilter_get_video_buffer_ref_from_frame(frame, AV_PERM_WRITE);
if (!picref)
return AVERROR(ENOMEM);
av_vsrc_buffer_add_video_buffer_ref(buffer_src, picref);
picref->buf->data[0] = NULL;
avfilter_unref_buffer(picref);
return 0;
}
#endif
static av_cold int init(AVFilterContext *ctx, const char *args, void *opaque) static av_cold int init(AVFilterContext *ctx, const char *args, void *opaque)
{ {
BufferSourceContext *c = ctx->priv; BufferSourceContext *c = ctx->priv;

Loading…
Cancel
Save