Add AVFilterPicRef.pos field and make libavfilter propagate stream
byte position information, as stored in the pkt.pos, through the filterchain. Note that the pos field is added *non* at the end of the AVFilterPicRef struct, thus breaking ABI compatibility, which is allowed as the API is still considered non-stable. Originally committed as revision 22506 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
		
							parent
							
								
									ec7ab610d5
								
							
						
					
					
						commit
						5bb5c1dc86
					
				@ -171,11 +171,12 @@ int avfilter_config_links(AVFilterContext *filter)
 | 
				
			|||||||
static void dprintf_picref(void *ctx, AVFilterPicRef *picref, int end)
 | 
					static void dprintf_picref(void *ctx, AVFilterPicRef *picref, int end)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    dprintf(ctx,
 | 
					    dprintf(ctx,
 | 
				
			||||||
            "picref[%p data[%p, %p, %p, %p] linesize[%d, %d, %d, %d] pts:%"PRId64" a:%d/%d s:%dx%d]%s",
 | 
					            "picref[%p data[%p, %p, %p, %p] linesize[%d, %d, %d, %d] pts:%"PRId64" pos:%"PRId64" a:%d/%d s:%dx%d]%s",
 | 
				
			||||||
            picref,
 | 
					            picref,
 | 
				
			||||||
            picref->data    [0], picref->data    [1], picref->data    [2], picref->data    [3],
 | 
					            picref->data    [0], picref->data    [1], picref->data    [2], picref->data    [3],
 | 
				
			||||||
            picref->linesize[0], picref->linesize[1], picref->linesize[2], picref->linesize[3],
 | 
					            picref->linesize[0], picref->linesize[1], picref->linesize[2], picref->linesize[3],
 | 
				
			||||||
            picref->pts, picref->pixel_aspect.num, picref->pixel_aspect.den, picref->w, picref->h,
 | 
					            picref->pts, picref->pos,
 | 
				
			||||||
 | 
					            picref->pixel_aspect.num, picref->pixel_aspect.den, picref->w, picref->h,
 | 
				
			||||||
            end ? "\n" : "");
 | 
					            end ? "\n" : "");
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -263,6 +264,7 @@ void avfilter_start_frame(AVFilterLink *link, AVFilterPicRef *picref)
 | 
				
			|||||||
        link->cur_pic = avfilter_default_get_video_buffer(link, dst->min_perms, link->w, link->h);
 | 
					        link->cur_pic = avfilter_default_get_video_buffer(link, dst->min_perms, link->w, link->h);
 | 
				
			||||||
        link->srcpic = picref;
 | 
					        link->srcpic = picref;
 | 
				
			||||||
        link->cur_pic->pts = link->srcpic->pts;
 | 
					        link->cur_pic->pts = link->srcpic->pts;
 | 
				
			||||||
 | 
					        link->cur_pic->pos = link->srcpic->pos;
 | 
				
			||||||
        link->cur_pic->pixel_aspect = link->srcpic->pixel_aspect;
 | 
					        link->cur_pic->pixel_aspect = link->srcpic->pixel_aspect;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    else
 | 
					    else
 | 
				
			||||||
 | 
				
			|||||||
@ -105,6 +105,7 @@ typedef struct AVFilterPicRef
 | 
				
			|||||||
    int h;                      ///< image height
 | 
					    int h;                      ///< image height
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    int64_t pts;                ///< presentation timestamp in units of 1/AV_TIME_BASE
 | 
					    int64_t pts;                ///< presentation timestamp in units of 1/AV_TIME_BASE
 | 
				
			||||||
 | 
					    int64_t pos;                ///< byte position in stream, -1 if unknown
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    AVRational pixel_aspect;    ///< pixel aspect ratio
 | 
					    AVRational pixel_aspect;    ///< pixel aspect ratio
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -74,6 +74,7 @@ void avfilter_default_start_frame(AVFilterLink *link, AVFilterPicRef *picref)
 | 
				
			|||||||
    if(out) {
 | 
					    if(out) {
 | 
				
			||||||
        out->outpic      = avfilter_get_video_buffer(out, AV_PERM_WRITE, out->w, out->h);
 | 
					        out->outpic      = avfilter_get_video_buffer(out, AV_PERM_WRITE, out->w, out->h);
 | 
				
			||||||
        out->outpic->pts = picref->pts;
 | 
					        out->outpic->pts = picref->pts;
 | 
				
			||||||
 | 
					        out->outpic->pos = picref->pos;
 | 
				
			||||||
        out->outpic->pixel_aspect = picref->pixel_aspect;
 | 
					        out->outpic->pixel_aspect = picref->pixel_aspect;
 | 
				
			||||||
        avfilter_start_frame(out, avfilter_ref_pic(out->outpic, ~0));
 | 
					        avfilter_start_frame(out, avfilter_ref_pic(out->outpic, ~0));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user