annotate libmpcodecs/vf_pullup.c @ 24892:80180dc13565

Change decode_audio() interface Rewrite decode_audio to better deal with filters that handle input in large blocks. It now always places output in sh_audio->a_out_buffer (which was always given as a parameter before) and reallocates the buffer if needed. After the changes filters can return arbitrarily large blocks of data without some of it being lost. The new version also allows simplifying some code.
author uau
date Thu, 01 Nov 2007 06:52:19 +0000
parents 4d4c5efcfdb0
children 938e685a263c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10664
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
1 #include <stdio.h>
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
2 #include <stdlib.h>
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
3 #include <string.h>
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
4
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 15037
diff changeset
5 #include "config.h"
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 15037
diff changeset
6 #include "mp_msg.h"
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 15037
diff changeset
7 #include "cpudetect.h"
10664
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
8
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
9 #include "img_format.h"
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
10 #include "mp_image.h"
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
11 #include "vf.h"
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
12
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 15037
diff changeset
13 #include "libvo/fastmemcpy.h"
10664
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
14
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
15 #include "pullup.h"
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
16
12548
8584fdad0188 old changes in my local tree i forgot to commit - minor fixes
rfelker
parents: 11629
diff changeset
17 #undef MAX
8584fdad0188 old changes in my local tree i forgot to commit - minor fixes
rfelker
parents: 11629
diff changeset
18 #define MAX(a,b) ((a)>(b)?(a):(b))
8584fdad0188 old changes in my local tree i forgot to commit - minor fixes
rfelker
parents: 11629
diff changeset
19
10664
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
20 struct vf_priv_s {
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
21 struct pullup_context *ctx;
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
22 int init;
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
23 int fakecount;
11629
341f3c870013 pass quantizer tables through (averaging values when fields come from
rfelker
parents: 11628
diff changeset
24 char *qbuf;
10664
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
25 };
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
26
12548
8584fdad0188 old changes in my local tree i forgot to commit - minor fixes
rfelker
parents: 11629
diff changeset
27 static inline void *il_memcpy_pic(void *dst, void *src0, void *src1, int w, int h, int ds, int ss)
8584fdad0188 old changes in my local tree i forgot to commit - minor fixes
rfelker
parents: 11629
diff changeset
28 {
8584fdad0188 old changes in my local tree i forgot to commit - minor fixes
rfelker
parents: 11629
diff changeset
29 int i;
8584fdad0188 old changes in my local tree i forgot to commit - minor fixes
rfelker
parents: 11629
diff changeset
30 void *retval=dst;
8584fdad0188 old changes in my local tree i forgot to commit - minor fixes
rfelker
parents: 11629
diff changeset
31 ss += ss;
8584fdad0188 old changes in my local tree i forgot to commit - minor fixes
rfelker
parents: 11629
diff changeset
32
8584fdad0188 old changes in my local tree i forgot to commit - minor fixes
rfelker
parents: 11629
diff changeset
33 for(i=h>>1; i; i--)
8584fdad0188 old changes in my local tree i forgot to commit - minor fixes
rfelker
parents: 11629
diff changeset
34 {
23457
a124f3abc1ec Replace implicit use of fast_memcpy via macro by explicit use to allow
reimar
parents: 17906
diff changeset
35 fast_memcpy(dst, src0, w);
12548
8584fdad0188 old changes in my local tree i forgot to commit - minor fixes
rfelker
parents: 11629
diff changeset
36 src0 += ss;
8584fdad0188 old changes in my local tree i forgot to commit - minor fixes
rfelker
parents: 11629
diff changeset
37 dst += ds;
23457
a124f3abc1ec Replace implicit use of fast_memcpy via macro by explicit use to allow
reimar
parents: 17906
diff changeset
38 fast_memcpy(dst, src1, w);
12548
8584fdad0188 old changes in my local tree i forgot to commit - minor fixes
rfelker
parents: 11629
diff changeset
39 src1 += ss;
8584fdad0188 old changes in my local tree i forgot to commit - minor fixes
rfelker
parents: 11629
diff changeset
40 dst += ds;
8584fdad0188 old changes in my local tree i forgot to commit - minor fixes
rfelker
parents: 11629
diff changeset
41 }
8584fdad0188 old changes in my local tree i forgot to commit - minor fixes
rfelker
parents: 11629
diff changeset
42
8584fdad0188 old changes in my local tree i forgot to commit - minor fixes
rfelker
parents: 11629
diff changeset
43 return retval;
8584fdad0188 old changes in my local tree i forgot to commit - minor fixes
rfelker
parents: 11629
diff changeset
44 }
8584fdad0188 old changes in my local tree i forgot to commit - minor fixes
rfelker
parents: 11629
diff changeset
45
10664
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
46 static void init_pullup(struct vf_instance_s* vf, mp_image_t *mpi)
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
47 {
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
48 struct pullup_context *c = vf->priv->ctx;
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
49
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
50 if (mpi->flags & MP_IMGFLAG_PLANAR) {
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
51 c->format = PULLUP_FMT_Y;
11629
341f3c870013 pass quantizer tables through (averaging values when fields come from
rfelker
parents: 11628
diff changeset
52 c->nplanes = 4;
10664
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
53 pullup_preinit_context(c);
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
54 c->bpp[0] = c->bpp[1] = c->bpp[2] = 8;
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
55 c->w[0] = mpi->w;
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
56 c->h[0] = mpi->h;
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
57 c->w[1] = c->w[2] = mpi->chroma_width;
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
58 c->h[1] = c->h[2] = mpi->chroma_height;
11629
341f3c870013 pass quantizer tables through (averaging values when fields come from
rfelker
parents: 11628
diff changeset
59 c->w[3] = ((mpi->w+15)/16) * ((mpi->h+15)/16);
341f3c870013 pass quantizer tables through (averaging values when fields come from
rfelker
parents: 11628
diff changeset
60 c->h[3] = 2;
10664
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
61 c->stride[0] = mpi->width;
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
62 c->stride[1] = c->stride[2] = mpi->chroma_width;
11629
341f3c870013 pass quantizer tables through (averaging values when fields come from
rfelker
parents: 11628
diff changeset
63 c->stride[3] = c->w[3];
10664
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
64 c->background[1] = c->background[2] = 128;
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
65 }
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
66
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
67 if (gCpuCaps.hasMMX) c->cpu |= PULLUP_CPU_MMX;
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
68 if (gCpuCaps.hasMMX2) c->cpu |= PULLUP_CPU_MMX2;
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
69 if (gCpuCaps.has3DNow) c->cpu |= PULLUP_CPU_3DNOW;
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
70 if (gCpuCaps.has3DNowExt) c->cpu |= PULLUP_CPU_3DNOWEXT;
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
71 if (gCpuCaps.hasSSE) c->cpu |= PULLUP_CPU_SSE;
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
72 if (gCpuCaps.hasSSE2) c->cpu |= PULLUP_CPU_SSE2;
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
73
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
74 pullup_init_context(c);
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
75
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
76 vf->priv->init = 1;
11629
341f3c870013 pass quantizer tables through (averaging values when fields come from
rfelker
parents: 11628
diff changeset
77 vf->priv->qbuf = malloc(c->w[3]);
10664
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
78 }
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
79
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
80
24603
4d4c5efcfdb0 Disable buggy unused function via #if 0, blessed by Rich.
diego
parents: 23666
diff changeset
81 #if 0
10664
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
82 static void get_image(struct vf_instance_s* vf, mp_image_t *mpi)
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
83 {
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
84 struct pullup_context *c = vf->priv->ctx;
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
85 struct pullup_buffer *b;
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
86
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
87 if (mpi->type == MP_IMGTYPE_STATIC) return;
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
88
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
89 if (!vf->priv->init) init_pullup(vf, mpi);
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
90
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
91 b = pullup_get_buffer(c, 2);
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
92 if (!b) return; /* shouldn't happen... */
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
93
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
94 mpi->priv = b;
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
95
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
96 mpi->planes[0] = b->planes[0];
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
97 mpi->planes[1] = b->planes[1];
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
98 mpi->planes[2] = b->planes[2];
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
99 mpi->stride[0] = c->stride[0];
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
100 mpi->stride[1] = c->stride[1];
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
101 mpi->stride[2] = c->stride[2];
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
102
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
103 mpi->flags |= MP_IMGFLAG_DIRECT;
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
104 mpi->flags &= ~MP_IMGFLAG_DRAW_CALLBACK;
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
105 }
24603
4d4c5efcfdb0 Disable buggy unused function via #if 0, blessed by Rich.
diego
parents: 23666
diff changeset
106 #endif
10664
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
107
17906
20aca9baf5d8 passing pts through the filter layer (lets see if pts or cola comes out at the end)
michael
parents: 17012
diff changeset
108 static int put_image(struct vf_instance_s* vf, mp_image_t *mpi, double pts)
10664
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
109 {
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
110 struct pullup_context *c = vf->priv->ctx;
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
111 struct pullup_buffer *b;
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
112 struct pullup_frame *f;
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
113 mp_image_t *dmpi;
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
114 int ret;
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
115 int p;
11629
341f3c870013 pass quantizer tables through (averaging values when fields come from
rfelker
parents: 11628
diff changeset
116 int i;
10664
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
117
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
118 if (!vf->priv->init) init_pullup(vf, mpi);
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
119
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
120 if (mpi->flags & MP_IMGFLAG_DIRECT) {
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
121 b = mpi->priv;
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
122 mpi->priv = 0;
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
123 } else {
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
124 b = pullup_get_buffer(c, 2);
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
125 if (!b) {
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
126 mp_msg(MSGT_VFILTER,MSGL_ERR,"Could not get buffer from pullup!\n");
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
127 f = pullup_get_frame(c);
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
128 pullup_release_frame(f);
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
129 return 0;
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
130 }
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
131 memcpy_pic(b->planes[0], mpi->planes[0], mpi->w, mpi->h,
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
132 c->stride[0], mpi->stride[0]);
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
133 if (mpi->flags & MP_IMGFLAG_PLANAR) {
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
134 memcpy_pic(b->planes[1], mpi->planes[1],
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
135 mpi->chroma_width, mpi->chroma_height,
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
136 c->stride[1], mpi->stride[1]);
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
137 memcpy_pic(b->planes[2], mpi->planes[2],
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
138 mpi->chroma_width, mpi->chroma_height,
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
139 c->stride[2], mpi->stride[2]);
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
140 }
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
141 }
11629
341f3c870013 pass quantizer tables through (averaging values when fields come from
rfelker
parents: 11628
diff changeset
142 if (mpi->qscale) {
23457
a124f3abc1ec Replace implicit use of fast_memcpy via macro by explicit use to allow
reimar
parents: 17906
diff changeset
143 fast_memcpy(b->planes[3], mpi->qscale, c->w[3]);
a124f3abc1ec Replace implicit use of fast_memcpy via macro by explicit use to allow
reimar
parents: 17906
diff changeset
144 fast_memcpy(b->planes[3]+c->w[3], mpi->qscale, c->w[3]);
11629
341f3c870013 pass quantizer tables through (averaging values when fields come from
rfelker
parents: 11628
diff changeset
145 }
10664
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
146
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
147 p = mpi->fields & MP_IMGFIELD_TOP_FIRST ? 0 :
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
148 (mpi->fields & MP_IMGFIELD_ORDERED ? 1 : 0);
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
149 pullup_submit_field(c, b, p);
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
150 pullup_submit_field(c, b, p^1);
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
151 if (mpi->fields & MP_IMGFIELD_REPEAT_FIRST)
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
152 pullup_submit_field(c, b, p);
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
153
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
154 pullup_release_buffer(b, 2);
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
155
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
156 f = pullup_get_frame(c);
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
157
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
158 /* Fake yes for first few frames (buffer depth) to keep from
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
159 * breaking A/V sync with G1's bad architecture... */
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
160 if (!f) return vf->priv->fakecount ? (--vf->priv->fakecount,1) : 0;
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
161
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
162 if (f->length < 2) {
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
163 pullup_release_frame(f);
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
164 f = pullup_get_frame(c);
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
165 if (!f) return 0;
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
166 if (f->length < 2) {
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
167 pullup_release_frame(f);
14954
fe1dfcfcc3bf 1000l to me: could break a/v sync and eventually cause buffer exhaustion on soft-telecined input that's ugly
rfelker
parents: 13267
diff changeset
168 if (!(mpi->fields & MP_IMGFIELD_REPEAT_FIRST))
fe1dfcfcc3bf 1000l to me: could break a/v sync and eventually cause buffer exhaustion on soft-telecined input that's ugly
rfelker
parents: 13267
diff changeset
169 return 0;
fe1dfcfcc3bf 1000l to me: could break a/v sync and eventually cause buffer exhaustion on soft-telecined input that's ugly
rfelker
parents: 13267
diff changeset
170 f = pullup_get_frame(c);
fe1dfcfcc3bf 1000l to me: could break a/v sync and eventually cause buffer exhaustion on soft-telecined input that's ugly
rfelker
parents: 13267
diff changeset
171 if (!f) return 0;
fe1dfcfcc3bf 1000l to me: could break a/v sync and eventually cause buffer exhaustion on soft-telecined input that's ugly
rfelker
parents: 13267
diff changeset
172 if (f->length < 2) {
fe1dfcfcc3bf 1000l to me: could break a/v sync and eventually cause buffer exhaustion on soft-telecined input that's ugly
rfelker
parents: 13267
diff changeset
173 pullup_release_frame(f);
fe1dfcfcc3bf 1000l to me: could break a/v sync and eventually cause buffer exhaustion on soft-telecined input that's ugly
rfelker
parents: 13267
diff changeset
174 return 0;
fe1dfcfcc3bf 1000l to me: could break a/v sync and eventually cause buffer exhaustion on soft-telecined input that's ugly
rfelker
parents: 13267
diff changeset
175 }
10664
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
176 }
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
177 }
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
178
12548
8584fdad0188 old changes in my local tree i forgot to commit - minor fixes
rfelker
parents: 11629
diff changeset
179 #if 0
11629
341f3c870013 pass quantizer tables through (averaging values when fields come from
rfelker
parents: 11628
diff changeset
180 /* Average qscale tables from both frames. */
341f3c870013 pass quantizer tables through (averaging values when fields come from
rfelker
parents: 11628
diff changeset
181 if (mpi->qscale) {
341f3c870013 pass quantizer tables through (averaging values when fields come from
rfelker
parents: 11628
diff changeset
182 for (i=0; i<c->w[3]; i++) {
341f3c870013 pass quantizer tables through (averaging values when fields come from
rfelker
parents: 11628
diff changeset
183 vf->priv->qbuf[i] = (f->ofields[0]->planes[3][i]
341f3c870013 pass quantizer tables through (averaging values when fields come from
rfelker
parents: 11628
diff changeset
184 + f->ofields[1]->planes[3][i+c->w[3]])>>1;
341f3c870013 pass quantizer tables through (averaging values when fields come from
rfelker
parents: 11628
diff changeset
185 }
341f3c870013 pass quantizer tables through (averaging values when fields come from
rfelker
parents: 11628
diff changeset
186 }
12548
8584fdad0188 old changes in my local tree i forgot to commit - minor fixes
rfelker
parents: 11629
diff changeset
187 #else
8584fdad0188 old changes in my local tree i forgot to commit - minor fixes
rfelker
parents: 11629
diff changeset
188 /* Take worst of qscale tables from both frames. */
8584fdad0188 old changes in my local tree i forgot to commit - minor fixes
rfelker
parents: 11629
diff changeset
189 if (mpi->qscale) {
8584fdad0188 old changes in my local tree i forgot to commit - minor fixes
rfelker
parents: 11629
diff changeset
190 for (i=0; i<c->w[3]; i++) {
8584fdad0188 old changes in my local tree i forgot to commit - minor fixes
rfelker
parents: 11629
diff changeset
191 vf->priv->qbuf[i] = MAX(f->ofields[0]->planes[3][i], f->ofields[1]->planes[3][i+c->w[3]]);
8584fdad0188 old changes in my local tree i forgot to commit - minor fixes
rfelker
parents: 11629
diff changeset
192 }
8584fdad0188 old changes in my local tree i forgot to commit - minor fixes
rfelker
parents: 11629
diff changeset
193 }
8584fdad0188 old changes in my local tree i forgot to commit - minor fixes
rfelker
parents: 11629
diff changeset
194 #endif
11629
341f3c870013 pass quantizer tables through (averaging values when fields come from
rfelker
parents: 11628
diff changeset
195
10664
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
196 /* If the frame isn't already exportable... */
10773
012eeac10e16 direct render frames whose fields are not in a common buffer, rather
rfelker
parents: 10738
diff changeset
197 while (!f->buffer) {
012eeac10e16 direct render frames whose fields are not in a common buffer, rather
rfelker
parents: 10738
diff changeset
198 dmpi = vf_get_image(vf->next, mpi->imgfmt,
012eeac10e16 direct render frames whose fields are not in a common buffer, rather
rfelker
parents: 10738
diff changeset
199 MP_IMGTYPE_TEMP, MP_IMGFLAG_ACCEPT_STRIDE,
012eeac10e16 direct render frames whose fields are not in a common buffer, rather
rfelker
parents: 10738
diff changeset
200 mpi->width, mpi->height);
012eeac10e16 direct render frames whose fields are not in a common buffer, rather
rfelker
parents: 10738
diff changeset
201 /* FIXME: Is it ok to discard dmpi if it's not direct? */
012eeac10e16 direct render frames whose fields are not in a common buffer, rather
rfelker
parents: 10738
diff changeset
202 if (!(dmpi->flags & MP_IMGFLAG_DIRECT)) {
012eeac10e16 direct render frames whose fields are not in a common buffer, rather
rfelker
parents: 10738
diff changeset
203 pullup_pack_frame(c, f);
012eeac10e16 direct render frames whose fields are not in a common buffer, rather
rfelker
parents: 10738
diff changeset
204 break;
10664
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
205 }
10773
012eeac10e16 direct render frames whose fields are not in a common buffer, rather
rfelker
parents: 10738
diff changeset
206 /* Direct render fields into output buffer */
12548
8584fdad0188 old changes in my local tree i forgot to commit - minor fixes
rfelker
parents: 11629
diff changeset
207 #if 0
8584fdad0188 old changes in my local tree i forgot to commit - minor fixes
rfelker
parents: 11629
diff changeset
208 /* Write-order copy seems to have worse cache performance
8584fdad0188 old changes in my local tree i forgot to commit - minor fixes
rfelker
parents: 11629
diff changeset
209 * than read-order, but both should be checked on
8584fdad0188 old changes in my local tree i forgot to commit - minor fixes
rfelker
parents: 11629
diff changeset
210 * various cpus to see which is actually better...*/
8584fdad0188 old changes in my local tree i forgot to commit - minor fixes
rfelker
parents: 11629
diff changeset
211 il_memcpy_pic(dmpi->planes[0], f->ofields[0]->planes[0],
8584fdad0188 old changes in my local tree i forgot to commit - minor fixes
rfelker
parents: 11629
diff changeset
212 f->ofields[1]->planes[0] + c->stride[0],
8584fdad0188 old changes in my local tree i forgot to commit - minor fixes
rfelker
parents: 11629
diff changeset
213 mpi->w, mpi->h, dmpi->stride[0], c->stride[0]);
8584fdad0188 old changes in my local tree i forgot to commit - minor fixes
rfelker
parents: 11629
diff changeset
214 if (mpi->flags & MP_IMGFLAG_PLANAR) {
8584fdad0188 old changes in my local tree i forgot to commit - minor fixes
rfelker
parents: 11629
diff changeset
215 il_memcpy_pic(dmpi->planes[1], f->ofields[0]->planes[1],
8584fdad0188 old changes in my local tree i forgot to commit - minor fixes
rfelker
parents: 11629
diff changeset
216 f->ofields[1]->planes[1] + c->stride[1],
8584fdad0188 old changes in my local tree i forgot to commit - minor fixes
rfelker
parents: 11629
diff changeset
217 mpi->chroma_width, mpi->chroma_height,
8584fdad0188 old changes in my local tree i forgot to commit - minor fixes
rfelker
parents: 11629
diff changeset
218 dmpi->stride[1], c->stride[1]);
8584fdad0188 old changes in my local tree i forgot to commit - minor fixes
rfelker
parents: 11629
diff changeset
219 il_memcpy_pic(dmpi->planes[2], f->ofields[0]->planes[2],
8584fdad0188 old changes in my local tree i forgot to commit - minor fixes
rfelker
parents: 11629
diff changeset
220 f->ofields[1]->planes[2] + c->stride[2],
8584fdad0188 old changes in my local tree i forgot to commit - minor fixes
rfelker
parents: 11629
diff changeset
221 mpi->chroma_width, mpi->chroma_height,
8584fdad0188 old changes in my local tree i forgot to commit - minor fixes
rfelker
parents: 11629
diff changeset
222 dmpi->stride[2], c->stride[2]);
8584fdad0188 old changes in my local tree i forgot to commit - minor fixes
rfelker
parents: 11629
diff changeset
223 }
8584fdad0188 old changes in my local tree i forgot to commit - minor fixes
rfelker
parents: 11629
diff changeset
224 #else
11628
6fc547235443 simplified frame decision logic and reduced the occurrance of length=1
rfelker
parents: 10956
diff changeset
225 my_memcpy_pic(dmpi->planes[0], f->ofields[0]->planes[0],
10773
012eeac10e16 direct render frames whose fields are not in a common buffer, rather
rfelker
parents: 10738
diff changeset
226 mpi->w, mpi->h/2, dmpi->stride[0]*2, c->stride[0]*2);
012eeac10e16 direct render frames whose fields are not in a common buffer, rather
rfelker
parents: 10738
diff changeset
227 my_memcpy_pic(dmpi->planes[0] + dmpi->stride[0],
11628
6fc547235443 simplified frame decision logic and reduced the occurrance of length=1
rfelker
parents: 10956
diff changeset
228 f->ofields[1]->planes[0] + c->stride[0],
10773
012eeac10e16 direct render frames whose fields are not in a common buffer, rather
rfelker
parents: 10738
diff changeset
229 mpi->w, mpi->h/2, dmpi->stride[0]*2, c->stride[0]*2);
012eeac10e16 direct render frames whose fields are not in a common buffer, rather
rfelker
parents: 10738
diff changeset
230 if (mpi->flags & MP_IMGFLAG_PLANAR) {
11628
6fc547235443 simplified frame decision logic and reduced the occurrance of length=1
rfelker
parents: 10956
diff changeset
231 my_memcpy_pic(dmpi->planes[1], f->ofields[0]->planes[1],
10773
012eeac10e16 direct render frames whose fields are not in a common buffer, rather
rfelker
parents: 10738
diff changeset
232 mpi->chroma_width, mpi->chroma_height/2,
012eeac10e16 direct render frames whose fields are not in a common buffer, rather
rfelker
parents: 10738
diff changeset
233 dmpi->stride[1]*2, c->stride[1]*2);
012eeac10e16 direct render frames whose fields are not in a common buffer, rather
rfelker
parents: 10738
diff changeset
234 my_memcpy_pic(dmpi->planes[1] + dmpi->stride[1],
11628
6fc547235443 simplified frame decision logic and reduced the occurrance of length=1
rfelker
parents: 10956
diff changeset
235 f->ofields[1]->planes[1] + c->stride[1],
10773
012eeac10e16 direct render frames whose fields are not in a common buffer, rather
rfelker
parents: 10738
diff changeset
236 mpi->chroma_width, mpi->chroma_height/2,
012eeac10e16 direct render frames whose fields are not in a common buffer, rather
rfelker
parents: 10738
diff changeset
237 dmpi->stride[1]*2, c->stride[1]*2);
11628
6fc547235443 simplified frame decision logic and reduced the occurrance of length=1
rfelker
parents: 10956
diff changeset
238 my_memcpy_pic(dmpi->planes[2], f->ofields[0]->planes[2],
10773
012eeac10e16 direct render frames whose fields are not in a common buffer, rather
rfelker
parents: 10738
diff changeset
239 mpi->chroma_width, mpi->chroma_height/2,
012eeac10e16 direct render frames whose fields are not in a common buffer, rather
rfelker
parents: 10738
diff changeset
240 dmpi->stride[2]*2, c->stride[2]*2);
012eeac10e16 direct render frames whose fields are not in a common buffer, rather
rfelker
parents: 10738
diff changeset
241 my_memcpy_pic(dmpi->planes[2] + dmpi->stride[2],
11628
6fc547235443 simplified frame decision logic and reduced the occurrance of length=1
rfelker
parents: 10956
diff changeset
242 f->ofields[1]->planes[2] + c->stride[2],
10773
012eeac10e16 direct render frames whose fields are not in a common buffer, rather
rfelker
parents: 10738
diff changeset
243 mpi->chroma_width, mpi->chroma_height/2,
012eeac10e16 direct render frames whose fields are not in a common buffer, rather
rfelker
parents: 10738
diff changeset
244 dmpi->stride[2]*2, c->stride[2]*2);
012eeac10e16 direct render frames whose fields are not in a common buffer, rather
rfelker
parents: 10738
diff changeset
245 }
12548
8584fdad0188 old changes in my local tree i forgot to commit - minor fixes
rfelker
parents: 11629
diff changeset
246 #endif
10773
012eeac10e16 direct render frames whose fields are not in a common buffer, rather
rfelker
parents: 10738
diff changeset
247 pullup_release_frame(f);
11629
341f3c870013 pass quantizer tables through (averaging values when fields come from
rfelker
parents: 11628
diff changeset
248 if (mpi->qscale) {
341f3c870013 pass quantizer tables through (averaging values when fields come from
rfelker
parents: 11628
diff changeset
249 dmpi->qscale = vf->priv->qbuf;
341f3c870013 pass quantizer tables through (averaging values when fields come from
rfelker
parents: 11628
diff changeset
250 dmpi->qstride = mpi->qstride;
341f3c870013 pass quantizer tables through (averaging values when fields come from
rfelker
parents: 11628
diff changeset
251 dmpi->qscale_type = mpi->qscale_type;
341f3c870013 pass quantizer tables through (averaging values when fields come from
rfelker
parents: 11628
diff changeset
252 }
17906
20aca9baf5d8 passing pts through the filter layer (lets see if pts or cola comes out at the end)
michael
parents: 17012
diff changeset
253 return vf_next_put_image(vf, dmpi, MP_NOPTS_VALUE);
10664
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
254 }
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
255 dmpi = vf_get_image(vf->next, mpi->imgfmt,
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
256 MP_IMGTYPE_EXPORT, MP_IMGFLAG_ACCEPT_STRIDE,
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
257 mpi->width, mpi->height);
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
258
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
259 dmpi->planes[0] = f->buffer->planes[0];
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
260 dmpi->planes[1] = f->buffer->planes[1];
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
261 dmpi->planes[2] = f->buffer->planes[2];
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
262
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
263 dmpi->stride[0] = c->stride[0];
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
264 dmpi->stride[1] = c->stride[1];
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
265 dmpi->stride[2] = c->stride[2];
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
266
11629
341f3c870013 pass quantizer tables through (averaging values when fields come from
rfelker
parents: 11628
diff changeset
267 if (mpi->qscale) {
341f3c870013 pass quantizer tables through (averaging values when fields come from
rfelker
parents: 11628
diff changeset
268 dmpi->qscale = vf->priv->qbuf;
341f3c870013 pass quantizer tables through (averaging values when fields come from
rfelker
parents: 11628
diff changeset
269 dmpi->qstride = mpi->qstride;
341f3c870013 pass quantizer tables through (averaging values when fields come from
rfelker
parents: 11628
diff changeset
270 dmpi->qscale_type = mpi->qscale_type;
341f3c870013 pass quantizer tables through (averaging values when fields come from
rfelker
parents: 11628
diff changeset
271 }
17906
20aca9baf5d8 passing pts through the filter layer (lets see if pts or cola comes out at the end)
michael
parents: 17012
diff changeset
272 ret = vf_next_put_image(vf, dmpi, MP_NOPTS_VALUE);
10664
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
273 pullup_release_frame(f);
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
274 return ret;
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
275 }
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
276
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
277 static int query_format(struct vf_instance_s* vf, unsigned int fmt)
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
278 {
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
279 /* FIXME - support more formats */
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
280 switch (fmt) {
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
281 case IMGFMT_YV12:
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
282 case IMGFMT_IYUV:
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
283 case IMGFMT_I420:
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
284 return vf_next_query_format(vf, fmt);
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
285 }
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
286 return 0;
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
287 }
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
288
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
289 static int config(struct vf_instance_s* vf,
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
290 int width, int height, int d_width, int d_height,
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
291 unsigned int flags, unsigned int outfmt)
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
292 {
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
293 if (height&3) return 0;
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
294 return vf_next_config(vf, width, height, d_width, d_height, flags, outfmt);
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
295 }
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
296
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
297 static void uninit(struct vf_instance_s* vf)
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
298 {
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
299 pullup_free_context(vf->priv->ctx);
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
300 free(vf->priv);
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
301 }
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
302
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
303 static int open(vf_instance_t *vf, char* args)
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
304 {
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
305 struct vf_priv_s *p;
12549
bb9bf9a97ac6 configurable 'junk' borders for pullup
rfelker
parents: 12548
diff changeset
306 struct pullup_context *c;
14970
5d566b4628d0 direct rendering support drastically improves speed, but it's buggy. :( disabled for now...
rfelker
parents: 14954
diff changeset
307 //vf->get_image = get_image;
10664
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
308 vf->put_image = put_image;
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
309 vf->config = config;
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
310 vf->query_format = query_format;
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
311 vf->uninit = uninit;
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
312 vf->default_reqs = VFCAP_ACCEPT_STRIDE;
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
313 vf->priv = p = calloc(1, sizeof(struct vf_priv_s));
12549
bb9bf9a97ac6 configurable 'junk' borders for pullup
rfelker
parents: 12548
diff changeset
314 p->ctx = c = pullup_alloc_context();
14973
08002417b7e4 don't buffer more future context that we need
rfelker
parents: 14970
diff changeset
315 p->fakecount = 1;
15037
dde2f0454527 1l! mplayer's verbose variable is not a flag but a signed number
rfelker
parents: 14973
diff changeset
316 c->verbose = verbose>0;
12549
bb9bf9a97ac6 configurable 'junk' borders for pullup
rfelker
parents: 12548
diff changeset
317 c->junk_left = c->junk_right = 1;
bb9bf9a97ac6 configurable 'junk' borders for pullup
rfelker
parents: 12548
diff changeset
318 c->junk_top = c->junk_bottom = 4;
bb9bf9a97ac6 configurable 'junk' borders for pullup
rfelker
parents: 12548
diff changeset
319 c->strict_breaks = 0;
13267
8d4a16cb1e97 pullup docs + new feature for slow cpus :)
rfelker
parents: 12549
diff changeset
320 c->metric_plane = 0;
12549
bb9bf9a97ac6 configurable 'junk' borders for pullup
rfelker
parents: 12548
diff changeset
321 if (args) {
13267
8d4a16cb1e97 pullup docs + new feature for slow cpus :)
rfelker
parents: 12549
diff changeset
322 sscanf(args, "%d:%d:%d:%d:%d:%d", &c->junk_left, &c->junk_right, &c->junk_top, &c->junk_bottom, &c->strict_breaks, &c->metric_plane);
12549
bb9bf9a97ac6 configurable 'junk' borders for pullup
rfelker
parents: 12548
diff changeset
323 }
10664
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
324 return 1;
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
325 }
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
326
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
327 vf_info_t vf_info_pullup = {
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
328 "pullup (from field sequence to frames)",
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
329 "pullup",
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
330 "Rich Felker",
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
331 "",
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
332 open,
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
333 NULL
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
334 };
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
335
d47ca466c97b pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
diff changeset
336