Преглед на файлове

vdpau: check the input video context of filters matches the VDPAU chromas

And set the output video context.
Steve Lhomme преди 5 години
родител
ревизия
ff775d07b9
променени са 3 файла, в които са добавени 11 реда и са изтрити 0 реда
  1. 3 0
      modules/hw/vdpau/adjust.c
  2. 5 0
      modules/hw/vdpau/deinterlace.c
  3. 3 0
      modules/hw/vdpau/sharpen.c

+ 3 - 0
modules/hw/vdpau/adjust.c

@@ -129,6 +129,9 @@ static int Open(vlc_object_t *obj)
 {
     filter_t *filter = (filter_t *)obj;
 
+    if ( filter->vctx_in == NULL ||
+         vlc_video_context_GetType(filter->vctx_in) != VLC_VIDEO_CONTEXT_VDPAU )
+        return VLC_EGENERIC;
     if (filter->fmt_in.video.i_chroma != VLC_CODEC_VDPAU_VIDEO_420
      && filter->fmt_in.video.i_chroma != VLC_CODEC_VDPAU_VIDEO_422
      && filter->fmt_in.video.i_chroma != VLC_CODEC_VDPAU_VIDEO_444)

+ 5 - 0
modules/hw/vdpau/deinterlace.c

@@ -100,6 +100,9 @@ static int Open(vlc_object_t *obj)
 {
     filter_t *filter = (filter_t *)obj;
 
+    if ( filter->vctx_in == NULL ||
+         vlc_video_context_GetType(filter->vctx_in) != VLC_VIDEO_CONTEXT_VDPAU )
+        return VLC_EGENERIC;
     if (filter->fmt_in.video.i_chroma != VLC_CODEC_VDPAU_VIDEO_420
      && filter->fmt_in.video.i_chroma != VLC_CODEC_VDPAU_VIDEO_422
      && filter->fmt_in.video.i_chroma != VLC_CODEC_VDPAU_VIDEO_444)
@@ -119,6 +122,7 @@ static int Open(vlc_object_t *obj)
     filter->pf_video_filter = Deinterlace;
     filter->p_sys = sys;
     filter->fmt_out.video.i_frame_rate *= 2;
+    filter->vctx_out = vlc_video_context_Hold(filter->vctx_in);
     return VLC_SUCCESS;
 }
 
@@ -127,6 +131,7 @@ static void Close(vlc_object_t *obj)
     filter_t *filter = (filter_t *)obj;
     filter_sys_t *sys = filter->p_sys;
 
+    vlc_video_context_Release(filter->vctx_out);
     free(sys);
 }
 

+ 3 - 0
modules/hw/vdpau/sharpen.c

@@ -83,6 +83,9 @@ static int Open(vlc_object_t *obj)
 {
     filter_t *filter = (filter_t *)obj;
 
+    if ( filter->vctx_in == NULL ||
+         vlc_video_context_GetType(filter->vctx_in) != VLC_VIDEO_CONTEXT_VDPAU )
+        return VLC_EGENERIC;
     if (filter->fmt_in.video.i_chroma != VLC_CODEC_VDPAU_VIDEO_420
      && filter->fmt_in.video.i_chroma != VLC_CODEC_VDPAU_VIDEO_422
      && filter->fmt_in.video.i_chroma != VLC_CODEC_VDPAU_VIDEO_444)