Mercurial > mplayer.hg
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 |
rev | line source |
---|---|
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
1 /* |
26727 | 2 * Copyright (C) 2005 Michael Niedermayer <michaelni@gmx.at> |
3 * | |
4 * This file is part of MPlayer. | |
5 * | |
6 * MPlayer is free software; you can redistribute it and/or modify | |
7 * it under the terms of the GNU General Public License as published by | |
8 * the Free Software Foundation; either version 2 of the License, or | |
9 * (at your option) any later version. | |
10 * | |
11 * MPlayer is distributed in the hope that it will be useful, | |
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 * GNU General Public License for more details. | |
15 * | |
16 * You should have received a copy of the GNU General Public License along | |
17 * with MPlayer; if not, write to the Free Software Foundation, Inc., | |
18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | |
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 | 26 #include <assert.h> |
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
27 |
17012 | 28 #include "config.h" |
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
29 |
17012 | 30 #include "mp_msg.h" |
31 #include "cpudetect.h" | |
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
32 |
17012 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 215 int w= ((width + 4*BLOCK-1) & (~(2*BLOCK-1)))>>is_chroma; |
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 | 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 | 234 avctx_enc->strict_std_compliance = FF_COMPLIANCE_EXPERIMENTAL; |
19569 | 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 | 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 | 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 | 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 | 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 | 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 }; |