annotate libmpcodecs/vf_uspp.c @ 30088:4977e04f3a18

Add support for parsing audio streams (though should be easy to extend to video) via libavcodec. Parsing can be done at the demuxer stage (currently disabled) or at the decoder (ad_ffmpeg, enabled). Should allow using the libavcodec AAC, DTS, ... decoders independent of container format.
author reimar
date Sun, 27 Dec 2009 15:28:01 +0000
parents 0f1b5b68af32
children 41fb4acf3df6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
16946
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
1 /*
26727
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
2 * Copyright (C) 2005 Michael Niedermayer <michaelni@gmx.at>
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
3 *
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
4 * This file is part of MPlayer.
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
5 *
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
6 * MPlayer is free software; you can redistribute it and/or modify
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
7 * it under the terms of the GNU General Public License as published by
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
8 * the Free Software Foundation; either version 2 of the License, or
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
9 * (at your option) any later version.
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
10 *
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
11 * MPlayer is distributed in the hope that it will be useful,
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
14 * GNU General Public License for more details.
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
15 *
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
16 * You should have received a copy of the GNU General Public License along
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
17 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
19 */
16946
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
20
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
21 #include <stdio.h>
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
22 #include <stdlib.h>
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
23 #include <string.h>
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
24 #include <inttypes.h>
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
25 #include <math.h>
19569
7ba51e3ffca6 segfault fix
michael
parents: 18976
diff changeset
26 #include <assert.h>
16946
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
27
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 16946
diff changeset
28 #include "config.h"
16946
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
29
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 16946
diff changeset
30 #include "mp_msg.h"
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 16946
diff changeset
31 #include "cpudetect.h"
16946
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
32
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 16946
diff changeset
33 #include "libavcodec/avcodec.h"
16946
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
34
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
35 #include "img_format.h"
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
36 #include "mp_image.h"
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
37 #include "vf.h"
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 16946
diff changeset
38 #include "libvo/fastmemcpy.h"
16946
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
39
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
40 #define XMIN(a,b) ((a) < (b) ? (a) : (b))
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
41
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
42 #define BLOCK 16
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
43
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
44 //===========================================================================//
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
45 static const uint8_t __attribute__((aligned(8))) dither[8][8]={
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
46 { 0*4, 48*4, 12*4, 60*4, 3*4, 51*4, 15*4, 63*4, },
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
47 { 32*4, 16*4, 44*4, 28*4, 35*4, 19*4, 47*4, 31*4, },
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
48 { 8*4, 56*4, 4*4, 52*4, 11*4, 59*4, 7*4, 55*4, },
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
49 { 40*4, 24*4, 36*4, 20*4, 43*4, 27*4, 39*4, 23*4, },
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
50 { 2*4, 50*4, 14*4, 62*4, 1*4, 49*4, 13*4, 61*4, },
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
51 { 34*4, 18*4, 46*4, 30*4, 33*4, 17*4, 45*4, 29*4, },
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
52 { 10*4, 58*4, 6*4, 54*4, 9*4, 57*4, 5*4, 53*4, },
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
53 { 42*4, 26*4, 38*4, 22*4, 41*4, 25*4, 37*4, 21*4, },
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
54 };
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
55
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
56 static const uint8_t offset[511][2]= {
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29087
diff changeset
57 { 0, 0},
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29087
diff changeset
58 { 0, 0}, { 8, 8},
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29087
diff changeset
59 { 0, 0}, { 4, 4}, {12, 8}, { 8,12},
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29087
diff changeset
60 { 0, 0}, {10, 2}, { 4, 4}, {14, 6}, { 8, 8}, { 2,10}, {12,12}, { 6,14},
16946
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
61
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29087
diff changeset
62 { 0, 0}, {10, 2}, { 4, 4}, {14, 6}, { 8, 8}, { 2,10}, {12,12}, { 6,14},
16946
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
63 { 5, 1}, {15, 3}, { 9, 5}, { 3, 7}, {13, 9}, { 7,11}, { 1,13}, {11,15},
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
64
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29087
diff changeset
65 { 0, 0}, { 8, 0}, { 0, 8}, { 8, 8}, { 5, 1}, {13, 1}, { 5, 9}, {13, 9},
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29087
diff changeset
66 { 2, 2}, {10, 2}, { 2,10}, {10,10}, { 7, 3}, {15, 3}, { 7,11}, {15,11},
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29087
diff changeset
67 { 4, 4}, {12, 4}, { 4,12}, {12,12}, { 1, 5}, { 9, 5}, { 1,13}, { 9,13},
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29087
diff changeset
68 { 6, 6}, {14, 6}, { 6,14}, {14,14}, { 3, 7}, {11, 7}, { 3,15}, {11,15},
16946
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
69
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29087
diff changeset
70 { 0, 0}, { 8, 0}, { 0, 8}, { 8, 8}, { 4, 0}, {12, 0}, { 4, 8}, {12, 8},
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29087
diff changeset
71 { 1, 1}, { 9, 1}, { 1, 9}, { 9, 9}, { 5, 1}, {13, 1}, { 5, 9}, {13, 9},
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29087
diff changeset
72 { 3, 2}, {11, 2}, { 3,10}, {11,10}, { 7, 2}, {15, 2}, { 7,10}, {15,10},
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29087
diff changeset
73 { 2, 3}, {10, 3}, { 2,11}, {10,11}, { 6, 3}, {14, 3}, { 6,11}, {14,11},
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29087
diff changeset
74 { 0, 4}, { 8, 4}, { 0,12}, { 8,12}, { 4, 4}, {12, 4}, { 4,12}, {12,12},
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29087
diff changeset
75 { 1, 5}, { 9, 5}, { 1,13}, { 9,13}, { 5, 5}, {13, 5}, { 5,13}, {13,13},
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29087
diff changeset
76 { 3, 6}, {11, 6}, { 3,14}, {11,14}, { 7, 6}, {15, 6}, { 7,14}, {15,14},
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29087
diff changeset
77 { 2, 7}, {10, 7}, { 2,15}, {10,15}, { 6, 7}, {14, 7}, { 6,15}, {14,15},
16946
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
78
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29087
diff changeset
79 { 0, 0}, { 8, 0}, { 0, 8}, { 8, 8}, { 0, 2}, { 8, 2}, { 0,10}, { 8,10},
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29087
diff changeset
80 { 0, 4}, { 8, 4}, { 0,12}, { 8,12}, { 0, 6}, { 8, 6}, { 0,14}, { 8,14},
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29087
diff changeset
81 { 1, 1}, { 9, 1}, { 1, 9}, { 9, 9}, { 1, 3}, { 9, 3}, { 1,11}, { 9,11},
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29087
diff changeset
82 { 1, 5}, { 9, 5}, { 1,13}, { 9,13}, { 1, 7}, { 9, 7}, { 1,15}, { 9,15},
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29087
diff changeset
83 { 2, 0}, {10, 0}, { 2, 8}, {10, 8}, { 2, 2}, {10, 2}, { 2,10}, {10,10},
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29087
diff changeset
84 { 2, 4}, {10, 4}, { 2,12}, {10,12}, { 2, 6}, {10, 6}, { 2,14}, {10,14},
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29087
diff changeset
85 { 3, 1}, {11, 1}, { 3, 9}, {11, 9}, { 3, 3}, {11, 3}, { 3,11}, {11,11},
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29087
diff changeset
86 { 3, 5}, {11, 5}, { 3,13}, {11,13}, { 3, 7}, {11, 7}, { 3,15}, {11,15},
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29087
diff changeset
87 { 4, 0}, {12, 0}, { 4, 8}, {12, 8}, { 4, 2}, {12, 2}, { 4,10}, {12,10},
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29087
diff changeset
88 { 4, 4}, {12, 4}, { 4,12}, {12,12}, { 4, 6}, {12, 6}, { 4,14}, {12,14},
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29087
diff changeset
89 { 5, 1}, {13, 1}, { 5, 9}, {13, 9}, { 5, 3}, {13, 3}, { 5,11}, {13,11},
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29087
diff changeset
90 { 5, 5}, {13, 5}, { 5,13}, {13,13}, { 5, 7}, {13, 7}, { 5,15}, {13,15},
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29087
diff changeset
91 { 6, 0}, {14, 0}, { 6, 8}, {14, 8}, { 6, 2}, {14, 2}, { 6,10}, {14,10},
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29087
diff changeset
92 { 6, 4}, {14, 4}, { 6,12}, {14,12}, { 6, 6}, {14, 6}, { 6,14}, {14,14},
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29087
diff changeset
93 { 7, 1}, {15, 1}, { 7, 9}, {15, 9}, { 7, 3}, {15, 3}, { 7,11}, {15,11},
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29087
diff changeset
94 { 7, 5}, {15, 5}, { 7,13}, {15,13}, { 7, 7}, {15, 7}, { 7,15}, {15,15},
16946
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
95
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29087
diff changeset
96 { 0, 0}, { 8, 0}, { 0, 8}, { 8, 8}, { 4, 4}, {12, 4}, { 4,12}, {12,12}, { 0, 4}, { 8, 4}, { 0,12}, { 8,12}, { 4, 0}, {12, 0}, { 4, 8}, {12, 8}, { 2, 2}, {10, 2}, { 2,10}, {10,10}, { 6, 6}, {14, 6}, { 6,14}, {14,14}, { 2, 6}, {10, 6}, { 2,14}, {10,14}, { 6, 2}, {14, 2}, { 6,10}, {14,10}, { 0, 2}, { 8, 2}, { 0,10}, { 8,10}, { 4, 6}, {12, 6}, { 4,14}, {12,14}, { 0, 6}, { 8, 6}, { 0,14}, { 8,14}, { 4, 2}, {12, 2}, { 4,10}, {12,10}, { 2, 0}, {10, 0}, { 2, 8}, {10, 8}, { 6, 4}, {14, 4}, { 6,12}, {14,12}, { 2, 4}, {10, 4}, { 2,12}, {10,12}, { 6, 0}, {14, 0}, { 6, 8}, {14, 8}, { 1, 1}, { 9, 1}, { 1, 9}, { 9, 9}, { 5, 5}, {13, 5}, { 5,13}, {13,13}, { 1, 5}, { 9, 5}, { 1,13}, { 9,13}, { 5, 1}, {13, 1}, { 5, 9}, {13, 9}, { 3, 3}, {11, 3}, { 3,11}, {11,11}, { 7, 7}, {15, 7}, { 7,15}, {15,15}, { 3, 7}, {11, 7}, { 3,15}, {11,15}, { 7, 3}, {15, 3}, { 7,11}, {15,11}, { 1, 3}, { 9, 3}, { 1,11}, { 9,11}, { 5, 7}, {13, 7}, { 5,15}, {13,15}, { 1, 7}, { 9, 7}, { 1,15}, { 9,15}, { 5, 3}, {13, 3}, { 5,11}, {13,11}, { 3, 1}, {11, 1}, { 3, 9}, {11, 9}, { 7, 5}, {15, 5}, { 7,13}, {15,13}, { 3, 5}, {11, 5}, { 3,13}, {11,13}, { 7, 1}, {15, 1}, { 7, 9}, {15, 9}, { 0, 1}, { 8, 1}, { 0, 9}, { 8, 9}, { 4, 5}, {12, 5}, { 4,13}, {12,13}, { 0, 5}, { 8, 5}, { 0,13}, { 8,13}, { 4, 1}, {12, 1}, { 4, 9}, {12, 9}, { 2, 3}, {10, 3}, { 2,11}, {10,11}, { 6, 7}, {14, 7}, { 6,15}, {14,15}, { 2, 7}, {10, 7}, { 2,15}, {10,15}, { 6, 3}, {14, 3}, { 6,11}, {14,11}, { 0, 3}, { 8, 3}, { 0,11}, { 8,11}, { 4, 7}, {12, 7}, { 4,15}, {12,15}, { 0, 7}, { 8, 7}, { 0,15}, { 8,15}, { 4, 3}, {12, 3}, { 4,11}, {12,11}, { 2, 1}, {10, 1}, { 2, 9}, {10, 9}, { 6, 5}, {14, 5}, { 6,13}, {14,13}, { 2, 5}, {10, 5}, { 2,13}, {10,13}, { 6, 1}, {14, 1}, { 6, 9}, {14, 9}, { 1, 0}, { 9, 0}, { 1, 8}, { 9, 8}, { 5, 4}, {13, 4}, { 5,12}, {13,12}, { 1, 4}, { 9, 4}, { 1,12}, { 9,12}, { 5, 0}, {13, 0}, { 5, 8}, {13, 8}, { 3, 2}, {11, 2}, { 3,10}, {11,10}, { 7, 6}, {15, 6}, { 7,14}, {15,14}, { 3, 6}, {11, 6}, { 3,14}, {11,14}, { 7, 2}, {15, 2}, { 7,10}, {15,10}, { 1, 2}, { 9, 2}, { 1,10}, { 9,10}, { 5, 6}, {13, 6}, { 5,14}, {13,14}, { 1, 6}, { 9, 6}, { 1,14}, { 9,14}, { 5, 2}, {13, 2}, { 5,10}, {13,10}, { 3, 0}, {11, 0}, { 3, 8}, {11, 8}, { 7, 4}, {15, 4}, { 7,12}, {15,12}, { 3, 4}, {11, 4}, { 3,12}, {11,12}, { 7, 0}, {15, 0}, { 7, 8}, {15, 8},
16946
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
97 };
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
98
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
99 struct vf_priv_s {
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
100 int log2_count;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
101 int qp;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
102 int mode;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
103 int mpeg2;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
104 int temp_stride[3];
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
105 uint8_t *src[3];
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
106 int16_t *temp[3];
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
107 int outbuf_size;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
108 uint8_t *outbuf;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
109 AVCodecContext *avctx_enc[BLOCK*BLOCK];
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
110 AVFrame *frame;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
111 AVFrame *frame_dec;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
112 };
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
113
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
114 static void store_slice_c(uint8_t *dst, int16_t *src, int dst_stride, int src_stride, int width, int height, int log2_scale){
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
115 int y, x;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
116
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
117 #define STORE(pos) \
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
118 temp= ((src[x + y*src_stride + pos]<<log2_scale) + d[pos])>>8;\
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
119 if(temp & 0x100) temp= ~(temp>>31);\
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
120 dst[x + y*dst_stride + pos]= temp;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
121
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
122 for(y=0; y<height; y++){
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
123 const uint8_t *d= dither[y&7];
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
124 for(x=0; x<width; x+=8){
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
125 int temp;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
126 STORE(0);
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
127 STORE(1);
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
128 STORE(2);
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
129 STORE(3);
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
130 STORE(4);
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
131 STORE(5);
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
132 STORE(6);
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
133 STORE(7);
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
134 }
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
135 }
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
136 }
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
137
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
138 static void filter(struct vf_priv_s *p, uint8_t *dst[3], uint8_t *src[3], int dst_stride[3], int src_stride[3], int width, int height, uint8_t *qp_store, int qp_stride){
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
139 int x, y, i, j;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
140 const int count= 1<<p->log2_count;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
141
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
142 for(i=0; i<3; i++){
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
143 int is_chroma= !!i;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
144 int w= width >>is_chroma;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
145 int h= height>>is_chroma;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
146 int stride= p->temp_stride[i];
17081
f612d2cdb262 switch to snow
michael
parents: 17012
diff changeset
147 int block= BLOCK>>is_chroma;
16946
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
148
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29087
diff changeset
149 if (!src[i] || !dst[i])
16946
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
150 continue; // HACK avoid crash for Y8 colourspace
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
151 for(y=0; y<h; y++){
17081
f612d2cdb262 switch to snow
michael
parents: 17012
diff changeset
152 int index= block + block*stride + y*stride;
23457
a124f3abc1ec Replace implicit use of fast_memcpy via macro by explicit use to allow
reimar
parents: 19569
diff changeset
153 fast_memcpy(p->src[i] + index, src[i] + y*src_stride[i], w);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29087
diff changeset
154 for(x=0; x<block; x++){
16946
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
155 p->src[i][index - x - 1]= p->src[i][index + x ];
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
156 p->src[i][index + w + x ]= p->src[i][index + w - x - 1];
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
157 }
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
158 }
17081
f612d2cdb262 switch to snow
michael
parents: 17012
diff changeset
159 for(y=0; y<block; y++){
23457
a124f3abc1ec Replace implicit use of fast_memcpy via macro by explicit use to allow
reimar
parents: 19569
diff changeset
160 fast_memcpy(p->src[i] + ( block-1-y)*stride, p->src[i] + ( y+block )*stride, stride);
a124f3abc1ec Replace implicit use of fast_memcpy via macro by explicit use to allow
reimar
parents: 19569
diff changeset
161 fast_memcpy(p->src[i] + (h+block +y)*stride, p->src[i] + (h-y+block-1)*stride, stride);
16946
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
162 }
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
163
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
164 p->frame->linesize[i]= stride;
17081
f612d2cdb262 switch to snow
michael
parents: 17012
diff changeset
165 memset(p->temp[i], 0, (h+2*block)*stride*sizeof(int16_t));
16946
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
166 }
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
167
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
168 if(p->qp)
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
169 p->frame->quality= p->qp * FF_QP2LAMBDA;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
170 else
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
171 p->frame->quality= (qp_store[0] * FF_QP2LAMBDA)>>p->mpeg2;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
172 // init per MB qscale stuff FIXME
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
173
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
174 for(i=0; i<count; i++){
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
175 const int x1= offset[i+count-1][0];
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
176 const int y1= offset[i+count-1][1];
18976
6a08d0dabca8 Remove unused variables, patch by Stefan Huehner, stefan ##at## huehner org.
diego
parents: 18131
diff changeset
177 int offset, out_size;
16946
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
178 p->frame->data[0]= p->src[0] + x1 + y1 * p->frame->linesize[0];
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
179 p->frame->data[1]= p->src[1] + x1/2 + y1/2 * p->frame->linesize[1];
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
180 p->frame->data[2]= p->src[2] + x1/2 + y1/2 * p->frame->linesize[2];
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
181
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
182 out_size = avcodec_encode_video(p->avctx_enc[i], p->outbuf, p->outbuf_size, p->frame);
17614
673a0ce6cfb6 lavc exposes the reconstructed picture, so no need to decode it again
lorenm
parents: 17523
diff changeset
183 p->frame_dec = p->avctx_enc[i]->coded_frame;
16946
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
184
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
185 offset= (BLOCK-x1) + (BLOCK-y1)*p->frame_dec->linesize[0];
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
186 //FIXME optimize
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
187 for(y=0; y<height; y++){
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
188 for(x=0; x<width; x++){
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
189 p->temp[0][ x + y*p->temp_stride[0] ] += p->frame_dec->data[0][ x + y*p->frame_dec->linesize[0] + offset ];
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
190 }
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
191 }
17081
f612d2cdb262 switch to snow
michael
parents: 17012
diff changeset
192 offset= (BLOCK/2-x1/2) + (BLOCK/2-y1/2)*p->frame_dec->linesize[1];
16946
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
193 for(y=0; y<height/2; y++){
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
194 for(x=0; x<width/2; x++){
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
195 p->temp[1][ x + y*p->temp_stride[1] ] += p->frame_dec->data[1][ x + y*p->frame_dec->linesize[1] + offset ];
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
196 p->temp[2][ x + y*p->temp_stride[2] ] += p->frame_dec->data[2][ x + y*p->frame_dec->linesize[2] + offset ];
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
197 }
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
198 }
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
199 }
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
200
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
201 for(j=0; j<3; j++){
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
202 int is_chroma= !!j;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
203 store_slice_c(dst[j], p->temp[j], dst_stride[j], p->temp_stride[j], width>>is_chroma, height>>is_chroma, 8-p->log2_count);
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
204 }
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
205 }
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
206
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
207 static int config(struct vf_instance_s* vf,
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
208 int width, int height, int d_width, int d_height,
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
209 unsigned int flags, unsigned int outfmt){
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
210 int i;
17081
f612d2cdb262 switch to snow
michael
parents: 17012
diff changeset
211 AVCodec *enc= avcodec_find_encoder(CODEC_ID_SNOW);
16946
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
212
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
213 for(i=0; i<3; i++){
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
214 int is_chroma= !!i;
17081
f612d2cdb262 switch to snow
michael
parents: 17012
diff changeset
215 int w= ((width + 4*BLOCK-1) & (~(2*BLOCK-1)))>>is_chroma;
f612d2cdb262 switch to snow
michael
parents: 17012
diff changeset
216 int h= ((height + 4*BLOCK-1) & (~(2*BLOCK-1)))>>is_chroma;
16946
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
217
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
218 vf->priv->temp_stride[i]= w;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
219 vf->priv->temp[i]= malloc(vf->priv->temp_stride[i]*h*sizeof(int16_t));
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
220 vf->priv->src [i]= malloc(vf->priv->temp_stride[i]*h*sizeof(uint8_t));
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
221 }
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
222 for(i=0; i< (1<<vf->priv->log2_count); i++){
23748
fb2a176224ac remove unused variables
lorenm
parents: 23457
diff changeset
223 AVCodecContext *avctx_enc;
16946
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
224
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
225 avctx_enc=
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
226 vf->priv->avctx_enc[i]= avcodec_alloc_context();
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
227 avctx_enc->width = width + BLOCK;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
228 avctx_enc->height = height + BLOCK;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
229 avctx_enc->time_base= (AVRational){1,25}; // meaningless
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
230 avctx_enc->gop_size = 300;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
231 avctx_enc->max_b_frames= 0;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
232 avctx_enc->pix_fmt = PIX_FMT_YUV420P;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
233 avctx_enc->flags = CODEC_FLAG_QSCALE | CODEC_FLAG_LOW_DELAY;
17081
f612d2cdb262 switch to snow
michael
parents: 17012
diff changeset
234 avctx_enc->strict_std_compliance = FF_COMPLIANCE_EXPERIMENTAL;
19569
7ba51e3ffca6 segfault fix
michael
parents: 18976
diff changeset
235 avctx_enc->global_quality= 123;
16946
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
236 avcodec_open(avctx_enc, enc);
19569
7ba51e3ffca6 segfault fix
michael
parents: 18976
diff changeset
237 assert(avctx_enc->codec);
16946
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
238 }
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
239 vf->priv->frame= avcodec_alloc_frame();
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
240 vf->priv->frame_dec= avcodec_alloc_frame();
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
241
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
242 vf->priv->outbuf_size= (width + BLOCK)*(height + BLOCK)*10;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
243 vf->priv->outbuf= malloc(vf->priv->outbuf_size);
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
244
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
245 return vf_next_config(vf,width,height,d_width,d_height,flags,outfmt);
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
246 }
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
247
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
248 static void get_image(struct vf_instance_s* vf, mp_image_t *mpi){
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
249 if(mpi->flags&MP_IMGFLAG_PRESERVE) return; // don't change
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
250 // ok, we can do pp in-place (or pp disabled):
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
251 vf->dmpi=vf_get_image(vf->next,mpi->imgfmt,
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
252 mpi->type, mpi->flags | MP_IMGFLAG_READABLE, mpi->width, mpi->height);
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
253 mpi->planes[0]=vf->dmpi->planes[0];
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
254 mpi->stride[0]=vf->dmpi->stride[0];
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
255 mpi->width=vf->dmpi->width;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
256 if(mpi->flags&MP_IMGFLAG_PLANAR){
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
257 mpi->planes[1]=vf->dmpi->planes[1];
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
258 mpi->planes[2]=vf->dmpi->planes[2];
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
259 mpi->stride[1]=vf->dmpi->stride[1];
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
260 mpi->stride[2]=vf->dmpi->stride[2];
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
261 }
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
262 mpi->flags|=MP_IMGFLAG_DIRECT;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
263 }
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
264
17906
20aca9baf5d8 passing pts through the filter layer (lets see if pts or cola comes out at the end)
michael
parents: 17614
diff changeset
265 static int put_image(struct vf_instance_s* vf, mp_image_t *mpi, double pts){
16946
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
266 mp_image_t *dmpi;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
267
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
268 if(!(mpi->flags&MP_IMGFLAG_DIRECT)){
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
269 // no DR, so get a new image! hope we'll get DR buffer:
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
270 dmpi=vf_get_image(vf->next,mpi->imgfmt,
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
271 MP_IMGTYPE_TEMP,
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
272 MP_IMGFLAG_ACCEPT_STRIDE|MP_IMGFLAG_PREFER_ALIGNED_STRIDE,
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
273 mpi->width,mpi->height);
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
274 vf_clone_mpi_attributes(dmpi, mpi);
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
275 }else{
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
276 dmpi=vf->dmpi;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
277 }
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
278
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
279 vf->priv->mpeg2= mpi->qscale_type;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
280 if(vf->priv->log2_count || !(mpi->flags&MP_IMGFLAG_DIRECT)){
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
281 if(mpi->qscale || vf->priv->qp){
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
282 filter(vf->priv, dmpi->planes, mpi->planes, dmpi->stride, mpi->stride, mpi->w, mpi->h, mpi->qscale, mpi->qstride);
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
283 }else{
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
284 memcpy_pic(dmpi->planes[0], mpi->planes[0], mpi->w, mpi->h, dmpi->stride[0], mpi->stride[0]);
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
285 memcpy_pic(dmpi->planes[1], mpi->planes[1], mpi->w>>mpi->chroma_x_shift, mpi->h>>mpi->chroma_y_shift, dmpi->stride[1], mpi->stride[1]);
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
286 memcpy_pic(dmpi->planes[2], mpi->planes[2], mpi->w>>mpi->chroma_x_shift, mpi->h>>mpi->chroma_y_shift, dmpi->stride[2], mpi->stride[2]);
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
287 }
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
288 }
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
289
28290
25337a2147e7 Lots and lots of #ifdef ARCH_... -> #if ARCH_...
reimar
parents: 27754
diff changeset
290 #if HAVE_MMX
27754
08d18fe9da52 Change all occurrences of asm and __asm to __asm__, same as was done for FFmpeg.
diego
parents: 26727
diff changeset
291 if(gCpuCaps.hasMMX) __asm__ volatile ("emms\n\t");
16946
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
292 #endif
28290
25337a2147e7 Lots and lots of #ifdef ARCH_... -> #if ARCH_...
reimar
parents: 27754
diff changeset
293 #if HAVE_MMX2
27754
08d18fe9da52 Change all occurrences of asm and __asm to __asm__, same as was done for FFmpeg.
diego
parents: 26727
diff changeset
294 if(gCpuCaps.hasMMX2) __asm__ volatile ("sfence\n\t");
16946
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
295 #endif
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
296
17906
20aca9baf5d8 passing pts through the filter layer (lets see if pts or cola comes out at the end)
michael
parents: 17614
diff changeset
297 return vf_next_put_image(vf,dmpi, pts);
16946
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
298 }
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
299
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
300 static void uninit(struct vf_instance_s* vf){
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
301 int i;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
302 if(!vf->priv) return;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
303
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
304 for(i=0; i<3; i++){
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
305 if(vf->priv->temp[i]) free(vf->priv->temp[i]);
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
306 vf->priv->temp[i]= NULL;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
307 if(vf->priv->src[i]) free(vf->priv->src[i]);
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
308 vf->priv->src[i]= NULL;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
309 }
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
310 for(i=0; i<BLOCK*BLOCK; i++){
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
311 av_freep(&vf->priv->avctx_enc[i]);
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
312 }
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
313
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
314 free(vf->priv);
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
315 vf->priv=NULL;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
316 }
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
317
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
318 //===========================================================================//
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
319 static int query_format(struct vf_instance_s* vf, unsigned int fmt){
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
320 switch(fmt){
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
321 case IMGFMT_YV12:
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
322 case IMGFMT_I420:
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
323 case IMGFMT_IYUV:
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
324 case IMGFMT_Y800:
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
325 case IMGFMT_Y8:
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
326 return vf_next_query_format(vf,fmt);
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
327 }
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
328 return 0;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
329 }
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
330
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
331 static int control(struct vf_instance_s* vf, int request, void* data){
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
332 switch(request){
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
333 case VFCTRL_QUERY_MAX_PP_LEVEL:
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
334 return 8;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
335 case VFCTRL_SET_PP_LEVEL:
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
336 vf->priv->log2_count= *((unsigned int*)data);
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
337 //FIXME we have to realloc a few things here
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
338 return CONTROL_TRUE;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
339 }
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
340 return vf_next_control(vf,request,data);
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
341 }
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
342
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
343 static int open(vf_instance_t *vf, char* args){
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
344
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
345 int log2c=-1;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29087
diff changeset
346
16946
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
347 vf->config=config;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
348 vf->put_image=put_image;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
349 vf->get_image=get_image;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
350 vf->query_format=query_format;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
351 vf->uninit=uninit;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
352 vf->control= control;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
353 vf->priv=malloc(sizeof(struct vf_priv_s));
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
354 memset(vf->priv, 0, sizeof(struct vf_priv_s));
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29087
diff changeset
355
16946
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
356 avcodec_init();
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
357 avcodec_register_all();
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29087
diff changeset
358
16946
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
359 vf->priv->log2_count= 4;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29087
diff changeset
360
16946
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
361 if (args) sscanf(args, "%d:%d:%d", &log2c, &vf->priv->qp, &vf->priv->mode);
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
362
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
363 if( log2c >=0 && log2c <=8 )
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
364 vf->priv->log2_count = log2c;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
365
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
366 if(vf->priv->qp < 0)
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
367 vf->priv->qp = 0;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
368
28290
25337a2147e7 Lots and lots of #ifdef ARCH_... -> #if ARCH_...
reimar
parents: 27754
diff changeset
369 // #if HAVE_MMX
16946
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
370 // if(gCpuCaps.hasMMX){
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
371 // store_slice= store_slice_mmx;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
372 // }
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
373 // #endif
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
374
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
375 return 1;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
376 }
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
377
25221
00fff9a3b735 Make all vf_info_t structs const
reimar
parents: 24973
diff changeset
378 const vf_info_t vf_info_uspp = {
16946
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
379 "ultra simple/slow postprocess",
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
380 "uspp",
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
381 "Michael Niedermayer",
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
382 "",
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
383 open,
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
384 NULL
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
385 };