2 Copyright (C) 2002 Michael Niedermayer <michaelni@gmx.at>
4 This program is free software; you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation; either version 2 of the License, or
7 (at your option) any later version.
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
14 You should have received a copy of the GNU General Public License
15 along with this program; if not, write to the Free Software
16 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
32 #include "img_format.h"
35 #include "libvo/fastmemcpy.h"
38 //===========================================================================//
40 static void get_image(struct vf_instance_s
* vf
, mp_image_t
*mpi
){
41 mp_image_t
*dmpi
= vf_get_image(vf
->next
, mpi
->imgfmt
,
42 mpi
->type
, mpi
->flags
, mpi
->w
, mpi
->h
);
44 mpi
->planes
[0]=dmpi
->planes
[0];
45 mpi
->planes
[1]=dmpi
->planes
[2];
46 mpi
->planes
[2]=dmpi
->planes
[1];
47 mpi
->stride
[0]=dmpi
->stride
[0];
48 mpi
->stride
[1]=dmpi
->stride
[2];
49 mpi
->stride
[2]=dmpi
->stride
[1];
50 mpi
->width
=dmpi
->width
;
52 mpi
->flags
|=MP_IMGFLAG_DIRECT
;
53 mpi
->priv
=(void*)dmpi
;
56 static int put_image(struct vf_instance_s
* vf
, mp_image_t
*mpi
, double pts
){
59 if(mpi
->flags
&MP_IMGFLAG_DIRECT
){
60 dmpi
=(mp_image_t
*)mpi
->priv
;
62 dmpi
=vf_get_image(vf
->next
, mpi
->imgfmt
, MP_IMGTYPE_EXPORT
, 0, mpi
->w
, mpi
->h
);
63 assert(mpi
->flags
&MP_IMGFLAG_PLANAR
);
64 dmpi
->planes
[0]=mpi
->planes
[0];
65 dmpi
->planes
[1]=mpi
->planes
[2];
66 dmpi
->planes
[2]=mpi
->planes
[1];
67 dmpi
->stride
[0]=mpi
->stride
[0];
68 dmpi
->stride
[1]=mpi
->stride
[2];
69 dmpi
->stride
[2]=mpi
->stride
[1];
70 dmpi
->width
=mpi
->width
;
73 vf_clone_mpi_attributes(dmpi
, mpi
);
75 return vf_next_put_image(vf
,dmpi
, pts
);
78 //===========================================================================//
80 static int query_format(struct vf_instance_s
* vf
, unsigned int fmt
){
90 return vf_next_query_format(vf
, fmt
);
95 static int open(vf_instance_t
*vf
, char* args
){
96 vf
->put_image
=put_image
;
97 vf
->get_image
=get_image
;
98 vf
->query_format
=query_format
;
102 vf_info_t vf_info_swapuv
= {
105 "Michael Niedermayer",
111 //===========================================================================//