mirror of
https://github.com/mpv-player/mpv
synced 2024-12-18 21:06:00 +00:00
Adding functionality for adding filters during execution
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@7650 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
parent
1b19920692
commit
f8e93e8037
32
libaf/af.c
32
libaf/af.c
@ -156,7 +156,9 @@ void af_remove(af_stream_t* s, af_instance_t* af)
|
||||
free(af);
|
||||
}
|
||||
|
||||
/* Reinitializes all filters downstream from the filter given in the argument */
|
||||
/* Reinitializes all filters downstream from the filter given in the
|
||||
argument the return value is AF_OK if success and AF_ERROR if
|
||||
failure */
|
||||
int af_reinit(af_stream_t* s, af_instance_t* af)
|
||||
{
|
||||
if(!af)
|
||||
@ -364,6 +366,31 @@ int af_init(af_stream_t* s)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Add filter during execution. This function adds the filter "name"
|
||||
to the stream s. The filter will be inserted somewhere nice in the
|
||||
list of filters. The return value is a pointer to the new filter,
|
||||
If the filter couldn't be added the return value is NULL. */
|
||||
af_instance_t* af_add(af_stream_t* s, char* name){
|
||||
af_instance_t* new;
|
||||
// Sanity check
|
||||
if(!s || !s->first || !name)
|
||||
return NULL;
|
||||
// Insert the filter somwhere nice
|
||||
if(!strcmp(s->first->info->name,"format"))
|
||||
new = af_append(s, s->first, name);
|
||||
else
|
||||
new = af_prepend(s, s->first, name);
|
||||
if(!new)
|
||||
return NULL;
|
||||
|
||||
// Reinitalize the filter list
|
||||
if(AF_OK != af_reinit(s, s->first)){
|
||||
free(new);
|
||||
return NULL;
|
||||
}
|
||||
return new;
|
||||
}
|
||||
|
||||
// Filter data chunk through the filters in the list
|
||||
af_data_t* af_play(af_stream_t* s, af_data_t* data)
|
||||
{
|
||||
@ -451,9 +478,6 @@ int af_calc_insize_constrained(af_stream_t* s, int len,
|
||||
in+=t;
|
||||
}
|
||||
|
||||
// printf("Could no meet constraint nr 3. in=%d out=%d len=%d max_in=%d max_out=%d",
|
||||
// in,out,len,max_insize,max_outsize);
|
||||
|
||||
// Could no meet constraint nr 3.
|
||||
while(out > max_outsize || in > max_insize){
|
||||
in-=t;
|
||||
|
18
libaf/af.h
18
libaf/af.h
@ -138,19 +138,37 @@ typedef struct af_stream_s
|
||||
stream will be reinitialized. The return value is 0 if sucess and
|
||||
-1 if failure */
|
||||
int af_init(af_stream_t* s);
|
||||
|
||||
// Uninit and remove all filters
|
||||
void af_uninit(af_stream_t* s);
|
||||
|
||||
/* Add filter during execution. This function adds the filter "name"
|
||||
to the stream s. The filter will be inserted somewhere nice in the
|
||||
list of filters. The return value is a pointer to the new filter,
|
||||
If the filter couldn't be added the return value is NULL. */
|
||||
af_instance_t* af_add(af_stream_t* s, char* name);
|
||||
|
||||
// Uninit and remove the filter "af"
|
||||
void af_remove(af_stream_t* s, af_instance_t* af);
|
||||
|
||||
/* Find filter in the dynamic filter list using it's name This
|
||||
function is used for finding already initialized filters */
|
||||
af_instance_t* af_get(af_stream_t* s, char* name);
|
||||
|
||||
// Filter data chunk through the filters in the list
|
||||
af_data_t* af_play(af_stream_t* s, af_data_t* data);
|
||||
|
||||
/* Calculate how long the output from the filters will be given the
|
||||
input length "len". The calculated length is >= the actual
|
||||
length */
|
||||
int af_outputlen(af_stream_t* s, int len);
|
||||
|
||||
/* Calculate how long the input to the filters should be to produce a
|
||||
certain output length, i.e. the return value of this function is
|
||||
the input length required to produce the output length "len". The
|
||||
calculated length is <= the actual length */
|
||||
int af_inputlen(af_stream_t* s, int len);
|
||||
|
||||
/* Calculate how long the input IN to the filters should be to produce
|
||||
a certain output length OUT but with the following three constraints:
|
||||
1. IN <= max_insize, where max_insize is the maximum possible input
|
||||
|
Loading…
Reference in New Issue
Block a user