diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/gallium/state_trackers/vdpau/mixer.c | 38 |
1 files changed, 26 insertions, 12 deletions
diff --git a/src/gallium/state_trackers/vdpau/mixer.c b/src/gallium/state_trackers/vdpau/mixer.c index a724aa5b254..4118eb86997 100644 --- a/src/gallium/state_trackers/vdpau/mixer.c +++ b/src/gallium/state_trackers/vdpau/mixer.c @@ -643,6 +643,7 @@ vlVdpVideoMixerSetAttributeValues(VdpVideoMixer mixer, const float *vdp_csc; float val; unsigned i; + VdpStatus ret; if (!(attributes && attribute_values)) return VDP_STATUS_INVALID_POINTER; @@ -676,8 +677,10 @@ vlVdpVideoMixerSetAttributeValues(VdpVideoMixer mixer, case VDP_VIDEO_MIXER_ATTRIBUTE_NOISE_REDUCTION_LEVEL: val = *(float*)attribute_values[i]; - if (val < 0.f || val > 1.f) - return VDP_STATUS_INVALID_VALUE; + if (val < 0.f || val > 1.f) { + ret = VDP_STATUS_INVALID_VALUE; + goto fail; + } vmixer->noise_reduction.level = val * 10; vlVdpVideoMixerUpdateNoiseReductionFilter(vmixer); @@ -685,41 +688,52 @@ vlVdpVideoMixerSetAttributeValues(VdpVideoMixer mixer, case VDP_VIDEO_MIXER_ATTRIBUTE_LUMA_KEY_MIN_LUMA: val = *(float*)attribute_values[i]; - if (val < 0.f || val > 1.f) - return VDP_STATUS_INVALID_VALUE; + if (val < 0.f || val > 1.f) { + ret = VDP_STATUS_INVALID_VALUE; + goto fail; + } vmixer->luma_key_min = val; break; case VDP_VIDEO_MIXER_ATTRIBUTE_LUMA_KEY_MAX_LUMA: val = *(float*)attribute_values[i]; - if (val < 0.f || val > 1.f) - return VDP_STATUS_INVALID_VALUE; + if (val < 0.f || val > 1.f) { + ret = VDP_STATUS_INVALID_VALUE; + goto fail; + } vmixer->luma_key_max = val; break; case VDP_VIDEO_MIXER_ATTRIBUTE_SHARPNESS_LEVEL: val = *(float*)attribute_values[i]; - if (val < -1.f || val > 1.f) - return VDP_STATUS_INVALID_VALUE; + if (val < -1.f || val > 1.f) { + ret = VDP_STATUS_INVALID_VALUE; + goto fail; + } vmixer->sharpness.value = val; vlVdpVideoMixerUpdateSharpnessFilter(vmixer); break; case VDP_VIDEO_MIXER_ATTRIBUTE_SKIP_CHROMA_DEINTERLACE: - if (*(uint8_t*)attribute_values[i] > 1) - return VDP_STATUS_INVALID_VALUE; + if (*(uint8_t*)attribute_values[i] > 1) { + ret = VDP_STATUS_INVALID_VALUE; + goto fail; + } vmixer->skip_chroma_deint = *(uint8_t*)attribute_values[i]; vlVdpVideoMixerUpdateDeinterlaceFilter(vmixer); break; default: - pipe_mutex_unlock(vmixer->device->mutex); - return VDP_STATUS_INVALID_VIDEO_MIXER_ATTRIBUTE; + ret = VDP_STATUS_INVALID_VIDEO_MIXER_ATTRIBUTE; + goto fail; } } pipe_mutex_unlock(vmixer->device->mutex); return VDP_STATUS_OK; +fail: + pipe_mutex_unlock(vmixer->device->mutex); + return ret; } /** |