summaryrefslogtreecommitdiffstats
path: root/libmpcodecs/vf_scale.c
diff options
context:
space:
mode:
authormichael <michael@b3059339-0415-0410-9bf9-f77b7e298cf2>2003-11-03 12:15:32 +0000
committermichael <michael@b3059339-0415-0410-9bf9-f77b7e298cf2>2003-11-03 12:15:32 +0000
commit0334cc4729b603a86af74b7a285b0e70c746dffc (patch)
treeef58109b97ea41996e7c4e65d5ec01a187d5a633 /libmpcodecs/vf_scale.c
parentf10ca60dbd0f6b368ad2fb4e1278de0c324b742e (diff)
downloadmpv-0334cc4729b603a86af74b7a285b0e70c746dffc.tar.bz2
mpv-0334cc4729b603a86af74b7a285b0e70c746dffc.tar.xz
another lame workaround for the g1 filter layer ...
now filter chains with >8 scale filters initalize before u fall asleep git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@11374 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libmpcodecs/vf_scale.c')
-rw-r--r--libmpcodecs/vf_scale.c27
1 files changed, 19 insertions, 8 deletions
diff --git a/libmpcodecs/vf_scale.c b/libmpcodecs/vf_scale.c
index 2d1a5572f7..8b36fe119c 100644
--- a/libmpcodecs/vf_scale.c
+++ b/libmpcodecs/vf_scale.c
@@ -25,6 +25,7 @@ static struct vf_priv_s {
unsigned int fmt;
struct SwsContext *ctx;
unsigned char* palette;
+ int query_format_cache[64];
} vf_priv_dflt = {
-1,-1,
0,
@@ -77,14 +78,24 @@ static unsigned int outfmt_list[]={
static unsigned int find_best_out(vf_instance_t *vf){
unsigned int best=0;
- unsigned int* p=outfmt_list;
+ int i;
+
// find the best outfmt:
- while(*p){
- int ret=vf_next_query_format(vf,*p);
- mp_msg(MSGT_VFILTER,MSGL_DBG2,"scale: query(%s) -> %d\n",vo_format_name(*p),ret&3);
- if(ret&VFCAP_CSP_SUPPORTED_BY_HW){ best=*p; break;} // no conversion -> bingo!
- if(ret&VFCAP_CSP_SUPPORTED && !best) best=*p; // best with conversion
- ++p;
+ for(i=0; i<sizeof(outfmt_list)/sizeof(int)-1; i++){
+ const int format= outfmt_list[i];
+ int ret= vf->priv->query_format_cache[i]-1;
+ if(ret == -1){
+ ret= vf_next_query_format(vf, outfmt_list[i]);
+ vf->priv->query_format_cache[i]= ret+1;
+ }
+
+ mp_msg(MSGT_VFILTER,MSGL_DBG2,"scale: query(%s) -> %d\n",vo_format_name(format),ret&3);
+ if(ret&VFCAP_CSP_SUPPORTED_BY_HW){
+ best=format; // no conversion -> bingo!
+ break;
+ }
+ if(ret&VFCAP_CSP_SUPPORTED && !best)
+ best=format; // best with conversion
}
return best;
}
@@ -437,7 +448,7 @@ void sws_getFlagsAndFilterFromCmdLine(int *flags, SwsFilter **srcFilterParam, Sw
src_filter= sws_getDefaultFilter(
sws_lum_gblur, sws_chr_gblur,
sws_lum_sharpen, sws_chr_sharpen,
- sws_chr_vshift, sws_chr_hshift, verbose>1);
+ sws_chr_hshift, sws_chr_vshift, verbose>1);
switch(sws_flags)
{