/** * Retrieve the current background color setting. */ VdpStatus vlVdpPresentationQueueGetBackgroundColor(VdpPresentationQueue presentation_queue, VdpColor *const background_color) { vlVdpPresentationQueue *pq; union pipe_color_union color; if (!background_color) return VDP_STATUS_INVALID_POINTER; pq = vlGetDataHTAB(presentation_queue); if (!pq) return VDP_STATUS_INVALID_HANDLE; pipe_mutex_lock(pq->device->mutex); vl_compositor_get_clear_color(&pq->cstate, &color); pipe_mutex_unlock(pq->device->mutex); background_color->red = color.f[0]; background_color->green = color.f[1]; background_color->blue = color.f[2]; background_color->alpha = color.f[3]; return VDP_STATUS_OK; }
/** * Retrieve current attribute values. */ VdpStatus vlVdpVideoMixerGetAttributeValues(VdpVideoMixer mixer, uint32_t attribute_count, VdpVideoMixerAttribute const *attributes, void *const *attribute_values) { unsigned i; VdpCSCMatrix **vdp_csc; if (!(attributes && attribute_values)) return VDP_STATUS_INVALID_POINTER; vlVdpVideoMixer *vmixer = vlGetDataHTAB(mixer); if (!vmixer) return VDP_STATUS_INVALID_HANDLE; pipe_mutex_lock(vmixer->device->mutex); for (i = 0; i < attribute_count; ++i) { switch (attributes[i]) { case VDP_VIDEO_MIXER_ATTRIBUTE_BACKGROUND_COLOR: vl_compositor_get_clear_color(&vmixer->cstate, attribute_values[i]); break; case VDP_VIDEO_MIXER_ATTRIBUTE_CSC_MATRIX: vdp_csc = attribute_values[i]; if (!vmixer->custom_csc) { *vdp_csc = NULL; break; } memcpy(*vdp_csc, vmixer->csc, sizeof(float)*12); break; case VDP_VIDEO_MIXER_ATTRIBUTE_NOISE_REDUCTION_LEVEL: *(float*)attribute_values[i] = (float)vmixer->noise_reduction.level / 10.0f; break; case VDP_VIDEO_MIXER_ATTRIBUTE_LUMA_KEY_MIN_LUMA: *(float*)attribute_values[i] = vmixer->luma_key_min; break; case VDP_VIDEO_MIXER_ATTRIBUTE_LUMA_KEY_MAX_LUMA: *(float*)attribute_values[i] = vmixer->luma_key_max; break; case VDP_VIDEO_MIXER_ATTRIBUTE_SHARPNESS_LEVEL: *(float*)attribute_values[i] = vmixer->sharpness.value; break; case VDP_VIDEO_MIXER_ATTRIBUTE_SKIP_CHROMA_DEINTERLACE: *(uint8_t*)attribute_values[i] = vmixer->skip_chroma_deint; break; default: pipe_mutex_unlock(vmixer->device->mutex); return VDP_STATUS_INVALID_VIDEO_MIXER_ATTRIBUTE; } } pipe_mutex_unlock(vmixer->device->mutex); return VDP_STATUS_OK; }