lavfi: add ff_inlink_acknowledge_status().
Also introduce libavfilter/filters.h for all functions needed to implement filters.
This commit is contained in:
		
							parent
							
								
									485617ea0f
								
							
						
					
					
						commit
						4c24f3ac16
					
				| @ -39,6 +39,7 @@ | |||||||
| 
 | 
 | ||||||
| #include "audio.h" | #include "audio.h" | ||||||
| #include "avfilter.h" | #include "avfilter.h" | ||||||
|  | #include "filters.h" | ||||||
| #include "formats.h" | #include "formats.h" | ||||||
| #include "internal.h" | #include "internal.h" | ||||||
| 
 | 
 | ||||||
| @ -1543,6 +1544,21 @@ int ff_filter_activate(AVFilterContext *filter) | |||||||
|     return ret; |     return ret; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | int ff_inlink_acknowledge_status(AVFilterLink *link, int *rstatus, int64_t *rpts) | ||||||
|  | { | ||||||
|  |     *rpts = link->current_pts; | ||||||
|  |     if (ff_framequeue_queued_frames(&link->fifo)) | ||||||
|  |         return *rstatus = 0; | ||||||
|  |     if (link->status_out) | ||||||
|  |         return *rstatus = link->status_out; | ||||||
|  |     if (!link->status_in) | ||||||
|  |         return *rstatus = 0; | ||||||
|  |     *rstatus = link->status_out = link->status_in; | ||||||
|  |     ff_update_link_current_pts(link, link->status_in_pts); | ||||||
|  |     *rpts = link->current_pts; | ||||||
|  |     return 1; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| const AVClass *avfilter_get_class(void) | const AVClass *avfilter_get_class(void) | ||||||
| { | { | ||||||
|     return &avfilter_class; |     return &avfilter_class; | ||||||
|  | |||||||
							
								
								
									
										53
									
								
								libavfilter/filters.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								libavfilter/filters.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,53 @@ | |||||||
|  | /*
 | ||||||
|  |  * Filters implementation helper functions | ||||||
|  |  * | ||||||
|  |  * This file is part of FFmpeg. | ||||||
|  |  * | ||||||
|  |  * FFmpeg is free software; you can redistribute it and/or | ||||||
|  |  * modify it under the terms of the GNU Lesser General Public License | ||||||
|  |  * as published by the Free Software Foundation; either | ||||||
|  |  * version 2.1 of the License, or (at your option) any later version. | ||||||
|  |  * | ||||||
|  |  * FFmpeg is distributed in the hope that it will be useful, | ||||||
|  |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
|  |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
|  |  * GNU Lesser General Public License for more details. | ||||||
|  |  * | ||||||
|  |  * You should have received a copy of the GNU Lesser General Public License | ||||||
|  |  * along with FFmpeg; if not, write to the Free Software Foundation, Inc., | ||||||
|  |  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | #ifndef AVFILTER_FILTERS_H | ||||||
|  | #define AVFILTER_FILTERS_H | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * Filters implementation helper functions | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | #include "avfilter.h" | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * Test and acknowledge the change of status on the link. | ||||||
|  |  * | ||||||
|  |  * Status means EOF or an error condition; a change from the normal (0) | ||||||
|  |  * status to a non-zero status can be queued in a filter's input link, it | ||||||
|  |  * becomes relevant after the frames queued in the link's FIFO are | ||||||
|  |  * processed. This function tests if frames are still queued and if a queued | ||||||
|  |  * status change has not yet been processed. In that case it performs basic | ||||||
|  |  * treatment (updating the link's timestamp) and returns a positive value to | ||||||
|  |  * let the filter do its own treatments (flushing...). | ||||||
|  |  * | ||||||
|  |  * Filters implementing the activate callback should call this function when | ||||||
|  |  * they think it might succeed (usually after checking unsuccessfully for a | ||||||
|  |  * queued frame). | ||||||
|  |  * Filters implementing the filter_frame and request_frame callbacks do not | ||||||
|  |  * need to call that since the same treatment happens in ff_filter_frame(). | ||||||
|  |  * | ||||||
|  |  * @param[out] rstatus  new or current status | ||||||
|  |  * @param[out] rpts     current timestamp of the link in link time base | ||||||
|  |  * @return  >0 if status changed, <0 if status already acked, 0 otherwise | ||||||
|  |  */ | ||||||
|  | int ff_inlink_acknowledge_status(AVFilterLink *link, int *rstatus, int64_t *rpts); | ||||||
|  | 
 | ||||||
|  | #endif /* AVFILTER_FILTERS_H */ | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user