Mercurial > mplayer.hg
view libaf/af_dummy.c @ 16829:c1aabebbe2e7
honor decoder's/filter's decision to remove frames when using -noskip.
this may go against the original intention of the vf layer, but it's
how all the filters that drop frames have been written to work, so
it's now the de-facto standard.
without this patch, -noskip will result in tons of duplicate frames
(either soft or hard duplicates) and a/v desync whenever decimation,
ivtc, etc. is used. even with this patch -noskip is still a bad idea
for most of these purposes, but it will work reliably with filmdint,
framestep, and some other filters with fixed in:out ratios as long as
the right -ofps value is used. without this patch, there is no hope of
-noskip working with frame-dropping filters.
(this patch was previously committed erroneously as part of another
change, then reversed. it is now being committed again.)
author | rfelker |
---|---|
date | Sun, 23 Oct 2005 07:37:55 +0000 |
parents | ca769ef8645e |
children | fd6f824ef894 |
line wrap: on
line source
/* The name speaks for itself this filter is a dummy and will not blow up regardless of what you do with it. */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "af.h" // Initialization and runtime control static int control(struct af_instance_s* af, int cmd, void* arg) { switch(cmd){ case AF_CONTROL_REINIT: memcpy(af->data,(af_data_t*)arg,sizeof(af_data_t)); af_msg(AF_MSG_VERBOSE,"[dummy] Was reinitialized: %iHz/%ich/%s\n", af->data->rate,af->data->nch,af_fmt2str_short(af->data->format)); return AF_OK; } return AF_UNKNOWN; } // Deallocate memory static void uninit(struct af_instance_s* af) { if(af->data) free(af->data); } // Filter data through filter static af_data_t* play(struct af_instance_s* af, af_data_t* data) { // Do something necessary to get rid of annoying warning during compile if(!af) af_msg(AF_MSG_ERROR,"EEEK: Argument af == NULL in af_dummy.c play()."); return data; } // Allocate memory and set function pointers static int open(af_instance_t* af){ af->control=control; af->uninit=uninit; af->play=play; af->mul.d=1; af->mul.n=1; af->data=malloc(sizeof(af_data_t)); if(af->data == NULL) return AF_ERROR; return AF_OK; } // Description of this filter af_info_t af_info_dummy = { "dummy", "dummy", "Anders", "", AF_FLAGS_REENTRANT, open };