annotate libmpcodecs/vf_uspp.c @ 35418:cedb0ba2b5c6

Move the code to set guiInfo's Track, Chapter and Angle start values. Set them before checking whether there is any media opened, because with no media opened we clear the counters.
author ib
date Thu, 29 Nov 2012 14:11:03 +0000
parents 3ab474cb7b4d
children d206960484fe
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
16946
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
1 /*
26727
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
2 * Copyright (C) 2005 Michael Niedermayer <michaelni@gmx.at>
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
3 *
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
4 * This file is part of MPlayer.
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
5 *
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
6 * MPlayer is free software; you can redistribute it and/or modify
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
7 * it under the terms of the GNU General Public License as published by
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
8 * the Free Software Foundation; either version 2 of the License, or
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
9 * (at your option) any later version.
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
10 *
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
11 * MPlayer is distributed in the hope that it will be useful,
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
14 * GNU General Public License for more details.
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
15 *
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
16 * You should have received a copy of the GNU General Public License along
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
17 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
19 */
16946
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
20
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
21 #include <stdio.h>
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
22 #include <stdlib.h>
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
23 #include <string.h>
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
24 #include <inttypes.h>
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
25 #include <math.h>
19569
7ba51e3ffca6 segfault fix
michael
parents: 18976
diff changeset
26 #include <assert.h>
16946
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
27
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 16946
diff changeset
28 #include "config.h"
16946
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
29
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 16946
diff changeset
30 #include "mp_msg.h"
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 16946
diff changeset
31 #include "cpudetect.h"
16946
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
32
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 16946
diff changeset
33 #include "libavcodec/avcodec.h"
16946
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
34
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
35 #include "img_format.h"
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
36 #include "mp_image.h"
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
37 #include "vf.h"
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
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 16946
diff changeset
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
f612d2cdb262 switch to snow
michael
parents: 17012
diff changeset
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
f612d2cdb262 switch to snow
michael
parents: 17012
diff changeset
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
f612d2cdb262 switch to snow
michael
parents: 17012
diff changeset
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
f612d2cdb262 switch to snow
michael
parents: 17012
diff changeset
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
847e0d6aa196 Remove unused variable for FFmpeg encode result.
reimar
parents: 32702
diff changeset
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
847e0d6aa196 Remove unused variable for FFmpeg encode result.
reimar
parents: 32702
diff changeset
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
f612d2cdb262 switch to snow
michael
parents: 17012
diff changeset
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
12a8828549cd Fix possible crash when using -vf uspp,format=y8
reimar
parents: 34566
diff changeset
204 if (!dst[j])
12a8828549cd Fix possible crash when using -vf uspp,format=y8
reimar
parents: 34566
diff changeset
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
f612d2cdb262 switch to snow
michael
parents: 17012
diff changeset
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
f612d2cdb262 switch to snow
michael
parents: 17012
diff changeset
218 int w= ((width + 4*BLOCK-1) & (~(2*BLOCK-1)))>>is_chroma;
f612d2cdb262 switch to snow
michael
parents: 17012
diff changeset
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
fb2a176224ac remove unused variables
lorenm
parents: 23457
diff changeset
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
f612d2cdb262 switch to snow
michael
parents: 17012
diff changeset
238 avctx_enc->strict_std_compliance = FF_COMPLIANCE_EXPERIMENTAL;
19569
7ba51e3ffca6 segfault fix
michael
parents: 18976
diff changeset
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
7ba51e3ffca6 segfault fix
michael
parents: 18976
diff changeset
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
25337a2147e7 Lots and lots of #ifdef ARCH_... -> #if ARCH_...
reimar
parents: 27754
diff changeset
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
25337a2147e7 Lots and lots of #ifdef ARCH_... -> #if ARCH_...
reimar
parents: 27754
diff changeset
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
25337a2147e7 Lots and lots of #ifdef ARCH_... -> #if ARCH_...
reimar
parents: 27754
diff changeset
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
00fff9a3b735 Make all vf_info_t structs const
reimar
parents: 24973
diff changeset
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 };