9 #include "img_format.h"
13 #include "libswscale/rgb2rgb.h"
15 //===========================================================================//
22 static unsigned int getfmt(unsigned int outfmt
,int forced
){
23 if(forced
) switch(outfmt
){
31 case IMGFMT_RGB24
: return IMGFMT_BGR24
;
32 case IMGFMT_RGB32
: return IMGFMT_BGR32
;
33 case IMGFMT_BGR24
: return IMGFMT_RGB24
;
34 case IMGFMT_BGR32
: return IMGFMT_RGB32
;
39 static int config(struct vf_instance_s
* vf
,
40 int width
, int height
, int d_width
, int d_height
,
41 unsigned int flags
, unsigned int outfmt
){
42 vf
->priv
->fmt
=getfmt(outfmt
,vf
->priv
->forced
);
43 return vf_next_config(vf
,width
,height
,d_width
,d_height
,flags
,vf
->priv
->fmt
);
46 static int put_image(struct vf_instance_s
* vf
, mp_image_t
*mpi
, double pts
){
49 // hope we'll get DR buffer:
50 dmpi
=vf_get_image(vf
->next
,vf
->priv
->fmt
,
51 MP_IMGTYPE_TEMP
, MP_IMGFLAG_ACCEPT_STRIDE
,
54 if(mpi
->stride
[0]!=dmpi
->stride
[0] || mpi
->stride
[0]!=mpi
->w
*(mpi
->bpp
/8)){
56 unsigned char* src
=mpi
->planes
[0];
57 unsigned char* dst
=dmpi
->planes
[0];
58 int srcsize
=mpi
->w
*mpi
->bpp
/8;
59 for(y
=0;y
<mpi
->h
;y
++){
61 rgb32tobgr32(src
,dst
,srcsize
);
63 rgb24tobgr24(src
,dst
,srcsize
);
69 rgb32tobgr32(mpi
->planes
[0],dmpi
->planes
[0],mpi
->w
*mpi
->h
*4);
71 rgb24tobgr24(mpi
->planes
[0],dmpi
->planes
[0],mpi
->w
*mpi
->h
*3);
74 return vf_next_put_image(vf
,dmpi
, pts
);
77 //===========================================================================//
79 static int query_format(struct vf_instance_s
* vf
, unsigned int outfmt
){
80 unsigned int fmt
=getfmt(outfmt
,vf
->priv
->forced
);
82 return vf_next_query_format(vf
,fmt
) & (~VFCAP_CSP_SUPPORTED_BY_HW
);
85 static int open(vf_instance_t
*vf
, char* args
){
87 vf
->put_image
=put_image
;
88 vf
->query_format
=query_format
;
89 vf
->priv
=malloc(sizeof(struct vf_priv_s
));
90 vf
->priv
->forced
=args
&& !strcasecmp(args
,"swap");
94 const vf_info_t vf_info_rgb2bgr
= {
95 "fast 24/32bpp RGB<->BGR conversion",
103 //===========================================================================//