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 "avfilter.h" | ||||
| #include "filters.h" | ||||
| #include "formats.h" | ||||
| #include "internal.h" | ||||
| 
 | ||||
| @ -1543,6 +1544,21 @@ int ff_filter_activate(AVFilterContext *filter) | ||||
|     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) | ||||
| { | ||||
|     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