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.
This commit is contained in:
		
							parent
							
								
									d3fddb8454
								
							
						
					
					
						commit
						c000a9f783
					
				@ -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.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										7
									
								
								ffmpeg.c
									
									
									
									
									
								
							
							
						
						
									
										7
									
								
								ffmpeg.c
									
									
									
									
									
								
							@ -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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user