History

avfilter/vf_lut: do not always explicitly clip pixels

Old behaviour was not useful at all. New behaviour only emulate old behaviour with default options.

Paul B Mahol committed 9 years ago

Commit 72864541 parent fb32c562 files · +42 −42Browse files

Unified · Split

2 files
  1. libavfilter/vf_lut.c +13 −13
  2. tests/ref/fate/filter-pixfmts-lut +29 −29
libavfilter/vf_lut.c+13−13
@@ -84,17 +84,17 @@ typedef struct LutContext { · 83 unmodified lines
84#define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM84#define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM
85 85
86static const AVOption options[] = {86static const AVOption options[] = {
87 { "c0", "set component #0 expression", OFFSET(comp_expr_str[0]), AV_OPT_TYPE_STRING, { .str = "val" }, .flags = FLAGS },87 { "c0", "set component #0 expression", OFFSET(comp_expr_str[0]), AV_OPT_TYPE_STRING, { .str = "clipval" }, .flags = FLAGS },
88 { "c1", "set component #1 expression", OFFSET(comp_expr_str[1]), AV_OPT_TYPE_STRING, { .str = "val" }, .flags = FLAGS },88 { "c1", "set component #1 expression", OFFSET(comp_expr_str[1]), AV_OPT_TYPE_STRING, { .str = "clipval" }, .flags = FLAGS },
89 { "c2", "set component #2 expression", OFFSET(comp_expr_str[2]), AV_OPT_TYPE_STRING, { .str = "val" }, .flags = FLAGS },89 { "c2", "set component #2 expression", OFFSET(comp_expr_str[2]), AV_OPT_TYPE_STRING, { .str = "clipval" }, .flags = FLAGS },
90 { "c3", "set component #3 expression", OFFSET(comp_expr_str[3]), AV_OPT_TYPE_STRING, { .str = "val" }, .flags = FLAGS },90 { "c3", "set component #3 expression", OFFSET(comp_expr_str[3]), AV_OPT_TYPE_STRING, { .str = "clipval" }, .flags = FLAGS },
91 { "y", "set Y expression", OFFSET(comp_expr_str[Y]), AV_OPT_TYPE_STRING, { .str = "val" }, .flags = FLAGS },91 { "y", "set Y expression", OFFSET(comp_expr_str[Y]), AV_OPT_TYPE_STRING, { .str = "clipval" }, .flags = FLAGS },
92 { "u", "set U expression", OFFSET(comp_expr_str[U]), AV_OPT_TYPE_STRING, { .str = "val" }, .flags = FLAGS },92 { "u", "set U expression", OFFSET(comp_expr_str[U]), AV_OPT_TYPE_STRING, { .str = "clipval" }, .flags = FLAGS },
93 { "v", "set V expression", OFFSET(comp_expr_str[V]), AV_OPT_TYPE_STRING, { .str = "val" }, .flags = FLAGS },93 { "v", "set V expression", OFFSET(comp_expr_str[V]), AV_OPT_TYPE_STRING, { .str = "clipval" }, .flags = FLAGS },
94 { "r", "set R expression", OFFSET(comp_expr_str[R]), AV_OPT_TYPE_STRING, { .str = "val" }, .flags = FLAGS },94 { "r", "set R expression", OFFSET(comp_expr_str[R]), AV_OPT_TYPE_STRING, { .str = "clipval" }, .flags = FLAGS },
95 { "g", "set G expression", OFFSET(comp_expr_str[G]), AV_OPT_TYPE_STRING, { .str = "val" }, .flags = FLAGS },95 { "g", "set G expression", OFFSET(comp_expr_str[G]), AV_OPT_TYPE_STRING, { .str = "clipval" }, .flags = FLAGS },
96 { "b", "set B expression", OFFSET(comp_expr_str[B]), AV_OPT_TYPE_STRING, { .str = "val" }, .flags = FLAGS },96 { "b", "set B expression", OFFSET(comp_expr_str[B]), AV_OPT_TYPE_STRING, { .str = "clipval" }, .flags = FLAGS },
97 { "a", "set A expression", OFFSET(comp_expr_str[A]), AV_OPT_TYPE_STRING, { .str = "val" }, .flags = FLAGS },97 { "a", "set A expression", OFFSET(comp_expr_str[A]), AV_OPT_TYPE_STRING, { .str = "clipval" }, .flags = FLAGS },
98 { NULL }98 { NULL }
99};99};
100 100
@@ -265,7 +265,7 @@ static int config_props(AVFilterLink *inlink) · 164 unmodified lines
265 max[Y] = 235 * (1 << (desc->comp[0].depth - 8));265 max[Y] = 235 * (1 << (desc->comp[0].depth - 8));
266 max[U] = 240 * (1 << (desc->comp[1].depth - 8));266 max[U] = 240 * (1 << (desc->comp[1].depth - 8));
267 max[V] = 240 * (1 << (desc->comp[2].depth - 8));267 max[V] = 240 * (1 << (desc->comp[2].depth - 8));
268 max[A] = (1 << desc->comp[3].depth) - 1;268 max[A] = (1 << desc->comp[0].depth) - 1;
269 break;269 break;
270 case AV_PIX_FMT_RGB48LE:270 case AV_PIX_FMT_RGB48LE:
271 case AV_PIX_FMT_RGBA64LE:271 case AV_PIX_FMT_RGBA64LE:
@@ -324,7 +324,7 @@ static int config_props(AVFilterLink *inlink) · 52 unmodified lines
324 s->comp_expr_str[color], val, comp);324 s->comp_expr_str[color], val, comp);
325 return AVERROR(EINVAL);325 return AVERROR(EINVAL);
326 }326 }
327 s->lut[comp][val] = av_clip((int)res, min[color], max[color]);327 s->lut[comp][val] = av_clip((int)res, 0, max[A]);
328 av_log(ctx, AV_LOG_DEBUG, "val[%d][%d] = %d\n", comp, val, s->lut[comp][val]);328 av_log(ctx, AV_LOG_DEBUG, "val[%d][%d] = %d\n", comp, val, s->lut[comp][val]);
329 }329 }
330 }330 }
tests/ref/fate/filter-pixfmts-lut+29−29
@@ -15,35 +15,35 @@ rgb24 a356171207723a580e7d277078072005 · 14 unmodified lines
15rgb48le 5c7dd8575836d18c91e09f1915cf9aa915rgb48le 5c7dd8575836d18c91e09f1915cf9aa9
16rgba 7bc854c2698b78af3e9159a19c2d9d2116rgba 7bc854c2698b78af3e9159a19c2d9d21
17rgba64le 3a087ecab583d1930220592731f282b417rgba64le 3a087ecab583d1930220592731f282b4
18yuv410p 51b39a0e33f108e652457a26667319ea18yuv410p 10cf5dbbccb858a9ab51e0b8bf278f6d
19yuv411p 9204c5af92aef4922a05f58c1f6c095e19yuv411p 3f0bfa543ba513c6b6d7fff785fbe150
20yuv420p 7c43bb0cae8dee633375c8929559850820yuv420p ad99204ace669a383f8ae03a1ea5b98f
21yuv420p10le 1352712dd31cce78bd5441294004cf8521yuv420p10le f1e6cc4c2a5e9665dedd7ac0f2a4d551
22yuv420p12le c66f82da9fda458ba3abda057c58e59122yuv420p12le d9dfe871483b6a26512d427cb048ff65
23yuv420p14le e45cb5e2a75bf6143da0b55004767f7823yuv420p14le cd8bb4803f8e99c6cd31149bf848c30c
24yuv420p16le eff54782c51770edfd6b84c958ac712024yuv420p16le 4bb13820cf2de9b40ca47adeb7fea356
25yuv420p9le 4a6776b3379f12ad45caee8072a1369525yuv420p9le f12c98b599e667fc45126d6dea7f0fd9
26yuv422p 67df35da0c35e54882492b236543825426yuv422p c57e304bb3f4a1d30bf4ced5e829cdc6
27yuv422p10le 0158371a800294015def7f0ef66c78ea27yuv422p10le 9d95b03f75ae5778804279f3c3135837
28yuv422p12le bc49d3863ffb89658a17bf8c4fe773b028yuv422p12le 08e73e233793740ad68a939b9886dd32
29yuv422p14le b55cb791d286b0b3391fe7481785e5b329yuv422p14le bea6b54ec3e33eadfbd317a175b96288
30yuv422p16le fc3b2ba889ffaf1633000fc774307c3330yuv422p16le 5438e5738ab3e1e5f7fce5faaac036c4
31yuv422p9le 6e2a42ae36ed5e8b5112987639728af531yuv422p9le 222a699b69ba8d511518a61d77a10c25
32yuv440p 5e41adcfc27be4369afd217b61b2ffe332yuv440p f8105ff9433ecdedf2645f3370a575d8
33yuv440p10le 8b49714bba268fb4a79b5a84223ad17a33yuv440p10le 6e104ac6c33b00185bb6d95b371e1354
34yuv440p12le 15ab4f453238bd9c13b18af81e22f06034yuv440p12le 636834efcba838d74337b2ebb9dbffb3
35yuv444p a2b58590aef88db2c1f14a1a3a3b035935yuv444p ca662e7bd7a28805650f25b1537d50a2
36yuv444p10le c076c20fc808f95b34adb88aca442f4836yuv444p10le c301eb2763e0f74fde94388046c437fa
37yuv444p12le af8d4dd88169d5cffc2f3fce6333a94c37yuv444p12le 9482b13de4a9fbce176e8344c9332139
38yuv444p14le 93367133e25d088d4535199ed1f1ed5838yuv444p14le fb558c97e59e884fe5ba407df158ebd5
39yuv444p16le 800940feec14365ccd9b4863e38f699139yuv444p16le be9b3ce54168159b132746f7ac9088fe
40yuv444p9le c120044350852c4cd16a302dd1ceda7940yuv444p9le fa4b9bd6b8cac96e10322e613c8e7149
41yuva420p 518a380bf1af60ef2ecf4754eec088e941yuva420p 7284cbf9eacf1ca5ce9e2efebcadf999
42yuva420p16le 72ad4fa535b007d122666ce103ef9c8b42yuva420p16le b37d34212c2a79e91b675bc87dac6cc6
43yuva422p 7110ac2e37377b05b6fc5ad967dfabb543yuva422p 5938a7c7588febb069bd0cd4c447305e
44yuva422p16le e2867210660ada5784a60b4339ac52c044yuva422p16le c5ccfdc1a0dc6cb130c07ea61df6f727
45yuva444p 642f3958f141dece9e99407945e2ef4345yuva444p fbcbdc3521d17c702ee521b0893098e4
46yuva444p16le ab04ba8acbe38085b0df650d82065eb046yuva444p16le b7142d28d4d069d7eb019dcaf8b323b1
47yuvj420p 65bc88887c7f06a6221155ca7f9cfca447yuvj420p 65bc88887c7f06a6221155ca7f9cfca4
48yuvj422p ff5baffefc8ffe4547653092fd7da20048yuvj422p ff5baffefc8ffe4547653092fd7da200
49yuvj440p ef3f27270e60ac06582e3ac7c2f3e6fa49yuvj440p ef3f27270e60ac06582e3ac7c2f3e6fa

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t