src_buffer: move format change check in a separate function.
This will make merging the check with the audio part easier.
This commit is contained in:
		
							parent
							
								
									3985ec0ee6
								
							
						
					
					
						commit
						f94b150a03
					
				@ -69,27 +69,12 @@ typedef struct {
 | 
				
			|||||||
        return AVERROR(EINVAL);\
 | 
					        return AVERROR(EINVAL);\
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int av_buffersrc_add_ref(AVFilterContext *buffer_filter,
 | 
					static int check_format_change_video(AVFilterContext *buffer_filter,
 | 
				
			||||||
                         AVFilterBufferRef *picref, int flags)
 | 
					                                     AVFilterBufferRef *picref)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    BufferSourceContext *c = buffer_filter->priv;
 | 
					    BufferSourceContext *c = buffer_filter->priv;
 | 
				
			||||||
    AVFilterLink *outlink = buffer_filter->outputs[0];
 | 
					 | 
				
			||||||
    AVFilterBufferRef *buf;
 | 
					 | 
				
			||||||
    int ret;
 | 
					    int ret;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (!picref) {
 | 
					 | 
				
			||||||
        c->eof = 1;
 | 
					 | 
				
			||||||
        return 0;
 | 
					 | 
				
			||||||
    } else if (c->eof)
 | 
					 | 
				
			||||||
        return AVERROR(EINVAL);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (!av_fifo_space(c->fifo) &&
 | 
					 | 
				
			||||||
        (ret = av_fifo_realloc2(c->fifo, av_fifo_size(c->fifo) +
 | 
					 | 
				
			||||||
                                         sizeof(buf))) < 0)
 | 
					 | 
				
			||||||
        return ret;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (!(flags & AV_BUFFERSRC_FLAG_NO_CHECK_FORMAT)) {
 | 
					 | 
				
			||||||
        /* TODO reindent */
 | 
					 | 
				
			||||||
    if (picref->video->w != c->w || picref->video->h != c->h || picref->format != c->pix_fmt) {
 | 
					    if (picref->video->w != c->w || picref->video->h != c->h || picref->format != c->pix_fmt) {
 | 
				
			||||||
        AVFilterContext *scale = buffer_filter->outputs[0]->dst;
 | 
					        AVFilterContext *scale = buffer_filter->outputs[0]->dst;
 | 
				
			||||||
        AVFilterLink *link;
 | 
					        AVFilterLink *link;
 | 
				
			||||||
@ -134,8 +119,44 @@ int av_buffersrc_add_ref(AVFilterContext *buffer_filter,
 | 
				
			|||||||
        if ((ret =  link->srcpad->config_props(link)) < 0)
 | 
					        if ((ret =  link->srcpad->config_props(link)) < 0)
 | 
				
			||||||
            return ret;
 | 
					            return ret;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    }
 | 
					    return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static int check_format_change(AVFilterContext *buffer_filter,
 | 
				
			||||||
 | 
					                               AVFilterBufferRef *picref)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    switch (buffer_filter->outputs[0]->type) {
 | 
				
			||||||
 | 
					    case AVMEDIA_TYPE_VIDEO:
 | 
				
			||||||
 | 
					        return check_format_change_video(buffer_filter, picref);
 | 
				
			||||||
 | 
					    default:
 | 
				
			||||||
 | 
					        return AVERROR(ENOSYS);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int av_buffersrc_add_ref(AVFilterContext *buffer_filter,
 | 
				
			||||||
 | 
					                         AVFilterBufferRef *picref, int flags)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    BufferSourceContext *c = buffer_filter->priv;
 | 
				
			||||||
 | 
					    AVFilterLink *outlink = buffer_filter->outputs[0];
 | 
				
			||||||
 | 
					    AVFilterBufferRef *buf;
 | 
				
			||||||
 | 
					    int ret;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (!picref) {
 | 
				
			||||||
 | 
					        c->eof = 1;
 | 
				
			||||||
 | 
					        return 0;
 | 
				
			||||||
 | 
					    } else if (c->eof)
 | 
				
			||||||
 | 
					        return AVERROR(EINVAL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (!av_fifo_space(c->fifo) &&
 | 
				
			||||||
 | 
					        (ret = av_fifo_realloc2(c->fifo, av_fifo_size(c->fifo) +
 | 
				
			||||||
 | 
					                                         sizeof(buf))) < 0)
 | 
				
			||||||
 | 
					        return ret;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (!(flags & AV_BUFFERSRC_FLAG_NO_CHECK_FORMAT)) {
 | 
				
			||||||
 | 
					        ret = check_format_change(buffer_filter, picref);
 | 
				
			||||||
 | 
					        if (ret < 0)
 | 
				
			||||||
 | 
					            return ret;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
    if (flags & AV_BUFFERSRC_FLAG_NO_COPY) {
 | 
					    if (flags & AV_BUFFERSRC_FLAG_NO_COPY) {
 | 
				
			||||||
        buf = picref;
 | 
					        buf = picref;
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user