FFmpeg
1.2.4
Main Page
Related Pages
Modules
Data Structures
Files
Examples
File List
Globals
libavfilter
libmpcodecs
vf_fil.c
Go to the documentation of this file.
1
/*
2
* This file is part of MPlayer.
3
*
4
* MPlayer 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.
8
*
9
* MPlayer 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.
13
*
14
* You should have received a copy of the GNU General Public License along
15
* with MPlayer; if not, write to the Free Software Foundation, Inc.,
16
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
17
*/
18
19
#include <stdio.h>
20
#include <stdlib.h>
21
#include <string.h>
22
23
#include "
config.h
"
24
#include "
mp_msg.h
"
25
26
#include "
mp_image.h
"
27
#include "
vf.h
"
28
29
struct
vf_priv_s
{
30
int
interleave
;
31
int
height
;
32
int
width
;
33
int
stridefactor
;
34
};
35
36
//===========================================================================//
37
38
static
int
config
(
struct
vf_instance
*vf,
39
int
width
,
int
height
,
int
d_width,
int
d_height,
40
unsigned
int
flags
,
unsigned
int
outfmt){
41
int
pixel_stride= (width+15)&~15;
//FIXME this is ust a guess ... especially for non planar its somewhat bad one
42
43
#if 0
44
if
(mpi->flags&
MP_IMGFLAG_PLANAR
)
45
pixel_stride= mpi->stride[0];
46
else
47
pixel_stride= 8*mpi->stride[0] / mpi->bpp;
48
49
#endif
50
51
if
(vf->
priv
->
interleave
){
52
vf->
priv
->
height
= 2*
height
;
53
vf->
priv
->
width
= width - (pixel_stride/2);
54
vf->
priv
->
stridefactor
=1;
55
}
else
{
56
vf->
priv
->
height
= height/2;
57
vf->
priv
->
width
= width + pixel_stride;
58
vf->
priv
->
stridefactor
=4;
59
}
60
//printf("hX %d %d %d\n", vf->priv->width,vf->priv->height,vf->priv->stridefactor);
61
62
return
ff_vf_next_config
(vf, vf->
priv
->
width
, vf->
priv
->
height
,
63
(d_width*vf->
priv
->
stridefactor
)>>1, 2*d_height/vf->
priv
->
stridefactor
, flags, outfmt);
64
}
65
66
static
int
put_image
(
struct
vf_instance
*vf,
mp_image_t
*mpi,
double
pts){
67
if
(mpi->
flags
&
MP_IMGFLAG_DIRECT
){
68
// we've used DR, so we're ready...
69
return
ff_vf_next_put_image
(vf,(
mp_image_t
*)mpi->
priv
, pts);
70
}
71
72
vf->
dmpi
=
ff_vf_get_image
(vf->
next
,mpi->
imgfmt
,
73
MP_IMGTYPE_EXPORT
,
MP_IMGFLAG_ACCEPT_STRIDE
,
74
vf->
priv
->
width
, vf->
priv
->
height
);
75
76
// set up mpi as a double-stride image of dmpi:
77
vf->
dmpi
->
planes
[0]=mpi->
planes
[0];
78
vf->
dmpi
->
stride
[0]=(mpi->
stride
[0]*vf->
priv
->
stridefactor
)>>1;
79
if
(vf->
dmpi
->
flags
&
MP_IMGFLAG_PLANAR
){
80
vf->
dmpi
->
planes
[1]=mpi->
planes
[1];
81
vf->
dmpi
->
stride
[1]=(mpi->
stride
[1]*vf->
priv
->
stridefactor
)>>1;
82
vf->
dmpi
->
planes
[2]=mpi->
planes
[2];
83
vf->
dmpi
->
stride
[2]=(mpi->
stride
[2]*vf->
priv
->
stridefactor
)>>1;
84
}
else
85
vf->
dmpi
->
planes
[1]=mpi->
planes
[1];
// passthru bgr8 palette!!!
86
87
return
ff_vf_next_put_image
(vf,vf->
dmpi
, pts);
88
}
89
90
//===========================================================================//
91
92
static
void
uninit
(
struct
vf_instance
*vf)
93
{
94
free(vf->
priv
);
95
}
96
97
static
int
vf_open
(
vf_instance_t
*vf,
char
*args){
98
vf->
config
=
config
;
99
vf->
put_image
=
put_image
;
100
vf->
uninit
=
uninit
;
101
vf->
default_reqs
=
VFCAP_ACCEPT_STRIDE
;
102
vf->
priv
=calloc(1,
sizeof
(
struct
vf_priv_s
));
103
vf->
priv
->
interleave
= args && (*args ==
'i'
);
104
return
1;
105
}
106
107
const
vf_info_t
ff_vf_info_fil
= {
108
"fast (de)interleaver"
,
109
"fil"
,
110
"Michael Niedermayer"
,
111
""
,
112
vf_open
,
113
NULL
114
};
115
116
//===========================================================================//
Generated on Fri Nov 29 2013 19:15:15 for FFmpeg by
1.8.1.2