annotate libmpcodecs/vf_field.c @ 14685:4b02f759f529

small reordering to make future 'multiple files' changes more modular, puts single file loading separate from global option loading in the begginning. patch by Oded Shimon
author reynaldo
date Sat, 12 Feb 2005 15:11:02 +0000
parents 7d6a854a5fe5
children 1cb1a9584c3b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
9072
d7237ee9db7f new video filter to extract a single field using stride arithmetic,
rfelker
parents:
diff changeset
1 #include <stdio.h>
d7237ee9db7f new video filter to extract a single field using stride arithmetic,
rfelker
parents:
diff changeset
2 #include <stdlib.h>
d7237ee9db7f new video filter to extract a single field using stride arithmetic,
rfelker
parents:
diff changeset
3 #include <string.h>
d7237ee9db7f new video filter to extract a single field using stride arithmetic,
rfelker
parents:
diff changeset
4
d7237ee9db7f new video filter to extract a single field using stride arithmetic,
rfelker
parents:
diff changeset
5 #include "../config.h"
d7237ee9db7f new video filter to extract a single field using stride arithmetic,
rfelker
parents:
diff changeset
6 #include "../mp_msg.h"
d7237ee9db7f new video filter to extract a single field using stride arithmetic,
rfelker
parents:
diff changeset
7
d7237ee9db7f new video filter to extract a single field using stride arithmetic,
rfelker
parents:
diff changeset
8 #include "mp_image.h"
d7237ee9db7f new video filter to extract a single field using stride arithmetic,
rfelker
parents:
diff changeset
9 #include "vf.h"
d7237ee9db7f new video filter to extract a single field using stride arithmetic,
rfelker
parents:
diff changeset
10
d7237ee9db7f new video filter to extract a single field using stride arithmetic,
rfelker
parents:
diff changeset
11 #include "../libvo/fastmemcpy.h"
d7237ee9db7f new video filter to extract a single field using stride arithmetic,
rfelker
parents:
diff changeset
12
d7237ee9db7f new video filter to extract a single field using stride arithmetic,
rfelker
parents:
diff changeset
13 struct vf_priv_s {
d7237ee9db7f new video filter to extract a single field using stride arithmetic,
rfelker
parents:
diff changeset
14 int field;
d7237ee9db7f new video filter to extract a single field using stride arithmetic,
rfelker
parents:
diff changeset
15 };
d7237ee9db7f new video filter to extract a single field using stride arithmetic,
rfelker
parents:
diff changeset
16
d7237ee9db7f new video filter to extract a single field using stride arithmetic,
rfelker
parents:
diff changeset
17 //===========================================================================//
d7237ee9db7f new video filter to extract a single field using stride arithmetic,
rfelker
parents:
diff changeset
18
d7237ee9db7f new video filter to extract a single field using stride arithmetic,
rfelker
parents:
diff changeset
19 static int config(struct vf_instance_s* vf,
d7237ee9db7f new video filter to extract a single field using stride arithmetic,
rfelker
parents:
diff changeset
20 int width, int height, int d_width, int d_height,
d7237ee9db7f new video filter to extract a single field using stride arithmetic,
rfelker
parents:
diff changeset
21 unsigned int flags, unsigned int outfmt){
d7237ee9db7f new video filter to extract a single field using stride arithmetic,
rfelker
parents:
diff changeset
22 return vf_next_config(vf,width,height/2,d_width,d_height,flags,outfmt);
d7237ee9db7f new video filter to extract a single field using stride arithmetic,
rfelker
parents:
diff changeset
23 }
d7237ee9db7f new video filter to extract a single field using stride arithmetic,
rfelker
parents:
diff changeset
24
d7237ee9db7f new video filter to extract a single field using stride arithmetic,
rfelker
parents:
diff changeset
25 static int put_image(struct vf_instance_s* vf, mp_image_t *mpi){
d7237ee9db7f new video filter to extract a single field using stride arithmetic,
rfelker
parents:
diff changeset
26 if(mpi->flags&MP_IMGFLAG_DIRECT){
d7237ee9db7f new video filter to extract a single field using stride arithmetic,
rfelker
parents:
diff changeset
27 // we've used DR, so we're ready...
d7237ee9db7f new video filter to extract a single field using stride arithmetic,
rfelker
parents:
diff changeset
28 return vf_next_put_image(vf,(mp_image_t*)mpi->priv);
d7237ee9db7f new video filter to extract a single field using stride arithmetic,
rfelker
parents:
diff changeset
29 }
d7237ee9db7f new video filter to extract a single field using stride arithmetic,
rfelker
parents:
diff changeset
30
10141
7d6a854a5fe5 cleanup, use vf->dmpi rather than vf->priv->dmpi for consistency
rfelker
parents: 9593
diff changeset
31 vf->dmpi=vf_get_image(vf->next,mpi->imgfmt,
9072
d7237ee9db7f new video filter to extract a single field using stride arithmetic,
rfelker
parents:
diff changeset
32 MP_IMGTYPE_EXPORT, MP_IMGFLAG_ACCEPT_STRIDE,
d7237ee9db7f new video filter to extract a single field using stride arithmetic,
rfelker
parents:
diff changeset
33 mpi->width, mpi->height/2);
d7237ee9db7f new video filter to extract a single field using stride arithmetic,
rfelker
parents:
diff changeset
34
d7237ee9db7f new video filter to extract a single field using stride arithmetic,
rfelker
parents:
diff changeset
35 // set up mpi as a double-stride image of dmpi:
10141
7d6a854a5fe5 cleanup, use vf->dmpi rather than vf->priv->dmpi for consistency
rfelker
parents: 9593
diff changeset
36 vf->dmpi->planes[0]=mpi->planes[0]+mpi->stride[0]*vf->priv->field;
7d6a854a5fe5 cleanup, use vf->dmpi rather than vf->priv->dmpi for consistency
rfelker
parents: 9593
diff changeset
37 vf->dmpi->stride[0]=2*mpi->stride[0];
7d6a854a5fe5 cleanup, use vf->dmpi rather than vf->priv->dmpi for consistency
rfelker
parents: 9593
diff changeset
38 if(vf->dmpi->flags&MP_IMGFLAG_PLANAR){
7d6a854a5fe5 cleanup, use vf->dmpi rather than vf->priv->dmpi for consistency
rfelker
parents: 9593
diff changeset
39 vf->dmpi->planes[1]=mpi->planes[1]+
9072
d7237ee9db7f new video filter to extract a single field using stride arithmetic,
rfelker
parents:
diff changeset
40 mpi->stride[1]*vf->priv->field;
10141
7d6a854a5fe5 cleanup, use vf->dmpi rather than vf->priv->dmpi for consistency
rfelker
parents: 9593
diff changeset
41 vf->dmpi->stride[1]=2*mpi->stride[1];
7d6a854a5fe5 cleanup, use vf->dmpi rather than vf->priv->dmpi for consistency
rfelker
parents: 9593
diff changeset
42 vf->dmpi->planes[2]=mpi->planes[2]+
9072
d7237ee9db7f new video filter to extract a single field using stride arithmetic,
rfelker
parents:
diff changeset
43 mpi->stride[2]*vf->priv->field;
10141
7d6a854a5fe5 cleanup, use vf->dmpi rather than vf->priv->dmpi for consistency
rfelker
parents: 9593
diff changeset
44 vf->dmpi->stride[2]=2*mpi->stride[2];
9072
d7237ee9db7f new video filter to extract a single field using stride arithmetic,
rfelker
parents:
diff changeset
45 } else
10141
7d6a854a5fe5 cleanup, use vf->dmpi rather than vf->priv->dmpi for consistency
rfelker
parents: 9593
diff changeset
46 vf->dmpi->planes[1]=mpi->planes[1]; // passthru bgr8 palette!!!
9072
d7237ee9db7f new video filter to extract a single field using stride arithmetic,
rfelker
parents:
diff changeset
47
10141
7d6a854a5fe5 cleanup, use vf->dmpi rather than vf->priv->dmpi for consistency
rfelker
parents: 9593
diff changeset
48 return vf_next_put_image(vf,vf->dmpi);
9072
d7237ee9db7f new video filter to extract a single field using stride arithmetic,
rfelker
parents:
diff changeset
49 }
d7237ee9db7f new video filter to extract a single field using stride arithmetic,
rfelker
parents:
diff changeset
50
d7237ee9db7f new video filter to extract a single field using stride arithmetic,
rfelker
parents:
diff changeset
51 //===========================================================================//
d7237ee9db7f new video filter to extract a single field using stride arithmetic,
rfelker
parents:
diff changeset
52
9443
7df93217d82c minor 1l I forgot to commit a while back
rfelker
parents: 9072
diff changeset
53 static void uninit(struct vf_instance_s* vf)
7df93217d82c minor 1l I forgot to commit a while back
rfelker
parents: 9072
diff changeset
54 {
7df93217d82c minor 1l I forgot to commit a while back
rfelker
parents: 9072
diff changeset
55 free(vf->priv);
7df93217d82c minor 1l I forgot to commit a while back
rfelker
parents: 9072
diff changeset
56 }
9072
d7237ee9db7f new video filter to extract a single field using stride arithmetic,
rfelker
parents:
diff changeset
57
d7237ee9db7f new video filter to extract a single field using stride arithmetic,
rfelker
parents:
diff changeset
58 static int open(vf_instance_t *vf, char* args){
d7237ee9db7f new video filter to extract a single field using stride arithmetic,
rfelker
parents:
diff changeset
59 vf->config=config;
d7237ee9db7f new video filter to extract a single field using stride arithmetic,
rfelker
parents:
diff changeset
60 vf->put_image=put_image;
9443
7df93217d82c minor 1l I forgot to commit a while back
rfelker
parents: 9072
diff changeset
61 vf->uninit=uninit;
9072
d7237ee9db7f new video filter to extract a single field using stride arithmetic,
rfelker
parents:
diff changeset
62 vf->default_reqs=VFCAP_ACCEPT_STRIDE;
d7237ee9db7f new video filter to extract a single field using stride arithmetic,
rfelker
parents:
diff changeset
63 vf->priv=calloc(1, sizeof(struct vf_priv_s));
d7237ee9db7f new video filter to extract a single field using stride arithmetic,
rfelker
parents:
diff changeset
64 if (args) sscanf(args, "%d", &vf->priv->field);
d7237ee9db7f new video filter to extract a single field using stride arithmetic,
rfelker
parents:
diff changeset
65 vf->priv->field &= 1;
d7237ee9db7f new video filter to extract a single field using stride arithmetic,
rfelker
parents:
diff changeset
66 return 1;
d7237ee9db7f new video filter to extract a single field using stride arithmetic,
rfelker
parents:
diff changeset
67 }
d7237ee9db7f new video filter to extract a single field using stride arithmetic,
rfelker
parents:
diff changeset
68
d7237ee9db7f new video filter to extract a single field using stride arithmetic,
rfelker
parents:
diff changeset
69 vf_info_t vf_info_field = {
d7237ee9db7f new video filter to extract a single field using stride arithmetic,
rfelker
parents:
diff changeset
70 "extract single field",
d7237ee9db7f new video filter to extract a single field using stride arithmetic,
rfelker
parents:
diff changeset
71 "field",
d7237ee9db7f new video filter to extract a single field using stride arithmetic,
rfelker
parents:
diff changeset
72 "Rich Felker",
d7237ee9db7f new video filter to extract a single field using stride arithmetic,
rfelker
parents:
diff changeset
73 "",
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9443
diff changeset
74 open,
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9443
diff changeset
75 NULL
9072
d7237ee9db7f new video filter to extract a single field using stride arithmetic,
rfelker
parents:
diff changeset
76 };
d7237ee9db7f new video filter to extract a single field using stride arithmetic,
rfelker
parents:
diff changeset
77
d7237ee9db7f new video filter to extract a single field using stride arithmetic,
rfelker
parents:
diff changeset
78 //===========================================================================//