Mercurial > mplayer.hg
annotate libmpcodecs/vf_uspp.c @ 34757:da38eb1e2069
subassconvert: handle "\r\n" line ends
Previously the code converting text subtitles to ASS format converted newline
characters, and only those, to ASS "new line" markup. If the subtitles
contained "\r\n", the "\r" was thus left in the text. In previous libass
versions the "\r" was not visible, but in the current one it produces an empty
box. Improve the conversion to remove the "\r" in that case. Also treat a lone
"\r" as a newline.
Picked from mplayer2/3e0a2705
author | cboesch |
---|---|
date | Sat, 07 Apr 2012 11:17:09 +0000 |
parents | 3ab474cb7b4d |
children | d206960484fe |
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" |
33871
30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
33343
diff
changeset
|
38 #include "av_helpers.h" |
17012 | 39 #include "libvo/fastmemcpy.h" |
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
40 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
41 #define XMIN(a,b) ((a) < (b) ? (a) : (b)) |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
42 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
43 #define BLOCK 16 |
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 //===========================================================================// |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
46 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
|
47 { 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
|
48 { 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
|
49 { 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
|
50 { 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
|
51 { 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
|
52 { 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
|
53 { 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
|
54 { 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
|
55 }; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
56 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
57 static const uint8_t offset[511][2]= { |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29087
diff
changeset
|
58 { 0, 0}, |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29087
diff
changeset
|
59 { 0, 0}, { 8, 8}, |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29087
diff
changeset
|
60 { 0, 0}, { 4, 4}, {12, 8}, { 8,12}, |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29087
diff
changeset
|
61 { 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
|
62 |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29087
diff
changeset
|
63 { 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
|
64 { 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
|
65 |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29087
diff
changeset
|
66 { 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
|
67 { 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
|
68 { 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
|
69 { 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
|
70 |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29087
diff
changeset
|
71 { 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
|
72 { 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
|
73 { 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
|
74 { 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
|
75 { 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
|
76 { 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
|
77 { 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
|
78 { 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
|
79 |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29087
diff
changeset
|
80 { 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
|
81 { 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
|
82 { 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
|
83 { 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
|
84 { 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
|
85 { 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
|
86 { 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
|
87 { 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
|
88 { 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
|
89 { 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
|
90 { 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
|
91 { 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
|
92 { 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
|
93 { 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
|
94 { 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
|
95 { 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
|
96 |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29087
diff
changeset
|
97 { 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
|
98 }; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
99 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
100 struct vf_priv_s { |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
101 int log2_count; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
102 int qp; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
103 int mode; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
104 int mpeg2; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
105 int temp_stride[3]; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
106 uint8_t *src[3]; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
107 int16_t *temp[3]; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
108 int outbuf_size; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
109 uint8_t *outbuf; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
110 AVCodecContext *avctx_enc[BLOCK*BLOCK]; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
111 AVFrame *frame; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
112 AVFrame *frame_dec; |
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 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
115 static void store_slice_c(uint8_t *dst, int16_t *src, int dst_stride, int src_stride, int width, int height, int log2_scale){ |
32702
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
32537
diff
changeset
|
116 int y, x; |
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
117 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
118 #define STORE(pos) \ |
32702
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
32537
diff
changeset
|
119 temp= ((src[x + y*src_stride + pos]<<log2_scale) + d[pos])>>8;\ |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
32537
diff
changeset
|
120 if(temp & 0x100) temp= ~(temp>>31);\ |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
32537
diff
changeset
|
121 dst[x + y*dst_stride + pos]= temp; |
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
122 |
32702
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
32537
diff
changeset
|
123 for(y=0; y<height; y++){ |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
32537
diff
changeset
|
124 const uint8_t *d= dither[y&7]; |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
32537
diff
changeset
|
125 for(x=0; x<width; x+=8){ |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
32537
diff
changeset
|
126 int temp; |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
32537
diff
changeset
|
127 STORE(0); |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
32537
diff
changeset
|
128 STORE(1); |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
32537
diff
changeset
|
129 STORE(2); |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
32537
diff
changeset
|
130 STORE(3); |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
32537
diff
changeset
|
131 STORE(4); |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
32537
diff
changeset
|
132 STORE(5); |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
32537
diff
changeset
|
133 STORE(6); |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
32537
diff
changeset
|
134 STORE(7); |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
32537
diff
changeset
|
135 } |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
32537
diff
changeset
|
136 } |
16946
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 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
139 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
|
140 int x, y, i, j; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
141 const int count= 1<<p->log2_count; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
142 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
143 for(i=0; i<3; i++){ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
144 int is_chroma= !!i; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
145 int w= width >>is_chroma; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
146 int h= height>>is_chroma; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
147 int stride= p->temp_stride[i]; |
17081 | 148 int block= BLOCK>>is_chroma; |
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
149 |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29087
diff
changeset
|
150 if (!src[i] || !dst[i]) |
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
151 continue; // HACK avoid crash for Y8 colourspace |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
152 for(y=0; y<h; y++){ |
17081 | 153 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
|
154 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
|
155 for(x=0; x<block; x++){ |
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
156 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
|
157 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
|
158 } |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
159 } |
17081 | 160 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
|
161 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
|
162 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
|
163 } |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
164 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
165 p->frame->linesize[i]= stride; |
17081 | 166 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
|
167 } |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
168 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
169 if(p->qp) |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
170 p->frame->quality= p->qp * FF_QP2LAMBDA; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
171 else |
30412
41fb4acf3df6
Support more qscale types in most post-processing filters.
reimar
parents:
29263
diff
changeset
|
172 p->frame->quality= norm_qscale(qp_store[0], p->mpeg2) * FF_QP2LAMBDA; |
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
173 // init per MB qscale stuff FIXME |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
174 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
175 for(i=0; i<count; i++){ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
176 const int x1= offset[i+count-1][0]; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
177 const int y1= offset[i+count-1][1]; |
33343 | 178 int offset; |
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
179 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
|
180 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
|
181 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
|
182 |
33343 | 183 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
|
184 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
|
185 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
186 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
|
187 //FIXME optimize |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
188 for(y=0; y<height; y++){ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
189 for(x=0; x<width; x++){ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
190 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
|
191 } |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
192 } |
17081 | 193 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
|
194 for(y=0; y<height/2; y++){ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
195 for(x=0; x<width/2; x++){ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
196 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
|
197 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
|
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 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
202 for(j=0; j<3; j++){ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
203 int is_chroma= !!j; |
34717 | 204 if (!dst[j]) |
205 continue; // HACK avoid crash for Y8 colourspace | |
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
206 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
|
207 } |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
208 } |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
209 |
30642
a972c1a4a012
cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents:
30638
diff
changeset
|
210 static int config(struct vf_instance *vf, |
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
211 int width, int height, int d_width, int d_height, |
32702
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
32537
diff
changeset
|
212 unsigned int flags, unsigned int outfmt){ |
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
213 int i; |
17081 | 214 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
|
215 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
216 for(i=0; i<3; i++){ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
217 int is_chroma= !!i; |
17081 | 218 int w= ((width + 4*BLOCK-1) & (~(2*BLOCK-1)))>>is_chroma; |
219 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
|
220 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
221 vf->priv->temp_stride[i]= w; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
222 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
|
223 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
|
224 } |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
225 for(i=0; i< (1<<vf->priv->log2_count); i++){ |
23748 | 226 AVCodecContext *avctx_enc; |
34719
3ab474cb7b4d
uspp filter: set no_bitstream option, since we do not care about the
reimar
parents:
34717
diff
changeset
|
227 AVDictionary *opts = NULL; |
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
228 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
229 avctx_enc= |
34566
f3d53cd55376
Update deprecated avcodec_alloc_context()/avcodec_open() API calls
siretart
parents:
33871
diff
changeset
|
230 vf->priv->avctx_enc[i]= avcodec_alloc_context3(NULL); |
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
231 avctx_enc->width = width + BLOCK; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
232 avctx_enc->height = height + BLOCK; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
233 avctx_enc->time_base= (AVRational){1,25}; // meaningless |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
234 avctx_enc->gop_size = 300; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
235 avctx_enc->max_b_frames= 0; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
236 avctx_enc->pix_fmt = PIX_FMT_YUV420P; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
237 avctx_enc->flags = CODEC_FLAG_QSCALE | CODEC_FLAG_LOW_DELAY; |
17081 | 238 avctx_enc->strict_std_compliance = FF_COMPLIANCE_EXPERIMENTAL; |
19569 | 239 avctx_enc->global_quality= 123; |
34719
3ab474cb7b4d
uspp filter: set no_bitstream option, since we do not care about the
reimar
parents:
34717
diff
changeset
|
240 av_dict_set(&opts, "no_bitstream", "1", 0); |
3ab474cb7b4d
uspp filter: set no_bitstream option, since we do not care about the
reimar
parents:
34717
diff
changeset
|
241 avcodec_open2(avctx_enc, enc, &opts); |
3ab474cb7b4d
uspp filter: set no_bitstream option, since we do not care about the
reimar
parents:
34717
diff
changeset
|
242 av_dict_free(&opts); |
19569 | 243 assert(avctx_enc->codec); |
16946
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 vf->priv->frame= avcodec_alloc_frame(); |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
246 vf->priv->frame_dec= avcodec_alloc_frame(); |
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 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
|
249 vf->priv->outbuf= malloc(vf->priv->outbuf_size); |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
250 |
32702
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
32537
diff
changeset
|
251 return vf_next_config(vf,width,height,d_width,d_height,flags,outfmt); |
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
252 } |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
253 |
30642
a972c1a4a012
cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents:
30638
diff
changeset
|
254 static void get_image(struct vf_instance *vf, mp_image_t *mpi){ |
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
255 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
|
256 // 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
|
257 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
|
258 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
|
259 mpi->planes[0]=vf->dmpi->planes[0]; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
260 mpi->stride[0]=vf->dmpi->stride[0]; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
261 mpi->width=vf->dmpi->width; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
262 if(mpi->flags&MP_IMGFLAG_PLANAR){ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
263 mpi->planes[1]=vf->dmpi->planes[1]; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
264 mpi->planes[2]=vf->dmpi->planes[2]; |
32702
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
32537
diff
changeset
|
265 mpi->stride[1]=vf->dmpi->stride[1]; |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
32537
diff
changeset
|
266 mpi->stride[2]=vf->dmpi->stride[2]; |
16946
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 mpi->flags|=MP_IMGFLAG_DIRECT; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
269 } |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
270 |
30642
a972c1a4a012
cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents:
30638
diff
changeset
|
271 static int put_image(struct vf_instance *vf, mp_image_t *mpi, double pts){ |
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
272 mp_image_t *dmpi; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
273 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
274 if(!(mpi->flags&MP_IMGFLAG_DIRECT)){ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
275 // 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
|
276 dmpi=vf_get_image(vf->next,mpi->imgfmt, |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
277 MP_IMGTYPE_TEMP, |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
278 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
|
279 mpi->width,mpi->height); |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
280 vf_clone_mpi_attributes(dmpi, mpi); |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
281 }else{ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
282 dmpi=vf->dmpi; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
283 } |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
284 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
285 vf->priv->mpeg2= mpi->qscale_type; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
286 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
|
287 if(mpi->qscale || vf->priv->qp){ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
288 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
|
289 }else{ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
290 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
|
291 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
|
292 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
|
293 } |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
294 } |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
295 |
28290 | 296 #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
|
297 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
|
298 #endif |
28290 | 299 #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
|
300 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
|
301 #endif |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
302 |
17906
20aca9baf5d8
passing pts through the filter layer (lets see if pts or cola comes out at the end)
michael
parents:
17614
diff
changeset
|
303 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
|
304 } |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
305 |
30642
a972c1a4a012
cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents:
30638
diff
changeset
|
306 static void uninit(struct vf_instance *vf){ |
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
307 int i; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
308 if(!vf->priv) return; |
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<3; i++){ |
32537
8fa2f43cb760
Remove most of the NULL pointer check before free all over the code
cboesch
parents:
31959
diff
changeset
|
311 free(vf->priv->temp[i]); |
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
312 vf->priv->temp[i]= NULL; |
32537
8fa2f43cb760
Remove most of the NULL pointer check before free all over the code
cboesch
parents:
31959
diff
changeset
|
313 free(vf->priv->src[i]); |
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
314 vf->priv->src[i]= NULL; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
315 } |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
316 for(i=0; i<BLOCK*BLOCK; i++){ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
317 av_freep(&vf->priv->avctx_enc[i]); |
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 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
320 free(vf->priv); |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
321 vf->priv=NULL; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
322 } |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
323 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
324 //===========================================================================// |
30642
a972c1a4a012
cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents:
30638
diff
changeset
|
325 static int query_format(struct vf_instance *vf, unsigned int fmt){ |
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
326 switch(fmt){ |
32702
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
32537
diff
changeset
|
327 case IMGFMT_YV12: |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
32537
diff
changeset
|
328 case IMGFMT_I420: |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
32537
diff
changeset
|
329 case IMGFMT_IYUV: |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
32537
diff
changeset
|
330 case IMGFMT_Y800: |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
32537
diff
changeset
|
331 case IMGFMT_Y8: |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
32537
diff
changeset
|
332 return vf_next_query_format(vf,fmt); |
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
333 } |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
334 return 0; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
335 } |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
336 |
30642
a972c1a4a012
cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents:
30638
diff
changeset
|
337 static int control(struct vf_instance *vf, int request, void* data){ |
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
338 switch(request){ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
339 case VFCTRL_QUERY_MAX_PP_LEVEL: |
32702
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
32537
diff
changeset
|
340 return 8; |
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
341 case VFCTRL_SET_PP_LEVEL: |
32702
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
32537
diff
changeset
|
342 vf->priv->log2_count= *((unsigned int*)data); |
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
343 //FIXME we have to realloc a few things here |
32702
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
32537
diff
changeset
|
344 return CONTROL_TRUE; |
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
345 } |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
346 return vf_next_control(vf,request,data); |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
347 } |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
348 |
30638
a7b908875c14
Rename open() vf initialization function to vf_open().
diego
parents:
30412
diff
changeset
|
349 static int vf_open(vf_instance_t *vf, char *args){ |
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
350 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
351 int log2c=-1; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29087
diff
changeset
|
352 |
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
353 vf->config=config; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
354 vf->put_image=put_image; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
355 vf->get_image=get_image; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
356 vf->query_format=query_format; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
357 vf->uninit=uninit; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
358 vf->control= control; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
359 vf->priv=malloc(sizeof(struct vf_priv_s)); |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
360 memset(vf->priv, 0, sizeof(struct vf_priv_s)); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29087
diff
changeset
|
361 |
31959
f957f330aa6d
Introduce init_avcodec function to avoid duplicated FFmpeg initializations.
diego
parents:
30642
diff
changeset
|
362 init_avcodec(); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29087
diff
changeset
|
363 |
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
364 vf->priv->log2_count= 4; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29087
diff
changeset
|
365 |
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
366 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
|
367 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
368 if( log2c >=0 && log2c <=8 ) |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
369 vf->priv->log2_count = log2c; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
370 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
371 if(vf->priv->qp < 0) |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
372 vf->priv->qp = 0; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
373 |
28290 | 374 // #if HAVE_MMX |
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
375 // if(gCpuCaps.hasMMX){ |
32702
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
32537
diff
changeset
|
376 // store_slice= store_slice_mmx; |
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
377 // } |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
378 // #endif |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
379 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
380 return 1; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
381 } |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
382 |
25221 | 383 const vf_info_t vf_info_uspp = { |
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
384 "ultra simple/slow postprocess", |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
385 "uspp", |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
386 "Michael Niedermayer", |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
387 "", |
30638
a7b908875c14
Rename open() vf initialization function to vf_open().
diego
parents:
30412
diff
changeset
|
388 vf_open, |
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
389 NULL |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
390 }; |