mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-08 13:22:53 +02:00
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().
This commit is contained in:
parent
8b05e13df3
commit
720c6b78d1
3
avconv.c
3
avconv.c
@ -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,
|
av_buffersrc_write_frame(ist->filters[i]->filter, decoded_frame);
|
||||||
decoded_frame->pts, decoded_frame->sample_aspect_ratio);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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 */
|
||||||
|
Loading…
Reference in New Issue
Block a user