summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Schleef <ds@schleef.org>2009-09-21 11:33:50 -0700
committerDavid Schleef <ds@schleef.org>2009-09-21 11:46:25 -0700
commit960f418378c1065be4765f074e9a2ec39eb6b285 (patch)
tree2fbbb782b017c38627004d7adc025bb4e545f736
parent06c3d2e93ca940c667b542bf8b289bf8b4a4acf3 (diff)
cog: Add quality setting to cogscale
-rw-r--r--ext/cog/cogtables.c516
-rw-r--r--ext/cog/cogvirtframe.c146
-rw-r--r--ext/cog/cogvirtframe.h4
-rw-r--r--ext/cog/generate_tables.c70
-rw-r--r--ext/cog/gstcogscale.c128
5 files changed, 723 insertions, 141 deletions
diff --git a/ext/cog/cogtables.c b/ext/cog/cogtables.c
new file mode 100644
index 000000000..e83ba227a
--- /dev/null
+++ b/ext/cog/cogtables.c
@@ -0,0 +1,516 @@
+/* This file is autogenerated. Do not edit.*/
+#include <glib.h>
+gint8 cog_resample_table_4tap[256][4] = {
+ {0, 64, 0, 0}
+ , /* 0.000 0.000 0.000 -0.000 64 */
+ {0, 64, 0, 0}
+ , /* -0.248 -0.002 0.251 -0.001 64 */
+ {0, 64, 0, 0}
+ , /* -0.492 -0.008 0.504 -0.004 64 */
+ {-1, 64, 1, 0}
+ , /* 0.267 -0.017 -0.241 -0.009 64 */
+ {-1, 64, 1, 0}
+ , /* 0.031 -0.031 0.015 -0.015 64 */
+ {-1, 64, 1, 0}
+ , /* -0.202 -0.048 0.274 -0.024 64 */
+ {-1, 64, 1, 0}
+ , /* -0.431 -0.069 0.534 -0.034 64 */
+ {-2, 64, 2, 0}
+ , /* 0.344 -0.094 -0.203 -0.047 64 */
+ {-2, 64, 2, 0}
+ , /* 0.123 -0.123 0.061 -0.061 64 */
+ {-2, 64, 2, 0}
+ , /* -0.095 -0.155 0.326 -0.076 64 */
+ {-2, 64, 2, 0}
+ , /* -0.309 -0.191 0.594 -0.094 64 */
+ {-3, 64, 3, 0}
+ , /* 0.481 -0.231 -0.137 -0.113 64 */
+ {-3, 64, 3, 0}
+ , /* 0.275 -0.275 0.134 -0.134 64 */
+ {-3, 64, 3, 0}
+ , /* 0.072 -0.322 0.407 -0.157 64 */
+ {-3, 63, 4, 0}
+ , /* -0.128 0.628 -0.319 -0.181 64 */
+ {-3, 63, 4, 0}
+ , /* -0.323 0.573 -0.043 -0.207 64 */
+ {-4, 64, 4, 0}
+ , /* 0.484 -0.484 0.234 -0.234 64 */
+ {-4, 63, 5, 0}
+ , /* 0.296 0.454 -0.487 -0.263 64 */
+ {-4, 63, 5, 0}
+ , /* 0.111 0.389 -0.206 -0.294 64 */
+ {-4, 63, 5, 0}
+ , /* -0.071 0.321 0.076 -0.326 64 */
+ {-4, 63, 5, 0}
+ , /* -0.249 0.249 0.360 -0.360 64 */
+ {-5, 63, 6, 0}
+ , /* 0.576 0.174 -0.355 -0.395 64 */
+ {-5, 63, 6, 0}
+ , /* 0.405 0.095 -0.068 -0.432 64 */
+ {-5, 63, 6, 0}
+ , /* 0.237 0.013 0.220 -0.470 64 */
+ {-5, 63, 7, -1}
+ , /* 0.072 -0.072 -0.490 0.490 64 */
+ {-5, 63, 7, -1}
+ , /* -0.089 -0.161 -0.199 0.449 64 */
+ {-5, 63, 7, -1}
+ , /* -0.247 -0.253 0.093 0.407 64 */
+ {-5, 63, 7, -1}
+ , /* -0.401 -0.349 0.387 0.363 64 */
+ {-6, 63, 8, -1}
+ , /* 0.448 -0.448 -0.318 0.318 64 */
+ {-6, 63, 8, -1}
+ , /* 0.300 -0.550 -0.022 0.272 64 */
+ {-6, 63, 8, -1}
+ , /* 0.155 -0.655 0.276 0.224 64 */
+ {-6, 62, 9, -1}
+ , /* 0.013 0.237 -0.425 0.175 64 */
+ {-6, 62, 9, -1}
+ , /* -0.125 0.125 -0.125 0.125 64 */
+ {-6, 62, 9, -1}
+ , /* -0.260 0.010 0.176 0.074 64 */
+ {-6, 62, 9, -1}
+ , /* -0.392 -0.108 0.479 0.021 64 */
+ {-7, 62, 10, -1}
+ , /* 0.479 -0.229 -0.217 -0.033 64 */
+ {-7, 62, 10, -1}
+ , /* 0.353 -0.353 0.088 -0.088 64 */
+ {-7, 62, 10, -1}
+ , /* 0.231 -0.481 0.394 -0.144 64 */
+ {-7, 61, 11, -1}
+ , /* 0.111 0.389 -0.299 -0.201 64 */
+ {-7, 61, 11, -1}
+ , /* -0.006 0.256 0.009 -0.259 64 */
+ {-7, 61, 11, -1}
+ , /* -0.119 0.119 0.318 -0.318 64 */
+ {-7, 61, 12, -2}
+ , /* -0.230 -0.020 -0.371 0.621 64 */
+ {-7, 61, 12, -2}
+ , /* -0.337 -0.163 -0.060 0.560 64 */
+ {-7, 61, 12, -2}
+ , /* -0.442 -0.308 0.252 0.498 64 */
+ {-8, 61, 13, -2}
+ , /* 0.456 -0.456 -0.434 0.434 64 */
+ {-8, 61, 13, -2}
+ , /* 0.357 -0.607 -0.120 0.370 64 */
+ {-8, 60, 13, -1}
+ , /* 0.262 0.238 0.195 -0.695 64 */
+ {-8, 60, 14, -2}
+ , /* 0.168 0.082 -0.489 0.239 64 */
+ {-8, 60, 14, -2}
+ , /* 0.078 -0.078 -0.172 0.172 64 */
+ {-8, 60, 14, -2}
+ , /* -0.009 -0.241 0.146 0.104 64 */
+ {-8, 60, 14, -2}
+ , /* -0.094 -0.406 0.465 0.035 64 */
+ {-8, 59, 15, -2}
+ , /* -0.176 0.426 -0.216 -0.034 64 */
+ {-8, 59, 15, -2}
+ , /* -0.255 0.255 0.104 -0.104 64 */
+ {-8, 59, 15, -2}
+ , /* -0.332 0.082 0.425 -0.175 64 */
+ {-9, 59, 16, -2}
+ , /* 0.595 -0.095 -0.253 -0.247 64 */
+ {-9, 59, 16, -2}
+ , /* 0.524 -0.274 0.069 -0.319 64 */
+ {-9, 59, 16, -2}
+ , /* 0.455 -0.455 0.393 -0.393 64 */
+ {-9, 58, 17, -2}
+ , /* 0.389 0.361 -0.284 -0.466 64 */
+ {-9, 58, 17, -2}
+ , /* 0.326 0.174 0.041 -0.541 64 */
+ {-9, 58, 17, -2}
+ , /* 0.265 -0.015 0.366 -0.616 64 */
+ {-9, 58, 18, -3}
+ , /* 0.207 -0.207 -0.308 0.308 64 */
+ {-9, 58, 18, -3}
+ , /* 0.152 -0.402 0.018 0.232 64 */
+ {-9, 58, 18, -3}
+ , /* 0.099 -0.599 0.345 0.155 64 */
+ {-9, 57, 19, -3}
+ , /* 0.048 0.202 -0.328 0.078 64 */
+ {-9, 57, 19, -3}
+ , /* 0.000 0.000 0.000 0.000 64 */
+ {-9, 57, 19, -3}
+ , /* -0.046 -0.204 0.328 -0.078 64 */
+ {-9, 56, 20, -3}
+ , /* -0.089 0.589 -0.343 -0.157 64 */
+ {-9, 56, 20, -3}
+ , /* -0.130 0.380 -0.014 -0.236 64 */
+ {-9, 56, 20, -3}
+ , /* -0.168 0.168 0.316 -0.316 64 */
+ {-9, 56, 21, -4}
+ , /* -0.204 -0.046 -0.354 0.604 64 */
+ {-9, 56, 21, -4}
+ , /* -0.238 -0.262 -0.023 0.523 64 */
+ {-9, 56, 21, -4}
+ , /* -0.270 -0.480 0.308 0.442 64 */
+ {-9, 55, 22, -4}
+ , /* -0.299 0.299 -0.361 0.361 64 */
+ {-9, 55, 22, -4}
+ , /* -0.326 0.076 -0.030 0.280 64 */
+ {-9, 55, 22, -4}
+ , /* -0.350 -0.150 0.302 0.198 64 */
+ {-9, 54, 23, -4}
+ , /* -0.373 0.623 -0.366 0.116 64 */
+ {-9, 54, 23, -4}
+ , /* -0.393 0.393 -0.034 0.034 64 */
+ {-9, 54, 23, -4}
+ , /* -0.411 0.161 0.299 -0.049 64 */
+ {-10, 54, 24, -4}
+ , /* 0.573 -0.073 -0.369 -0.131 64 */
+ {-10, 54, 24, -4}
+ , /* 0.559 -0.309 -0.036 -0.214 64 */
+ {-9, 53, 24, -4}
+ , /* -0.453 0.453 0.297 -0.297 64 */
+ {-10, 53, 25, -4}
+ , /* 0.537 0.213 -0.370 -0.380 64 */
+ {-10, 53, 25, -4}
+ , /* 0.530 -0.030 -0.037 -0.463 64 */
+ {-9, 53, 25, -5}
+ , /* -0.476 -0.274 0.296 0.454 64 */
+ {-9, 52, 26, -5}
+ , /* -0.480 0.480 -0.370 0.370 64 */
+ {-9, 52, 26, -5}
+ , /* -0.481 0.231 -0.037 0.287 64 */
+ {-9, 52, 26, -5}
+ , /* -0.481 -0.019 0.296 0.204 64 */
+ {-10, 52, 27, -5}
+ , /* 0.521 -0.271 -0.370 0.120 64 */
+ {-9, 51, 27, -5}
+ , /* -0.475 0.475 -0.037 0.037 64 */
+ {-9, 51, 27, -5}
+ , /* -0.469 0.219 0.296 -0.046 64 */
+ {-10, 51, 28, -5}
+ , /* 0.539 -0.039 -0.371 -0.129 64 */
+ {-10, 51, 28, -5}
+ , /* 0.549 -0.299 -0.038 -0.212 64 */
+ {-9, 50, 28, -5}
+ , /* -0.439 0.439 0.295 -0.295 64 */
+ {-10, 50, 29, -5}
+ , /* 0.574 0.176 -0.372 -0.378 64 */
+ {-9, 50, 29, -6}
+ , /* -0.411 -0.089 -0.040 0.540 64 */
+ {-9, 50, 29, -6}
+ , /* -0.394 -0.356 0.293 0.457 64 */
+ {-9, 49, 30, -6}
+ , /* -0.375 0.375 -0.375 0.375 64 */
+ {-9, 49, 30, -6}
+ , /* -0.355 0.105 -0.043 0.293 64 */
+ {-9, 49, 30, -6}
+ , /* -0.333 -0.167 0.289 0.211 64 */
+ {-9, 48, 31, -6}
+ , /* -0.309 0.559 -0.380 0.130 64 */
+ {-9, 48, 31, -6}
+ , /* -0.283 0.283 -0.049 0.049 64 */
+ {-9, 48, 31, -6}
+ , /* -0.256 0.006 0.282 -0.032 64 */
+ {-9, 48, 31, -6}
+ , /* -0.228 -0.272 0.612 -0.112 64 */
+ {-9, 47, 32, -6}
+ , /* -0.198 0.448 -0.058 -0.192 64 */
+ {-9, 47, 32, -6}
+ , /* -0.166 0.166 0.271 -0.271 64 */
+ {-9, 47, 32, -6}
+ , /* -0.133 -0.117 0.601 -0.351 64 */
+ {-9, 47, 33, -7}
+ , /* -0.098 -0.402 -0.071 0.571 64 */
+ {-9, 46, 33, -6}
+ , /* -0.062 0.312 0.257 -0.507 64 */
+ {-9, 46, 34, -7}
+ , /* -0.024 0.024 -0.415 0.415 64 */
+ {-9, 46, 34, -7}
+ , /* 0.015 -0.265 -0.088 0.338 64 */
+ {-9, 46, 34, -7}
+ , /* 0.055 -0.555 0.239 0.261 64 */
+ {-9, 45, 35, -7}
+ , /* 0.097 0.153 -0.435 0.185 64 */
+ {-9, 45, 35, -7}
+ , /* 0.141 -0.141 -0.109 0.109 64 */
+ {-9, 45, 35, -7}
+ , /* 0.185 -0.435 0.216 0.034 64 */
+ {-9, 44, 36, -7}
+ , /* 0.231 0.269 -0.460 -0.040 64 */
+ {-9, 44, 36, -7}
+ , /* 0.278 -0.028 -0.137 -0.113 64 */
+ {-9, 44, 36, -7}
+ , /* 0.327 -0.327 0.186 -0.186 64 */
+ {-9, 43, 37, -7}
+ , /* 0.377 0.373 -0.492 -0.258 64 */
+ {-9, 43, 37, -7}
+ , /* 0.428 0.072 -0.170 -0.330 64 */
+ {-9, 43, 37, -7}
+ , /* 0.480 -0.230 0.151 -0.401 64 */
+ {-8, 42, 37, -7}
+ , /* -0.467 0.467 0.471 -0.471 64 */
+ {-8, 42, 38, -8}
+ , /* -0.412 0.162 -0.210 0.460 64 */
+ {-8, 42, 38, -8}
+ , /* -0.357 -0.143 0.108 0.392 64 */
+ {-8, 42, 38, -8}
+ , /* -0.300 -0.450 0.426 0.324 64 */
+ {-8, 41, 39, -8}
+ , /* -0.242 0.242 -0.258 0.258 64 */
+ {-8, 41, 39, -8}
+ , /* -0.183 -0.067 0.058 0.192 64 */
+ {-8, 41, 39, -8}
+ , /* -0.123 -0.377 0.373 0.127 64 */
+ {-8, 40, 40, -8}
+ , /* -0.062 0.312 -0.313 0.063 64 */
+ {-8, 40, 40, -8}
+ , /* 0.000 0.000 0.000 0.000 64 */
+ {-8, 40, 40, -8}
+ , /* 0.063 -0.313 0.312 -0.062 64 */
+ {-8, 39, 41, -8}
+ , /* 0.127 0.373 -0.377 -0.123 64 */
+ {-8, 39, 41, -8}
+ , /* 0.192 0.058 -0.067 -0.183 64 */
+ {-8, 39, 41, -8}
+ , /* 0.258 -0.258 0.242 -0.242 64 */
+ {-8, 38, 42, -8}
+ , /* 0.324 0.426 -0.450 -0.300 64 */
+ {-8, 38, 42, -8}
+ , /* 0.392 0.108 -0.143 -0.357 64 */
+ {-8, 38, 42, -8}
+ , /* 0.460 -0.210 0.162 -0.412 64 */
+ {-7, 37, 42, -8}
+ , /* -0.471 0.471 0.467 -0.467 64 */
+ {-7, 37, 43, -9}
+ , /* -0.401 0.151 -0.230 0.480 64 */
+ {-7, 37, 43, -9}
+ , /* -0.330 -0.170 0.072 0.428 64 */
+ {-7, 37, 43, -9}
+ , /* -0.258 -0.492 0.373 0.377 64 */
+ {-7, 36, 44, -9}
+ , /* -0.186 0.186 -0.327 0.327 64 */
+ {-7, 36, 44, -9}
+ , /* -0.113 -0.137 -0.028 0.278 64 */
+ {-7, 36, 44, -9}
+ , /* -0.040 -0.460 0.269 0.231 64 */
+ {-7, 35, 45, -9}
+ , /* 0.034 0.216 -0.435 0.185 64 */
+ {-7, 35, 45, -9}
+ , /* 0.109 -0.109 -0.141 0.141 64 */
+ {-7, 35, 45, -9}
+ , /* 0.185 -0.435 0.153 0.097 64 */
+ {-7, 34, 46, -9}
+ , /* 0.261 0.239 -0.555 0.055 64 */
+ {-7, 34, 46, -9}
+ , /* 0.338 -0.088 -0.265 0.015 64 */
+ {-7, 34, 46, -9}
+ , /* 0.415 -0.415 0.024 -0.024 64 */
+ {-6, 33, 46, -9}
+ , /* -0.507 0.257 0.312 -0.062 64 */
+ {-7, 33, 47, -9}
+ , /* 0.571 -0.071 -0.402 -0.098 64 */
+ {-6, 32, 47, -9}
+ , /* -0.351 0.601 -0.117 -0.133 64 */
+ {-6, 32, 47, -9}
+ , /* -0.271 0.271 0.166 -0.166 64 */
+ {-6, 32, 47, -9}
+ , /* -0.192 -0.058 0.448 -0.198 64 */
+ {-6, 31, 48, -9}
+ , /* -0.112 0.612 -0.272 -0.228 64 */
+ {-6, 31, 48, -9}
+ , /* -0.032 0.282 0.006 -0.256 64 */
+ {-6, 31, 48, -9}
+ , /* 0.049 -0.049 0.283 -0.283 64 */
+ {-6, 31, 48, -9}
+ , /* 0.130 -0.380 0.559 -0.309 64 */
+ {-6, 30, 49, -9}
+ , /* 0.211 0.289 -0.167 -0.333 64 */
+ {-6, 30, 49, -9}
+ , /* 0.293 -0.043 0.105 -0.355 64 */
+ {-6, 30, 49, -9}
+ , /* 0.375 -0.375 0.375 -0.375 64 */
+ {-6, 29, 50, -9}
+ , /* 0.457 0.293 -0.356 -0.394 64 */
+ {-6, 29, 50, -9}
+ , /* 0.540 -0.040 -0.089 -0.411 64 */
+ {-5, 29, 50, -10}
+ , /* -0.378 -0.372 0.176 0.574 64 */
+ {-5, 28, 50, -9}
+ , /* -0.295 0.295 0.439 -0.439 64 */
+ {-5, 28, 51, -10}
+ , /* -0.212 -0.038 -0.299 0.549 64 */
+ {-5, 28, 51, -10}
+ , /* -0.129 -0.371 -0.039 0.539 64 */
+ {-5, 27, 51, -9}
+ , /* -0.046 0.296 0.219 -0.469 64 */
+ {-5, 27, 51, -9}
+ , /* 0.037 -0.037 0.475 -0.475 64 */
+ {-5, 27, 52, -10}
+ , /* 0.120 -0.370 -0.271 0.521 64 */
+ {-5, 26, 52, -9}
+ , /* 0.204 0.296 -0.019 -0.481 64 */
+ {-5, 26, 52, -9}
+ , /* 0.287 -0.037 0.231 -0.481 64 */
+ {-5, 26, 52, -9}
+ , /* 0.370 -0.370 0.480 -0.480 64 */
+ {-5, 25, 53, -9}
+ , /* 0.454 0.296 -0.274 -0.476 64 */
+ {-4, 25, 53, -10}
+ , /* -0.463 -0.037 -0.030 0.530 64 */
+ {-4, 25, 53, -10}
+ , /* -0.380 -0.370 0.213 0.537 64 */
+ {-4, 24, 53, -9}
+ , /* -0.297 0.297 0.453 -0.453 64 */
+ {-4, 24, 54, -10}
+ , /* -0.214 -0.036 -0.309 0.559 64 */
+ {-4, 24, 54, -10}
+ , /* -0.131 -0.369 -0.073 0.573 64 */
+ {-4, 23, 54, -9}
+ , /* -0.049 0.299 0.161 -0.411 64 */
+ {-4, 23, 54, -9}
+ , /* 0.034 -0.034 0.393 -0.393 64 */
+ {-4, 23, 54, -9}
+ , /* 0.116 -0.366 0.623 -0.373 64 */
+ {-4, 22, 55, -9}
+ , /* 0.198 0.302 -0.150 -0.350 64 */
+ {-4, 22, 55, -9}
+ , /* 0.280 -0.030 0.076 -0.326 64 */
+ {-4, 22, 55, -9}
+ , /* 0.361 -0.361 0.299 -0.299 64 */
+ {-4, 21, 56, -9}
+ , /* 0.442 0.308 -0.480 -0.270 64 */
+ {-4, 21, 56, -9}
+ , /* 0.523 -0.023 -0.262 -0.238 64 */
+ {-4, 21, 56, -9}
+ , /* 0.604 -0.354 -0.046 -0.204 64 */
+ {-3, 20, 56, -9}
+ , /* -0.316 0.316 0.168 -0.168 64 */
+ {-3, 20, 56, -9}
+ , /* -0.236 -0.014 0.380 -0.130 64 */
+ {-3, 20, 56, -9}
+ , /* -0.157 -0.343 0.589 -0.089 64 */
+ {-3, 19, 57, -9}
+ , /* -0.078 0.328 -0.204 -0.046 64 */
+ {-3, 19, 57, -9}
+ , /* 0.000 0.000 0.000 0.000 64 */
+ {-3, 19, 57, -9}
+ , /* 0.078 -0.328 0.202 0.048 64 */
+ {-3, 18, 58, -9}
+ , /* 0.155 0.345 -0.599 0.099 64 */
+ {-3, 18, 58, -9}
+ , /* 0.232 0.018 -0.402 0.152 64 */
+ {-3, 18, 58, -9}
+ , /* 0.308 -0.308 -0.207 0.207 64 */
+ {-2, 17, 58, -9}
+ , /* -0.616 0.366 -0.015 0.265 64 */
+ {-2, 17, 58, -9}
+ , /* -0.541 0.041 0.174 0.326 64 */
+ {-2, 17, 58, -9}
+ , /* -0.466 -0.284 0.361 0.389 64 */
+ {-2, 16, 59, -9}
+ , /* -0.393 0.393 -0.455 0.455 64 */
+ {-2, 16, 59, -9}
+ , /* -0.319 0.069 -0.274 0.524 64 */
+ {-2, 16, 59, -9}
+ , /* -0.247 -0.253 -0.095 0.595 64 */
+ {-2, 15, 59, -8}
+ , /* -0.175 0.425 0.082 -0.332 64 */
+ {-2, 15, 59, -8}
+ , /* -0.104 0.104 0.255 -0.255 64 */
+ {-2, 15, 59, -8}
+ , /* -0.034 -0.216 0.426 -0.176 64 */
+ {-2, 14, 60, -8}
+ , /* 0.035 0.465 -0.406 -0.094 64 */
+ {-2, 14, 60, -8}
+ , /* 0.104 0.146 -0.241 -0.009 64 */
+ {-2, 14, 60, -8}
+ , /* 0.172 -0.172 -0.078 0.078 64 */
+ {-2, 14, 60, -8}
+ , /* 0.239 -0.489 0.082 0.168 64 */
+ {-1, 13, 60, -8}
+ , /* -0.695 0.195 0.238 0.262 64 */
+ {-2, 13, 61, -8}
+ , /* 0.370 -0.120 -0.607 0.357 64 */
+ {-2, 13, 61, -8}
+ , /* 0.434 -0.434 -0.456 0.456 64 */
+ {-2, 12, 61, -7}
+ , /* 0.498 0.252 -0.308 -0.442 64 */
+ {-2, 12, 61, -7}
+ , /* 0.560 -0.060 -0.163 -0.337 64 */
+ {-2, 12, 61, -7}
+ , /* 0.621 -0.371 -0.020 -0.230 64 */
+ {-1, 11, 61, -7}
+ , /* -0.318 0.318 0.119 -0.119 64 */
+ {-1, 11, 61, -7}
+ , /* -0.259 0.009 0.256 -0.006 64 */
+ {-1, 11, 61, -7}
+ , /* -0.201 -0.299 0.389 0.111 64 */
+ {-1, 10, 62, -7}
+ , /* -0.144 0.394 -0.481 0.231 64 */
+ {-1, 10, 62, -7}
+ , /* -0.088 0.088 -0.353 0.353 64 */
+ {-1, 10, 62, -7}
+ , /* -0.033 -0.217 -0.229 0.479 64 */
+ {-1, 9, 62, -6}
+ , /* 0.021 0.479 -0.108 -0.392 64 */
+ {-1, 9, 62, -6}
+ , /* 0.074 0.176 0.010 -0.260 64 */
+ {-1, 9, 62, -6}
+ , /* 0.125 -0.125 0.125 -0.125 64 */
+ {-1, 9, 62, -6}
+ , /* 0.175 -0.425 0.237 0.013 64 */
+ {-1, 8, 63, -6}
+ , /* 0.224 0.276 -0.655 0.155 64 */
+ {-1, 8, 63, -6}
+ , /* 0.272 -0.022 -0.550 0.300 64 */
+ {-1, 8, 63, -6}
+ , /* 0.318 -0.318 -0.448 0.448 64 */
+ {-1, 7, 63, -5}
+ , /* 0.363 0.387 -0.349 -0.401 64 */
+ {-1, 7, 63, -5}
+ , /* 0.407 0.093 -0.253 -0.247 64 */
+ {-1, 7, 63, -5}
+ , /* 0.449 -0.199 -0.161 -0.089 64 */
+ {-1, 7, 63, -5}
+ , /* 0.490 -0.490 -0.072 0.072 64 */
+ {0, 6, 63, -5}
+ , /* -0.470 0.220 0.013 0.237 64 */
+ {0, 6, 63, -5}
+ , /* -0.432 -0.068 0.095 0.405 64 */
+ {0, 6, 63, -5}
+ , /* -0.395 -0.355 0.174 0.576 64 */
+ {0, 5, 63, -4}
+ , /* -0.360 0.360 0.249 -0.249 64 */
+ {0, 5, 63, -4}
+ , /* -0.326 0.076 0.321 -0.071 64 */
+ {0, 5, 63, -4}
+ , /* -0.294 -0.206 0.389 0.111 64 */
+ {0, 5, 63, -4}
+ , /* -0.263 -0.487 0.454 0.296 64 */
+ {0, 4, 64, -4}
+ , /* -0.234 0.234 -0.484 0.484 64 */
+ {0, 4, 63, -3}
+ , /* -0.207 -0.043 0.573 -0.323 64 */
+ {0, 4, 63, -3}
+ , /* -0.181 -0.319 0.628 -0.128 64 */
+ {0, 3, 64, -3}
+ , /* -0.157 0.407 -0.322 0.072 64 */
+ {0, 3, 64, -3}
+ , /* -0.134 0.134 -0.275 0.275 64 */
+ {0, 3, 64, -3}
+ , /* -0.113 -0.137 -0.231 0.481 64 */
+ {0, 2, 64, -2}
+ , /* -0.094 0.594 -0.191 -0.309 64 */
+ {0, 2, 64, -2}
+ , /* -0.076 0.326 -0.155 -0.095 64 */
+ {0, 2, 64, -2}
+ , /* -0.061 0.061 -0.123 0.123 64 */
+ {0, 2, 64, -2}
+ , /* -0.047 -0.203 -0.094 0.344 64 */
+ {0, 1, 64, -1}
+ , /* -0.034 0.534 -0.069 -0.431 64 */
+ {0, 1, 64, -1}
+ , /* -0.024 0.274 -0.048 -0.202 64 */
+ {0, 1, 64, -1}
+ , /* -0.015 0.015 -0.031 0.031 64 */
+ {0, 1, 64, -1}
+ , /* -0.009 -0.241 -0.017 0.267 64 */
+ {0, 0, 64, 0}
+ , /* -0.004 0.504 -0.008 -0.492 64 */
+ {0, 0, 64, 0}
+ , /* -0.001 0.251 -0.002 -0.248 64 */
+};
diff --git a/ext/cog/cogvirtframe.c b/ext/cog/cogvirtframe.c
index 284e42c7d..eb6fc0052 100644
--- a/ext/cog/cogvirtframe.c
+++ b/ext/cog/cogvirtframe.c
@@ -506,12 +506,14 @@ cog_virt_frame_render_resample_vert_1tap (CogFrame * frame, void *_dest,
uint8_t *dest = _dest;
uint8_t *src1;
int n_src;
- double *scale = (double *) frame->virt_priv;
- double x;
+ int scale = frame->param1;
+ int acc;
+ int x;
int src_i;
- x = (*scale) * i;
- src_i = floor (x);
+ acc = scale * i;
+ src_i = acc >> 8;
+ x = acc & 0xff;
n_src = frame->virt_frame1->components[component].height;
src1 = cog_virt_frame_get_line (frame->virt_frame1, component,
@@ -528,13 +530,14 @@ cog_virt_frame_render_resample_vert_2tap (CogFrame * frame, void *_dest,
uint8_t *src1;
uint8_t *src2;
int n_src;
- double *scale = (double *) frame->virt_priv;
- double x;
+ int scale = frame->param1;
+ int acc;
+ int x;
int src_i;
- x = (*scale) * i;
- src_i = floor (x);
- x -= floor (x);
+ acc = scale * i;
+ src_i = acc >> 8;
+ x = acc & 0xff;
n_src = frame->virt_frame1->components[component].height;
src1 = cog_virt_frame_get_line (frame->virt_frame1, component,
@@ -542,8 +545,12 @@ cog_virt_frame_render_resample_vert_2tap (CogFrame * frame, void *_dest,
src2 = cog_virt_frame_get_line (frame->virt_frame1, component,
CLAMP (src_i + 1, 0, n_src - 1));
- cogorc_combine2_u8 (dest, src1, src2,
- rint (256 * (1 - x)), rint (256 * x), frame->components[component].width);
+ if (x == 0) {
+ memcpy (dest, src1, frame->components[component].width);
+ } else {
+ cogorc_combine2_u8 (dest, src1, src2,
+ 256 - x, x, frame->components[component].width);
+ }
}
void
@@ -556,53 +563,55 @@ cog_virt_frame_render_resample_vert_4tap (CogFrame * frame, void *_dest,
uint8_t *src3;
uint8_t *src4;
int n_src;
- double *scale = (double *) frame->virt_priv;
- double x;
+ int scale = frame->param1;
+ int acc;
+ int x;
int src_i;
- int y;
- x = (*scale) * i;
- src_i = floor (x);
- y = 256 * (x - floor (x));
+ acc = scale * i;
+ src_i = acc >> 8;
+ x = acc & 0xff;
n_src = frame->virt_frame1->components[component].height;
- src1 = cog_virt_frame_get_line (frame->virt_frame1, component,
- CLAMP (src_i - 1, 0, n_src - 1));
- src2 = cog_virt_frame_get_line (frame->virt_frame1, component,
- CLAMP (src_i + 0, 0, n_src - 1));
- src3 = cog_virt_frame_get_line (frame->virt_frame1, component,
- CLAMP (src_i + 1, 0, n_src - 1));
- src4 = cog_virt_frame_get_line (frame->virt_frame1, component,
- CLAMP (src_i + 2, 0, n_src - 1));
+ if (src_i < 1 || src_i >= n_src - 3) {
+ src1 = cog_virt_frame_get_line (frame->virt_frame1, component,
+ CLAMP (src_i - 1, 0, n_src - 1));
+ src2 = cog_virt_frame_get_line (frame->virt_frame1, component,
+ CLAMP (src_i + 0, 0, n_src - 1));
+ src3 = cog_virt_frame_get_line (frame->virt_frame1, component,
+ CLAMP (src_i + 1, 0, n_src - 1));
+ src4 = cog_virt_frame_get_line (frame->virt_frame1, component,
+ CLAMP (src_i + 2, 0, n_src - 1));
+ } else {
+ src1 = cog_virt_frame_get_line (frame->virt_frame1, component, src_i - 1);
+ src2 = cog_virt_frame_get_line (frame->virt_frame1, component, src_i + 0);
+ src3 = cog_virt_frame_get_line (frame->virt_frame1, component, src_i + 1);
+ src4 = cog_virt_frame_get_line (frame->virt_frame1, component, src_i + 2);
+ }
cogorc_combine4_u8 (dest, src1, src2, src3, src4,
- cog_resample_table_4tap[y][0],
- cog_resample_table_4tap[y][1],
- cog_resample_table_4tap[y][2],
- cog_resample_table_4tap[y][3], frame->components[component].width);
+ cog_resample_table_4tap[x][0],
+ cog_resample_table_4tap[x][1],
+ cog_resample_table_4tap[x][2],
+ cog_resample_table_4tap[x][3], frame->components[component].width);
}
CogFrame *
-cog_virt_frame_new_vert_resample (CogFrame * vf, int height)
+cog_virt_frame_new_vert_resample (CogFrame * vf, int height, int n_taps)
{
CogFrame *virt_frame;
- double *scale;
- int taps = 4;
virt_frame = cog_frame_new_virtual (NULL, vf->format, vf->width, height);
virt_frame->virt_frame1 = vf;
- if (taps == 1) {
+ if (n_taps == 1) {
virt_frame->render_line = cog_virt_frame_render_resample_vert_1tap;
- } else if (taps == 2) {
+ } else if (n_taps == 2) {
virt_frame->render_line = cog_virt_frame_render_resample_vert_2tap;
} else {
virt_frame->render_line = cog_virt_frame_render_resample_vert_4tap;
}
- scale = malloc (sizeof (double));
- virt_frame->virt_priv = scale;
-
- *scale = (double) vf->height / height;
+ virt_frame->param1 = 256 * vf->height / height;
return virt_frame;
}
@@ -629,6 +638,53 @@ cog_virt_frame_render_resample_horiz_1tap (CogFrame * frame, void *_dest,
}
void
+cog_virt_frame_render_resample_horiz_2tap (CogFrame * frame, void *_dest,
+ int component, int i)
+{
+ uint8_t *dest = _dest;
+ uint8_t *src;
+ int j;
+ int n_src;
+ int scale = frame->param1;
+ int acc;
+
+ n_src = frame->virt_frame1->components[component].width;
+ src = cog_virt_frame_get_line (frame->virt_frame1, component, i);
+
+ acc = 0;
+ for (j = 0; j < frame->components[component].width - 2; j++) {
+ int src_i;
+ int y;
+ int z;
+
+ src_i = acc >> 8;
+ y = acc & 255;
+
+ z = 128;
+ z += (256 - y) * src[src_i + 0];
+ z += y * src[src_i + 1];
+ z >>= 8;
+ dest[j] = CLAMP (z, 0, 255);
+ acc += scale;
+ }
+ for (; j < frame->components[component].width; j++) {
+ int src_i;
+ int y;
+ int z;
+
+ src_i = acc >> 8;
+ y = acc & 255;
+
+ z = 128;
+ z += (256 - y) * src[CLAMP (src_i + 0, 0, n_src - 1)];
+ z += y * src[CLAMP (src_i + 1, 0, n_src - 1)];
+ z >>= 8;
+ dest[j] = CLAMP (z, 0, 255);
+ acc += scale;
+ }
+}
+
+void
cog_virt_frame_render_resample_horiz_4tap (CogFrame * frame, void *_dest,
int component, int i)
{
@@ -697,25 +753,21 @@ cog_virt_frame_render_resample_horiz_4tap (CogFrame * frame, void *_dest,
}
CogFrame *
-cog_virt_frame_new_horiz_resample (CogFrame * vf, int width)
+cog_virt_frame_new_horiz_resample (CogFrame * vf, int width, int n_taps)
{
CogFrame *virt_frame;
- double *scale;
- int taps = 4;
virt_frame = cog_frame_new_virtual (NULL, vf->format, width, vf->height);
virt_frame->virt_frame1 = vf;
- if (taps == 1) {
+ if (n_taps == 1) {
virt_frame->render_line = cog_virt_frame_render_resample_horiz_1tap;
+ } else if (n_taps == 2) {
+ virt_frame->render_line = cog_virt_frame_render_resample_horiz_2tap;
} else {
virt_frame->render_line = cog_virt_frame_render_resample_horiz_4tap;
}
- scale = malloc (sizeof (double));
- virt_frame->virt_priv = scale;
-
- *scale = (double) vf->width / width;
- virt_frame->param1 = 256.0 * (*scale);
+ virt_frame->param1 = 256 * vf->width / width;
return virt_frame;
}
diff --git a/ext/cog/cogvirtframe.h b/ext/cog/cogvirtframe.h
index ddcc5249c..a6a1feaf6 100644
--- a/ext/cog/cogvirtframe.h
+++ b/ext/cog/cogvirtframe.h
@@ -18,8 +18,8 @@ void cog_virt_frame_render (CogFrame *frame, CogFrame *dest);
CogFrame *cog_virt_frame_new_horiz_downsample (CogFrame *vf, int n_taps);
CogFrame *cog_virt_frame_new_vert_downsample (CogFrame *vf, int n_taps);
-CogFrame *cog_virt_frame_new_vert_resample (CogFrame *vf, int height);
-CogFrame *cog_virt_frame_new_horiz_resample (CogFrame *vf, int width);
+CogFrame *cog_virt_frame_new_vert_resample (CogFrame *vf, int height, int n_taps);
+CogFrame *cog_virt_frame_new_horiz_resample (CogFrame *vf, int width, int n_taps);
CogFrame *cog_virt_frame_new_unpack (CogFrame *vf);
CogFrame *cog_virt_frame_new_pack_YUY2 (CogFrame *vf);
CogFrame *cog_virt_frame_new_pack_UYVY (CogFrame *vf);
diff --git a/ext/cog/generate_tables.c b/ext/cog/generate_tables.c
new file mode 100644
index 000000000..562ba9bdf
--- /dev/null
+++ b/ext/cog/generate_tables.c
@@ -0,0 +1,70 @@
+
+#include "config.h"
+
+#include <glib.h>
+#include <math.h>
+
+#define SCALE 256
+
+void
+get_taps (double *taps, double x)
+{
+ taps[3] = x * x * (x - 1);
+ taps[2] = x * (-x * x + x + 1);
+ x = 1 - x;
+ taps[1] = x * (-x * x + x + 1);
+ taps[0] = x * x * (x - 1);
+}
+
+int
+main (int argc, char *argv[])
+{
+ int i;
+
+ g_print ("/* This file is autogenerated. Do not edit.*/\n");
+ g_print ("#include <glib.h>\n");
+ g_print ("gint8 cog_resample_table_4tap[256][4] = {\n");
+ for (i = 0; i < 256; i++) {
+ double x = i / 256.0;
+ double taps[4];
+ int t[4];
+ int sum;
+
+ get_taps (taps, x);
+ taps[0] *= SCALE;
+ taps[1] *= SCALE;
+ taps[2] *= SCALE;
+ taps[3] *= SCALE;
+
+ t[0] = floor (taps[0]);
+ t[1] = floor (taps[1]);
+ t[2] = floor (taps[2]);
+ t[3] = floor (taps[3]);
+ sum = t[0] + t[1] + t[2] + t[3];
+
+ for (; sum < SCALE; sum++) {
+ int i;
+ double max = 0;
+ int max_i = -1;
+ for (i = 0; i < 4; i++) {
+ if (max_i == -1 || (t[i] < taps[i] && (taps[i] - t[i]) > max)) {
+ max_i = i;
+ max = taps[i] - t[i];
+ }
+ }
+ t[max_i]++;
+ }
+ sum = t[0] + t[1] + t[2] + t[3];
+
+ g_print (" { %d, %d, %d, %d }, /* %d %d */\n",
+ t[0], t[1], t[2], t[3], t[2] + t[0], t[1] + t[3]);
+#if 0
+ g_print ("/* %.3f %.3f %.3f %.3f %d */\n",
+ taps[0] - t[0], taps[1] - t[1], taps[2] - t[2], taps[3] - t[3], sum);
+#endif
+ }
+ g_print ("};\n");
+ g_print ("\n");
+
+ return 0;
+}
diff --git a/ext/cog/gstcogscale.c b/ext/cog/gstcogscale.c
index d1178c39b..8a4bd6a26 100644
--- a/ext/cog/gstcogscale.c
+++ b/ext/cog/gstcogscale.c
@@ -83,21 +83,6 @@ GST_DEBUG_CATEGORY_STATIC (cog_scale_debug);
#define GST_IS_COG_SCALE_CLASS(klass) \
(G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_COG_SCALE))
-/**
- * GstCogScaleMethod:
- * @GST_COG_SCALE_NEAREST: use nearest neighbour scaling (fast and ugly)
- * @GST_COG_SCALE_BILINEAR: use bilinear scaling (slower but prettier).
- * @GST_COG_SCALE_4TAP: use a 4-tap filter for scaling (slow).
- *
- * The videoscale method to use.
- */
-typedef enum
-{
- GST_COG_SCALE_NEAREST,
- GST_COG_SCALE_BILINEAR,
- GST_COG_SCALE_4TAP
-} GstCogScaleMethod;
-
typedef struct _GstCogScale GstCogScale;
typedef struct _GstCogScaleClass GstCogScaleClass;
@@ -110,7 +95,7 @@ struct _GstCogScale
{
GstBaseTransform element;
- GstCogScaleMethod method;
+ int quality;
/* negotiated stuff */
GstVideoFormat format;
@@ -139,13 +124,12 @@ GST_ELEMENT_DETAILS ("Video scaler",
"Resizes video",
"Wim Taymans <wim.taymans@chello.be>");
-#define DEFAULT_PROP_METHOD GST_COG_SCALE_NEAREST
+#define DEFAULT_QUALITY 5
enum
{
PROP_0,
- PROP_METHOD
- /* FILL ME */
+ PROP_QUALITY
};
/* can't handle width/height of 1 yet, since we divide a lot by (n-1) */
@@ -167,61 +151,43 @@ GST_VIDEO_CAPS_RGBx
GST_VIDEO_CAPS_ABGR GST_VIDEO_CAPS_RGB GST_VIDEO_CAPS_BGR
GST_VIDEO_CAPS_YUV ("{ Y41B, YVYU }")
#endif
-#define GST_TYPE_COG_SCALE_METHOD (gst_cog_scale_method_get_type())
- static GType gst_cog_scale_method_get_type (void)
-{
- static GType cog_scale_method_type = 0;
- static const GEnumValue cog_scale_methods[] = {
- {GST_COG_SCALE_NEAREST, "Nearest Neighbour", "nearest-neighbour"},
- {GST_COG_SCALE_BILINEAR, "Bilinear", "bilinear"},
- {GST_COG_SCALE_4TAP, "4-tap", "4-tap"},
- {0, NULL, NULL},
- };
-
- if (!cog_scale_method_type) {
- cog_scale_method_type =
- g_enum_register_static ("GstCogScaleMethod", cog_scale_methods);
- }
- return cog_scale_method_type;
-}
-
-static GstStaticPadTemplate gst_cog_scale_src_template =
-GST_STATIC_PAD_TEMPLATE ("src",
+ static GstStaticPadTemplate gst_cog_scale_src_template =
+ GST_STATIC_PAD_TEMPLATE ("src",
GST_PAD_SRC,
GST_PAD_ALWAYS,
TEMPLATE_CAPS);
-static GstStaticPadTemplate gst_cog_scale_sink_template =
-GST_STATIC_PAD_TEMPLATE ("sink",
+ static GstStaticPadTemplate gst_cog_scale_sink_template =
+ GST_STATIC_PAD_TEMPLATE ("sink",
GST_PAD_SINK,
GST_PAD_ALWAYS,
TEMPLATE_CAPS);
-static void gst_cog_scale_base_init (gpointer g_class);
-static void gst_cog_scale_class_init (GstCogScaleClass * klass);
-static void gst_cog_scale_init (GstCogScale * videoscale);
-static void gst_cog_scale_finalize (GstCogScale * videoscale);
-static gboolean gst_cog_scale_src_event (GstBaseTransform * trans,
+ static void gst_cog_scale_base_init (gpointer g_class);
+ static void gst_cog_scale_class_init (GstCogScaleClass * klass);
+ static void gst_cog_scale_init (GstCogScale * videoscale);
+ static void gst_cog_scale_finalize (GstCogScale * videoscale);
+ static gboolean gst_cog_scale_src_event (GstBaseTransform * trans,
GstEvent * event);
/* base transform vmethods */
-static GstCaps *gst_cog_scale_transform_caps (GstBaseTransform * trans,
+ static GstCaps *gst_cog_scale_transform_caps (GstBaseTransform * trans,
GstPadDirection direction, GstCaps * caps);
-static gboolean gst_cog_scale_set_caps (GstBaseTransform * trans,
+ static gboolean gst_cog_scale_set_caps (GstBaseTransform * trans,
GstCaps * in, GstCaps * out);
-static gboolean gst_cog_scale_get_unit_size (GstBaseTransform * trans,
+ static gboolean gst_cog_scale_get_unit_size (GstBaseTransform * trans,
GstCaps * caps, guint * size);
-static GstFlowReturn gst_cog_scale_transform (GstBaseTransform * trans,
+ static GstFlowReturn gst_cog_scale_transform (GstBaseTransform * trans,
GstBuffer * in, GstBuffer * out);
-static void gst_cog_scale_fixate_caps (GstBaseTransform * base,
+ static void gst_cog_scale_fixate_caps (GstBaseTransform * base,
GstPadDirection direction, GstCaps * caps, GstCaps * othercaps);
-static void gst_cog_scale_set_property (GObject * object, guint prop_id,
+ static void gst_cog_scale_set_property (GObject * object, guint prop_id,
const GValue * value, GParamSpec * pspec);
-static void gst_cog_scale_get_property (GObject * object, guint prop_id,
+ static void gst_cog_scale_get_property (GObject * object, guint prop_id,
GValue * value, GParamSpec * pspec);
-static GstElementClass *parent_class = NULL;
+ static GstElementClass *parent_class = NULL;
GType
@@ -277,10 +243,9 @@ gst_cog_scale_class_init (GstCogScaleClass * klass)
gobject_class->set_property = gst_cog_scale_set_property;
gobject_class->get_property = gst_cog_scale_get_property;
- g_object_class_install_property (gobject_class, PROP_METHOD,
- g_param_spec_enum ("method", "method", "method",
- GST_TYPE_COG_SCALE_METHOD, DEFAULT_PROP_METHOD,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property (gobject_class, PROP_QUALITY,
+ g_param_spec_int ("quality", "quality", "Scaling Quality",
+ 0, 10, DEFAULT_QUALITY, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
trans_class->transform_caps =
GST_DEBUG_FUNCPTR (gst_cog_scale_transform_caps);
@@ -299,7 +264,7 @@ static void
gst_cog_scale_init (GstCogScale * videoscale)
{
gst_base_transform_set_qos_enabled (GST_BASE_TRANSFORM (videoscale), TRUE);
- videoscale->method = DEFAULT_PROP_METHOD;
+ videoscale->quality = DEFAULT_QUALITY;
}
static void
@@ -315,9 +280,9 @@ gst_cog_scale_set_property (GObject * object, guint prop_id,
GstCogScale *vscale = GST_COG_SCALE (object);
switch (prop_id) {
- case PROP_METHOD:
+ case PROP_QUALITY:
GST_OBJECT_LOCK (vscale);
- vscale->method = g_value_get_enum (value);
+ vscale->quality = g_value_get_int (value);
GST_OBJECT_UNLOCK (vscale);
break;
default:
@@ -333,9 +298,9 @@ gst_cog_scale_get_property (GObject * object, guint prop_id, GValue * value,
GstCogScale *vscale = GST_COG_SCALE (object);
switch (prop_id) {
- case PROP_METHOD:
+ case PROP_QUALITY:
GST_OBJECT_LOCK (vscale);
- g_value_set_enum (value, vscale->method);
+ g_value_set_int (value, vscale->quality);
GST_OBJECT_UNLOCK (vscale);
break;
default:
@@ -352,32 +317,14 @@ gst_cog_scale_transform_caps (GstBaseTransform * trans,
GstCaps *ret;
GstStructure *structure;
const GValue *par;
- gint method;
/* this function is always called with a simple caps */
g_return_val_if_fail (GST_CAPS_IS_SIMPLE (caps), NULL);
videoscale = GST_COG_SCALE (trans);
- GST_OBJECT_LOCK (videoscale);
- method = videoscale->method;
- GST_OBJECT_UNLOCK (videoscale);
-
structure = gst_caps_get_structure (caps, 0);
- /* check compatibility of format and method before we copy the input caps */
- if (method == GST_COG_SCALE_4TAP) {
- guint32 fourcc;
-
- if (!gst_structure_has_name (structure, "video/x-raw-yuv"))
- goto method_not_implemented_for_format;
- if (!gst_structure_get_fourcc (structure, "format", &fourcc))
- goto method_not_implemented_for_format;
- if (fourcc != GST_MAKE_FOURCC ('I', '4', '2', '0') &&
- fourcc != GST_MAKE_FOURCC ('Y', 'V', '1', '2'))
- goto method_not_implemented_for_format;
- }
-
ret = gst_caps_copy (caps);
structure = gst_caps_get_structure (ret, 0);
@@ -406,13 +353,6 @@ gst_cog_scale_transform_caps (GstBaseTransform * trans,
GST_DEBUG_OBJECT (trans, "returning caps: %" GST_PTR_FORMAT, ret);
return ret;
-
-method_not_implemented_for_format:
- {
- GST_DEBUG_OBJECT (trans, "method %d not implemented for format %"
- GST_PTR_FORMAT ", returning empty caps", method, caps);
- return gst_caps_new_empty ();
- }
}
static gboolean
@@ -619,13 +559,15 @@ gst_cog_scale_transform (GstBaseTransform * trans, GstBuffer * in,
GstFlowReturn ret = GST_FLOW_OK;
CogFrame *outframe;
CogFrame *frame;
- gint method;
int w, h;
+ int quality;
+ static const int n_vert_taps[11] = { 1, 1, 2, 2, 2, 2, 4, 4, 4, 4, 4 };
+ static const int n_horiz_taps[11] = { 1, 1, 1, 1, 2, 2, 2, 2, 4, 4, 4 };
videoscale = GST_COG_SCALE (trans);
GST_OBJECT_LOCK (videoscale);
- method = videoscale->method;
+ quality = videoscale->quality;
GST_OBJECT_UNLOCK (videoscale);
frame = gst_cog_buffer_wrap (gst_buffer_ref (in), videoscale->format,
@@ -648,10 +590,12 @@ gst_cog_scale_transform (GstBaseTransform * trans, GstBuffer * in,
}
}
if (w != videoscale->to_width) {
- frame = cog_virt_frame_new_horiz_resample (frame, videoscale->to_width);
+ frame = cog_virt_frame_new_horiz_resample (frame, videoscale->to_width,
+ n_horiz_taps[quality]);
}
if (h != videoscale->to_height) {
- frame = cog_virt_frame_new_vert_resample (frame, videoscale->to_height);
+ frame = cog_virt_frame_new_vert_resample (frame, videoscale->to_height,
+ n_vert_taps[quality]);
}
switch (videoscale->format) {