You've already forked FFmpeg
							
							
				mirror of
				https://github.com/FFmpeg/FFmpeg.git
				synced 2025-10-30 23:18:11 +02:00 
			
		
		
		
	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:
		| @@ -13,6 +13,9 @@ libavutil:   2011-04-18 | ||||
|  | ||||
| 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 | ||||
|   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(ist->st->codec->codec_type == AVMEDIA_TYPE_VIDEO) { | ||||
|             for(i=0;i<nb_ostreams;i++) { | ||||
|                 AVFilterBufferRef *picref; | ||||
|                 ost = ost_table[i]; | ||||
|                 if (ost->input_video_filter && ost->source_index == ist_index) { | ||||
|                     if (!picture.sample_aspect_ratio.num) | ||||
|                         picture.sample_aspect_ratio = ist->st->sample_aspect_ratio; | ||||
|                     picture.pts = ist->pts; | ||||
|  | ||||
|                     picref = | ||||
|                         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); | ||||
|                     av_vsrc_buffer_add_frame(ost->input_video_filter, &picture); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|   | ||||
| @@ -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); | ||||
|  | ||||
| /** | ||||
|  * 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 */ | ||||
|   | ||||
| @@ -26,7 +26,7 @@ | ||||
| #include "libavutil/samplefmt.h" | ||||
|  | ||||
| #define LIBAVFILTER_VERSION_MAJOR  2 | ||||
| #define LIBAVFILTER_VERSION_MINOR  7 | ||||
| #define LIBAVFILTER_VERSION_MINOR  8 | ||||
| #define LIBAVFILTER_VERSION_MICRO  0 | ||||
|  | ||||
| #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; | ||||
| } | ||||
|  | ||||
| #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) | ||||
| { | ||||
|     BufferSourceContext *c = ctx->priv; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user