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
| @@ -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); | ||||
| @@ -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); | ||||
| @@ -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 */ | ||||
| @@ -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 | ||||
| @@ -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 */ | ||||