summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2014-09-02 08:57:53 +1000
committerDave Airlie <airlied@redhat.com>2014-09-03 07:58:50 +1000
commitf4ccf687a678919920ceed5f2a5892c8870e5f30 (patch)
treeb1b3204f703221494fda383f812b6c0d78c495f2
parent2da91188527d0878460eca5110867c6c1e665b64 (diff)
vdpau: unlock the mutex on error paths in attribute setting.
Coverity pointed out we never dropped the lock here, so fix it by using a common exit path. Reviewed-by: Christian König <christian.koenig@amd.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
-rw-r--r--src/gallium/state_trackers/vdpau/mixer.c38
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;
}
/**