diff options
author | Anton Khirnov <anton@khirnov.net> | 2011-12-31 16:40:43 +0100 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2012-05-14 21:36:11 +0200 |
commit | 720c6b78d1e8323d2df070e3da2f0ed305156c65 (patch) | |
tree | cfe68ed76432b10cee8466ccd38942dbcdbd3701 | |
parent | 8b05e13df3b25e186adaf19cf84f5fa93d829214 (diff) | |
download | ffmpeg-720c6b78d1e8323d2df070e3da2f0ed305156c65.tar.gz |
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().
-rw-r--r-- | avconv.c | 3 | ||||
-rw-r--r-- | libavfilter/buffersrc.c | 20 | ||||
-rw-r--r-- | libavfilter/buffersrc.h | 11 | ||||
-rw-r--r-- | libavfilter/version.h | 3 | ||||
-rw-r--r-- | libavfilter/vsrc_buffer.h | 2 |
5 files changed, 35 insertions, 4 deletions
@@ -2357,8 +2357,7 @@ static int transcode_video(InputStream *ist, AVPacket *pkt, int *got_output, int buf->refcount++; av_buffersrc_buffer(ist->filters[i]->filter, fb); } 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); diff --git a/libavfilter/buffersrc.c b/libavfilter/buffersrc.c index c7284c1ff8..58fc642a94 100644 --- a/libavfilter/buffersrc.c +++ b/libavfilter/buffersrc.c @@ -44,9 +44,27 @@ typedef struct { return AVERROR(EINVAL);\ } +#if FF_API_VSRC_BUFFER_ADD_FRAME int av_vsrc_buffer_add_frame(AVFilterContext *buffer_filter, AVFrame *frame, 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; AVFilterBufferRef *buf; int ret; @@ -70,8 +88,6 @@ int av_vsrc_buffer_add_frame(AVFilterContext *buffer_filter, AVFrame *frame, c->pix_fmt, c->w, c->h); 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) { avfilter_unref_buffer(buf); diff --git a/libavfilter/buffersrc.h b/libavfilter/buffersrc.h index 918a54faee..ca82a75df8 100644 --- a/libavfilter/buffersrc.h +++ b/libavfilter/buffersrc.h @@ -36,4 +36,15 @@ */ 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 */ diff --git a/libavfilter/version.h b/libavfilter/version.h index 71928f3f3b..967d40d919 100644 --- a/libavfilter/version.h +++ b/libavfilter/version.h @@ -50,5 +50,8 @@ #ifndef FF_API_SAMPLERATE64 #define FF_API_SAMPLERATE64 (LIBAVFILTER_VERSION_MAJOR < 3) #endif +#ifndef FF_API_VSRC_BUFFER_ADD_FRAME +#define FF_API_VSRC_BUFFER_ADD_FRAME (LIBAVFILTER_VERSION_MAJOR < 3) +#endif #endif // AVFILTER_VERSION_H diff --git a/libavfilter/vsrc_buffer.h b/libavfilter/vsrc_buffer.h index 13a209c768..cbcc6305bb 100644 --- a/libavfilter/vsrc_buffer.h +++ b/libavfilter/vsrc_buffer.h @@ -29,7 +29,9 @@ #include "libavcodec/avcodec.h" /* AVFrame */ #include "avfilter.h" +#if FF_API_VSRC_BUFFER_ADD_FRAME int av_vsrc_buffer_add_frame(AVFilterContext *buffer_filter, AVFrame *frame, int64_t pts, AVRational pixel_aspect); +#endif #endif /* AVFILTER_VSRC_BUFFER_H */ |