@@ -24,6 +24,7 @@ struct priv {
2424
2525 int * imgfmts ;
2626 int * subfmts ;
27+ uint8_t * priorities ;
2728 int num_imgfmts ;
2829 struct mp_image_params imgparams ;
2930 bool imgparams_set ;
@@ -69,15 +70,20 @@ void mp_autoconvert_clear(struct mp_autoconvert *c)
6970 p -> force_update = true;
7071}
7172
72- void mp_autoconvert_add_imgfmt (struct mp_autoconvert * c , int imgfmt , int subfmt )
73+ void mp_autoconvert_add_imgfmt (struct mp_autoconvert * c , int imgfmt ,
74+ int subfmt , uint8_t priority )
7375{
7476 struct priv * p = c -> f -> priv ;
7577
76- MP_TARRAY_GROW (p , p -> imgfmts , p -> num_imgfmts );
77- MP_TARRAY_GROW (p , p -> subfmts , p -> num_imgfmts );
78+ const int i = p -> num_imgfmts ;
7879
79- p -> imgfmts [p -> num_imgfmts ] = imgfmt ;
80- p -> subfmts [p -> num_imgfmts ] = subfmt ;
80+ MP_TARRAY_GROW (p , p -> imgfmts , i );
81+ MP_TARRAY_GROW (p , p -> subfmts , i );
82+ MP_TARRAY_GROW (p , p -> priorities , i );
83+
84+ p -> imgfmts [i ] = imgfmt ;
85+ p -> subfmts [i ] = subfmt ;
86+ p -> priorities [i ] = priority ;
8187
8288 p -> num_imgfmts += 1 ;
8389 p -> force_update = true;
@@ -97,14 +103,14 @@ void mp_autoconvert_set_target_image_params(struct mp_autoconvert *c,
97103 p -> imgparams_set = true;
98104
99105 p -> num_imgfmts = 0 ;
100- mp_autoconvert_add_imgfmt (c , par -> imgfmt , par -> hw_subfmt );
106+ mp_autoconvert_add_imgfmt (c , par -> imgfmt , par -> hw_subfmt , 1 );
101107}
102108
103109void mp_autoconvert_add_all_sw_imgfmts (struct mp_autoconvert * c )
104110{
105111 for (int n = IMGFMT_START ; n < IMGFMT_END ; n ++ ) {
106112 if (!IMGFMT_IS_HWACCEL (n ))
107- mp_autoconvert_add_imgfmt (c , n , 0 );
113+ mp_autoconvert_add_imgfmt (c , n , 0 , 1 );
108114 }
109115}
110116
@@ -307,7 +313,8 @@ static bool build_image_converter(struct mp_autoconvert *c, struct mp_log *log,
307313
308314 sws -> force_scaler = c -> force_scaler ;
309315
310- int out = mp_sws_find_best_out_format (sws , src_fmt , fmts , num_fmts );
316+ int out = mp_sws_find_best_out_format (sws , src_fmt , fmts ,
317+ p -> priorities , num_fmts );
311318 if (!out ) {
312319 mp_err (log , "can't find video conversion for %s\n" ,
313320 mp_imgfmt_to_name (src_fmt ));
0 commit comments