vl: fix low strength denoise filter

A filter strength of zero or one doesn't make any
sense. Thanks to Andy Furniss for pointing this out.

Signed-off-by: Christian König <deathsimple@vodafone.de>
This commit is contained in:
Christian König 2012-02-13 11:41:23 +01:00
parent 356eb0aadb
commit 553e820387
3 changed files with 7 additions and 7 deletions

View File

@ -165,7 +165,7 @@ generate_offsets(enum vl_median_filter_shape shape, unsigned size,
assert(offsets && num_offsets); assert(offsets && num_offsets);
/* size needs to be odd */ /* size needs to be odd */
size = align(size, 2) - 1; size = align(size + 1, 2) - 1;
half_size = size >> 1; half_size = size >> 1;
switch(shape) { switch(shape) {
@ -249,7 +249,7 @@ vl_median_filter_init(struct vl_median_filter *filter, struct pipe_context *pipe
assert(filter && pipe); assert(filter && pipe);
assert(width && height); assert(width && height);
assert(size > 0 && size < 20); assert(size > 1 && size < 20);
memset(filter, 0, sizeof(*filter)); memset(filter, 0, sizeof(*filter));
filter->pipe = pipe; filter->pipe = pipe;

View File

@ -278,12 +278,12 @@ vlVdpVideoMixerUpdateNoiseReductionFilter(vlVdpVideoMixer *vmixer)
} }
/* and create a new filter as needed */ /* and create a new filter as needed */
if (vmixer->noise_reduction. enabled && vmixer->noise_reduction.level > 0.0f) { if (vmixer->noise_reduction. enabled && vmixer->noise_reduction.level > 0) {
vmixer->noise_reduction.filter = MALLOC(sizeof(struct vl_median_filter)); vmixer->noise_reduction.filter = MALLOC(sizeof(struct vl_median_filter));
vl_median_filter_init(vmixer->noise_reduction.filter, vl_median_filter_init(vmixer->noise_reduction.filter,
vmixer->device->context->pipe, vmixer->device->context->pipe,
vmixer->video_width, vmixer->video_height, vmixer->video_width, vmixer->video_height,
9 * vmixer->noise_reduction.level, vmixer->noise_reduction.level + 1,
VL_MEDIAN_FILTER_CROSS); VL_MEDIAN_FILTER_CROSS);
} }
} }
@ -545,7 +545,7 @@ vlVdpVideoMixerSetAttributeValues(VdpVideoMixer mixer,
if (val < 0.f || val > 1.f) if (val < 0.f || val > 1.f)
return VDP_STATUS_INVALID_VALUE; return VDP_STATUS_INVALID_VALUE;
vmixer->noise_reduction.level = val; vmixer->noise_reduction.level = val * 10;
vlVdpVideoMixerUpdateNoiseReductionFilter(vmixer); vlVdpVideoMixerUpdateNoiseReductionFilter(vmixer);
break; break;
@ -658,7 +658,7 @@ vlVdpVideoMixerGetAttributeValues(VdpVideoMixer mixer,
break; break;
case VDP_VIDEO_MIXER_ATTRIBUTE_NOISE_REDUCTION_LEVEL: case VDP_VIDEO_MIXER_ATTRIBUTE_NOISE_REDUCTION_LEVEL:
*(float*)attribute_values[i] = vmixer->noise_reduction.level; *(float*)attribute_values[i] = (float)vmixer->noise_reduction.level / 10.0f;
break; break;
case VDP_VIDEO_MIXER_ATTRIBUTE_LUMA_KEY_MIN_LUMA: case VDP_VIDEO_MIXER_ATTRIBUTE_LUMA_KEY_MIN_LUMA:

View File

@ -311,7 +311,7 @@ typedef struct
struct { struct {
bool supported, enabled; bool supported, enabled;
float level; unsigned level;
struct vl_median_filter *filter; struct vl_median_filter *filter;
} noise_reduction; } noise_reduction;