Browse Source

buffersrc: add av_buffersrc_write_frame().

It's the same as av_vsrc_buffer_add_frame(), except it doesn't take pts
or pixel_aspect parameters. Those are read from AVFrame.

Deprecate av_vsrc_buffer_add_frame().
tags/n0.11
Anton Khirnov 14 years ago
parent
commit
720c6b78d1
5 changed files with 35 additions and 4 deletions
  1. +1
    -2
      avconv.c
  2. +18
    -2
      libavfilter/buffersrc.c
  3. +11
    -0
      libavfilter/buffersrc.h
  4. +3
    -0
      libavfilter/version.h
  5. +2
    -0
      libavfilter/vsrc_buffer.h

+ 1
- 2
avconv.c View File

@@ -2357,8 +2357,7 @@ static int transcode_video(InputStream *ist, AVPacket *pkt, int *got_output, int
buf->refcount++; buf->refcount++;
av_buffersrc_buffer(ist->filters[i]->filter, fb); av_buffersrc_buffer(ist->filters[i]->filter, fb);
} else } else
av_vsrc_buffer_add_frame(ist->filters[i]->filter, decoded_frame,
decoded_frame->pts, decoded_frame->sample_aspect_ratio);
av_buffersrc_write_frame(ist->filters[i]->filter, decoded_frame);
} }


av_free(buffer_to_free); av_free(buffer_to_free);


+ 18
- 2
libavfilter/buffersrc.c View File

@@ -44,8 +44,26 @@ typedef struct {
return AVERROR(EINVAL);\ return AVERROR(EINVAL);\
} }


#if FF_API_VSRC_BUFFER_ADD_FRAME
int av_vsrc_buffer_add_frame(AVFilterContext *buffer_filter, AVFrame *frame, int av_vsrc_buffer_add_frame(AVFilterContext *buffer_filter, AVFrame *frame,
int64_t pts, AVRational pixel_aspect) int64_t pts, AVRational pixel_aspect)
{
int64_t orig_pts = frame->pts;
AVRational orig_sar = frame->sample_aspect_ratio;
int ret;

frame->pts = pts;
frame->sample_aspect_ratio = pixel_aspect;
if ((ret = av_buffersrc_write_frame(buffer_filter, frame)) < 0)
return ret;
frame->pts = orig_pts;
frame->sample_aspect_ratio = orig_sar;

return 0;
}
#endif

int av_buffersrc_write_frame(AVFilterContext *buffer_filter, AVFrame *frame)
{ {
BufferSourceContext *c = buffer_filter->priv; BufferSourceContext *c = buffer_filter->priv;
AVFilterBufferRef *buf; AVFilterBufferRef *buf;
@@ -70,8 +88,6 @@ int av_vsrc_buffer_add_frame(AVFilterContext *buffer_filter, AVFrame *frame,
c->pix_fmt, c->w, c->h); c->pix_fmt, c->w, c->h);


avfilter_copy_frame_props(buf, frame); avfilter_copy_frame_props(buf, frame);
buf->pts = pts;
buf->video->pixel_aspect = pixel_aspect;


if ((ret = av_fifo_generic_write(c->fifo, &buf, sizeof(buf), NULL)) < 0) { if ((ret = av_fifo_generic_write(c->fifo, &buf, sizeof(buf), NULL)) < 0) {
avfilter_unref_buffer(buf); avfilter_unref_buffer(buf);


+ 11
- 0
libavfilter/buffersrc.h View File

@@ -36,4 +36,15 @@
*/ */
int av_buffersrc_buffer(AVFilterContext *s, AVFilterBufferRef *buf); int av_buffersrc_buffer(AVFilterContext *s, AVFilterBufferRef *buf);


/**
* Add a frame to the buffer source.
*
* @param s an instance of the buffersrc filter.
* @param frame frame to be added.
*
* @warning frame data will be memcpy()ed, which may be a big performance
* hit. Use av_buffersrc_buffer() to avoid copying the data.
*/
int av_buffersrc_write_frame(AVFilterContext *s, AVFrame *frame);

#endif /* AVFILTER_BUFFERSRC_H */ #endif /* AVFILTER_BUFFERSRC_H */

+ 3
- 0
libavfilter/version.h View File

@@ -50,5 +50,8 @@
#ifndef FF_API_SAMPLERATE64 #ifndef FF_API_SAMPLERATE64
#define FF_API_SAMPLERATE64 (LIBAVFILTER_VERSION_MAJOR < 3) #define FF_API_SAMPLERATE64 (LIBAVFILTER_VERSION_MAJOR < 3)
#endif #endif
#ifndef FF_API_VSRC_BUFFER_ADD_FRAME
#define FF_API_VSRC_BUFFER_ADD_FRAME (LIBAVFILTER_VERSION_MAJOR < 3)
#endif


#endif // AVFILTER_VERSION_H #endif // AVFILTER_VERSION_H

+ 2
- 0
libavfilter/vsrc_buffer.h View File

@@ -29,7 +29,9 @@
#include "libavcodec/avcodec.h" /* AVFrame */ #include "libavcodec/avcodec.h" /* AVFrame */
#include "avfilter.h" #include "avfilter.h"


#if FF_API_VSRC_BUFFER_ADD_FRAME
int av_vsrc_buffer_add_frame(AVFilterContext *buffer_filter, AVFrame *frame, int av_vsrc_buffer_add_frame(AVFilterContext *buffer_filter, AVFrame *frame,
int64_t pts, AVRational pixel_aspect); int64_t pts, AVRational pixel_aspect);
#endif


#endif /* AVFILTER_VSRC_BUFFER_H */ #endif /* AVFILTER_VSRC_BUFFER_H */

Loading…
Cancel
Save