Lines Matching defs:vmixer
49 vlVdpVideoMixer *vmixer = NULL;
59 vmixer = CALLOC(1, sizeof(vlVdpVideoMixer));
60 if (!vmixer)
63 DeviceReference(&vmixer->device, dev);
67 if (!vl_compositor_init_state(&vmixer->cstate, dev->context)) {
72 vl_csc_get_matrix(VL_CSC_COLOR_STANDARD_BT_601, NULL, true, &vmixer->csc);
74 if (!vl_compositor_set_csc_matrix(&vmixer->cstate, (const vl_csc_matrix *)&vmixer->csc, 1.0f, 0.0f)) {
80 *mixer = vlAddDataHTAB(vmixer);
103 vmixer->deint.supported = true;
107 vmixer->sharpness.supported = true;
111 vmixer->noise_reduction.supported = true;
115 vmixer->luma_key.supported = true;
119 vmixer->bicubic.supported = true;
125 vmixer->chroma_format = PIPE_VIDEO_CHROMA_FORMAT_420;
130 vmixer->video_width = *(uint32_t*)parameter_values[i];
133 vmixer->video_height = *(uint32_t*)parameter_values[i];
136 vmixer->chroma_format = ChromaToPipe(*(VdpChromaType*)parameter_values[i]);
139 vmixer->max_layers = *(uint32_t*)parameter_values[i];
145 if (vmixer->max_layers > 4) {
146 VDPAU_MSG(VDPAU_WARN, "[VDPAU] Max layers %u > 4 not supported\n", vmixer->max_layers);
151 if (vmixer->video_width < 48 || vmixer->video_width > max_size) {
153 vmixer->video_width, max_size);
156 if (vmixer->video_height < 48 || vmixer->video_height > max_size) {
158 vmixer->video_height, max_size);
161 vmixer->luma_key.luma_min = 1.0f;
162 vmixer->luma_key.luma_max = 0.0f;
172 vl_compositor_cleanup_state(&vmixer->cstate);
175 DeviceReference(&vmixer->device, NULL);
176 FREE(vmixer);
186 vlVdpVideoMixer *vmixer;
188 vmixer = vlGetDataHTAB(mixer);
189 if (!vmixer)
192 mtx_lock(&vmixer->device->mutex);
196 vl_compositor_cleanup_state(&vmixer->cstate);
198 if (vmixer->deint.filter) {
199 vl_deint_filter_cleanup(vmixer->deint.filter);
200 FREE(vmixer->deint.filter);
203 if (vmixer->noise_reduction.filter) {
204 vl_median_filter_cleanup(vmixer->noise_reduction.filter);
205 FREE(vmixer->noise_reduction.filter);
208 if (vmixer->sharpness.filter) {
209 vl_matrix_filter_cleanup(vmixer->sharpness.filter);
210 FREE(vmixer->sharpness.filter);
213 if (vmixer->bicubic.filter) {
214 vl_bicubic_filter_cleanup(vmixer->bicubic.filter);
215 FREE(vmixer->bicubic.filter);
217 mtx_unlock(&vmixer->device->mutex);
218 DeviceReference(&vmixer->device, NULL);
220 FREE(vmixer);
253 vlVdpVideoMixer *vmixer;
259 vmixer = vlGetDataHTAB(mixer);
260 if (!vmixer)
263 compositor = &vmixer->device->compositor;
270 if (surf->device != vmixer->device)
273 if (vmixer->video_width > video_buffer->width ||
274 vmixer->video_height > video_buffer->height ||
275 vmixer->chroma_format != pipe_format_to_chroma_format(video_buffer->buffer_format))
278 if (layer_count > vmixer->max_layers)
291 mtx_lock(&vmixer->device->mutex);
293 vl_compositor_clear_layers(&vmixer->cstate);
296 vl_compositor_set_rgba_layer(&vmixer->cstate, compositor, layer++, bg->sampler_view,
313 mtx_unlock(&vmixer->device->mutex);
317 if (deinterlace != VL_COMPOSITOR_WEAVE && vmixer->deint.enabled &&
323 vl_deint_filter_check_buffers(vmixer->deint.filter,
325 vl_deint_filter_render(vmixer->deint.filter, prevprev->video_buffer,
330 video_buffer = vmixer->deint.filter->video_buffer;
345 vl_compositor_set_buffer_layer(&vmixer->cstate, compositor, layer, video_buffer, prect, NULL, deinterlace);
347 if (vmixer->bicubic.filter || vmixer->sharpness.filter || vmixer->noise_reduction.filter) {
348 pipe = vmixer->device->context;
358 if (!vmixer->bicubic.filter) {
383 if (!vmixer->bicubic.filter) {
384 vl_compositor_set_layer_dst_area(&vmixer->cstate, layer++, RectToPipe(destination_video_rect, &rect));
385 vl_compositor_set_dst_clip(&vmixer->cstate, RectToPipe(destination_rect, &clip));
391 mtx_unlock(&vmixer->device->mutex);
397 vl_compositor_set_rgba_layer(&vmixer->cstate, compositor, layer, src->sampler_view,
399 vl_compositor_set_layer_dst_area(&vmixer->cstate, layer++, RectToPipe(layers->destination_rect, &rect));
404 vl_compositor_render(&vmixer->cstate, compositor, surface, &dirty_area, true);
406 if (vmixer->noise_reduction.filter) {
407 if (!vmixer->sharpness.filter && !vmixer->bicubic.filter) {
408 vl_median_filter_render(vmixer->noise_reduction.filter,
416 vl_median_filter_render(vmixer->noise_reduction.filter,
427 if (vmixer->sharpness.filter) {
428 if (!vmixer->bicubic.filter) {
429 vl_matrix_filter_render(vmixer->sharpness.filter,
437 vl_matrix_filter_render(vmixer->sharpness.filter,
448 if (vmixer->bicubic.filter)
449 vl_bicubic_filter_render(vmixer->bicubic.filter,
458 mtx_unlock(&vmixer->device->mutex);
464 vlVdpVideoMixerUpdateDeinterlaceFilter(vlVdpVideoMixer *vmixer)
466 struct pipe_context *pipe = vmixer->device->context;
467 assert(vmixer);
470 if (vmixer->deint.filter) {
471 vl_deint_filter_cleanup(vmixer->deint.filter);
472 FREE(vmixer->deint.filter);
473 vmixer->deint.filter = NULL;
477 if (vmixer->deint.enabled && vmixer->chroma_format == PIPE_VIDEO_CHROMA_FORMAT_420) {
478 vmixer->deint.filter = MALLOC(sizeof(struct vl_deint_filter));
479 vmixer->deint.enabled = vl_deint_filter_init(vmixer->deint.filter, pipe,
480 vmixer->video_width, vmixer->video_height,
481 vmixer->skip_chroma_deint, vmixer->deint.spatial);
482 if (!vmixer->deint.enabled) {
483 FREE(vmixer->deint.filter);
492 vlVdpVideoMixerUpdateNoiseReductionFilter(vlVdpVideoMixer *vmixer)
494 assert(vmixer);
497 if (vmixer->noise_reduction.filter) {
498 vl_median_filter_cleanup(vmixer->noise_reduction.filter);
499 FREE(vmixer->noise_reduction.filter);
500 vmixer->noise_reduction.filter = NULL;
504 if (vmixer->noise_reduction. enabled && vmixer->noise_reduction.level > 0) {
505 vmixer->noise_reduction.filter = MALLOC(sizeof(struct vl_median_filter));
506 vl_median_filter_init(vmixer->noise_reduction.filter, vmixer->device->context,
507 vmixer->video_width, vmixer->video_height,
508 vmixer->noise_reduction.level + 1,
514 vlVdpVideoMixerUpdateSharpnessFilter(vlVdpVideoMixer *vmixer)
516 assert(vmixer);
519 if (vmixer->sharpness.filter) {
520 vl_matrix_filter_cleanup(vmixer->sharpness.filter);
521 FREE(vmixer->sharpness.filter);
522 vmixer->sharpness.filter = NULL;
526 if (vmixer->sharpness.enabled && vmixer->sharpness.value != 0.0f) {
530 if (vmixer->sharpness.value > 0.0f) {
536 matrix[i] *= vmixer->sharpness.value;
546 matrix[i] *= fabsf(vmixer->sharpness.value) / 16.0f;
548 matrix[4] += 1.0f - fabsf(vmixer->sharpness.value);
551 vmixer->sharpness.filter = MALLOC(sizeof(struct vl_matrix_filter));
552 vl_matrix_filter_init(vmixer->sharpness.filter, vmixer->device->context,
553 vmixer->video_width, vmixer->video_height,
562 vlVdpVideoMixerUpdateBicubicFilter(vlVdpVideoMixer *vmixer)
564 assert(vmixer);
567 if (vmixer->bicubic.filter) {
568 vl_bicubic_filter_cleanup(vmixer->bicubic.filter);
569 FREE(vmixer->bicubic.filter);
570 vmixer->bicubic.filter = NULL;
573 if (vmixer->bicubic.enabled) {
574 vmixer->bicubic.filter = MALLOC(sizeof(struct vl_bicubic_filter));
575 vl_bicubic_filter_init(vmixer->bicubic.filter, vmixer->device->context,
576 vmixer->video_width, vmixer->video_height);
589 vlVdpVideoMixer *vmixer;
595 vmixer = vlGetDataHTAB(mixer);
596 if (!vmixer)
616 feature_supports[i] = vmixer->deint.supported;
620 feature_supports[i] = vmixer->sharpness.supported;
624 feature_supports[i] = vmixer->noise_reduction.supported;
628 feature_supports[i] = vmixer->luma_key.supported;
632 feature_supports[i] = vmixer->bicubic.supported;
652 vlVdpVideoMixer *vmixer;
658 vmixer = vlGetDataHTAB(mixer);
659 if (!vmixer)
662 mtx_lock(&vmixer->device->mutex);
679 vmixer->deint.enabled = feature_enables[i];
680 vlVdpVideoMixerUpdateDeinterlaceFilter(vmixer);
684 vmixer->sharpness.enabled = feature_enables[i];
685 vlVdpVideoMixerUpdateSharpnessFilter(vmixer);
689 vmixer->noise_reduction.enabled = feature_enables[i];
690 vlVdpVideoMixerUpdateNoiseReductionFilter(vmixer);
694 vmixer->luma_key.enabled = feature_enables[i];
696 if (!vl_compositor_set_csc_matrix(&vmixer->cstate, (const vl_csc_matrix *)&vmixer->csc,
697 vmixer->luma_key.luma_min, vmixer->luma_key.luma_max)) {
698 mtx_unlock(&vmixer->device->mutex);
704 vmixer->bicubic.enabled = feature_enables[i];
705 vlVdpVideoMixerUpdateBicubicFilter(vmixer);
709 mtx_unlock(&vmixer->device->mutex);
713 mtx_unlock(&vmixer->device->mutex);
727 vlVdpVideoMixer *vmixer;
733 vmixer = vlGetDataHTAB(mixer);
734 if (!vmixer)
754 feature_enables[i] = vmixer->sharpness.enabled;
758 feature_enables[i] = vmixer->noise_reduction.enabled;
762 feature_enables[i] = vmixer->luma_key.enabled;
766 feature_enables[i] = vmixer->bicubic.enabled;
796 vlVdpVideoMixer *vmixer = vlGetDataHTAB(mixer);
797 if (!vmixer)
800 mtx_lock(&vmixer->device->mutex);
809 vl_compositor_set_clear_color(&vmixer->cstate, &color);
813 vmixer->custom_csc = !!vdp_csc;
815 vl_csc_get_matrix(VL_CSC_COLOR_STANDARD_BT_601, NULL, 1, &vmixer->csc);
817 memcpy(vmixer->csc, vdp_csc, sizeof(vl_csc_matrix));
819 if (!vl_compositor_set_csc_matrix(&vmixer->cstate, (const vl_csc_matrix *)&vmixer->csc,
820 vmixer->luma_key.luma_min, vmixer->luma_key.luma_max)) {
834 vmixer->noise_reduction.level = val * 10;
835 vlVdpVideoMixerUpdateNoiseReductionFilter(vmixer);
844 vmixer->luma_key.luma_min = val;
846 if (!vl_compositor_set_csc_matrix(&vmixer->cstate, (const vl_csc_matrix *)&vmixer->csc,
847 vmixer->luma_key.luma_min, vmixer->luma_key.luma_max)) {
859 vmixer->luma_key.luma_max = val;
861 if (!vl_compositor_set_csc_matrix(&vmixer->cstate, (const vl_csc_matrix *)&vmixer->csc,
862 vmixer->luma_key.luma_min, vmixer->luma_key.luma_max)) {
876 vmixer->sharpness.value = val;
877 vlVdpVideoMixerUpdateSharpnessFilter(vmixer);
885 vmixer->skip_chroma_deint = *(uint8_t*)attribute_values[i];
886 vlVdpVideoMixerUpdateDeinterlaceFilter(vmixer);
893 mtx_unlock(&vmixer->device->mutex);
897 mtx_unlock(&vmixer->device->mutex);
910 vlVdpVideoMixer *vmixer = vlGetDataHTAB(mixer);
912 if (!vmixer)
922 *(uint32_t*)parameter_values[i] = vmixer->video_width;
925 *(uint32_t*)parameter_values[i] = vmixer->video_height;
928 *(VdpChromaType*)parameter_values[i] = PipeToChroma(vmixer->chroma_format);
931 *(uint32_t*)parameter_values[i] = vmixer->max_layers;
955 vlVdpVideoMixer *vmixer = vlGetDataHTAB(mixer);
956 if (!vmixer)
959 mtx_lock(&vmixer->device->mutex);
963 vl_compositor_get_clear_color(&vmixer->cstate, attribute_values[i]);
967 if (!vmixer->custom_csc) {
971 memcpy(*vdp_csc, vmixer->csc, sizeof(float)*12);
975 *(float*)attribute_values[i] = (float)vmixer->noise_reduction.level / 10.0f;
979 *(float*)attribute_values[i] = vmixer->luma_key.luma_min;
982 *(float*)attribute_values[i] = vmixer->luma_key.luma_max;
985 *(float*)attribute_values[i] = vmixer->sharpness.value;
988 *(uint8_t*)attribute_values[i] = vmixer->skip_chroma_deint;
991 mtx_unlock(&vmixer->device->mutex);
995 mtx_unlock(&vmixer->device->mutex);