Changeset 4303

Show
Ignore:
Timestamp:
03/10/10 20:12:47 (6 months ago)
Author:
andoma
Message:

Default to OpenGL based deinterlacer

Location:
trunk/showtime/src
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • trunk/showtime/src/ui/glw/glw_video_opengl.c

    r4265 r4303  
    573573  float x1, x2, y1, y2; 
    574574 
     575  const int bordersize = 3; 
     576 
    575577  if(rectmode) { 
    576578 
    577579    if(interlace) { 
    578580 
    579       x1 = 1; 
    580       y1 = 1; 
    581       x2 = width  - 1; 
    582       y2 = height - 1; 
     581      x1 = bordersize; 
     582      y1 = bordersize; 
     583      x2 = width  - bordersize; 
     584      y2 = height - bordersize; 
    583585 
    584586    } else { 
     
    594596    if(interlace) { 
    595597 
    596       x1 = 0 + (1.0 / (float)width); 
    597       y1 = 0 + (1.0 / (float)height); 
    598       x2 = 1 - (1.0 / (float)width); 
    599       y2 = 1 - (1.0 / (float)height); 
     598      x1 = 0 + (bordersize / (float)width); 
     599      y1 = 0 + (bordersize / (float)height); 
     600      x2 = 1 - (bordersize / (float)width); 
     601      y2 = 1 - (bordersize / (float)height); 
    600602 
    601603    } else { 
     
    675677  glBindTexture(textype, tex); 
    676678   
    677   render_video_quad(vd->vd_interlaced, rectmode,  
     679  render_video_quad(vdf->vdf_cutborder, rectmode,  
    678680                    vdf->vdf_width[0], vdf->vdf_height[0]); 
    679681   
     
    740742  glBindTexture(textype, gv_tex_get(gvf_a, GVF_TEX_L)); 
    741743 
    742   render_video_quad(vd->vd_interlaced, rectmode,  
     744  render_video_quad(fra->vdf_cutborder, rectmode,  
    743745                    fra->vdf_width[0], fra->vdf_height[0]); 
    744746 
     
    940942 
    941943 
    942  
    943  
    944  
     944typedef enum { 
     945  DEINTERLACE_NONE, 
     946  DEINTERLACE_OPENGL, 
     947  DEINTERLACE_YADIF_FRAME, 
     948  DEINTERLACE_YADIF_FIELD, // Best YADIF version 
     949  DEINTERLACE_YADIF_FRAME_NO_SPATIAL_ILACE, 
     950  DEINTERLACE_YADIF_FIELD_NO_SPATIAL_ILACE, 
     951} deinterlacertype_t; 
    945952 
    946953/** 
     
    956963  uint8_t *prev, *cur, *next, *src, *dst; 
    957964  int hshift, vshift; 
    958   deilace_type_t dt; 
     965  deinterlacertype_t dt; 
    959966  video_decoder_frame_t *vdf; 
    960967 
    961   dt = disable_deinterlacer ? VD_DEILACE_NONE : vd->vd_deilace_conf; 
    962   if(dt == VD_DEILACE_AUTO) 
    963     dt = frame->interlaced_frame ? VD_DEILACE_YADIF_FIELD : VD_DEILACE_NONE; 
     968  const int parity = 0; 
     969 
     970  if(disable_deinterlacer) { 
     971    dt = DEINTERLACE_NONE; 
     972  } else { 
     973    dt = DEINTERLACE_OPENGL; 
     974  } 
    964975 
    965976  avcodec_get_chroma_sub_sample(ctx->pix_fmt, &hshift, &vshift); 
     
    974985  switch(dt) { 
    975986 
    976   case VD_DEILACE_AUTO: 
    977     return; 
    978  
    979     /* 
    980      *  No post processing 
    981      */ 
    982  
    983   case VD_DEILACE_NONE: 
     987  case DEINTERLACE_NONE: 
    984988    vd->vd_active_frames_needed = 3; 
    985     vd->vd_interlaced = 0; 
    986989    if((vdf = vd_dequeue_for_decode(vd, wvec, hvec)) == NULL) 
    987990      return; 
     
    10011004    } 
    10021005 
    1003     vd->vd_interlaced = 0; 
    10041006    vdf->vdf_pts = pts; 
    10051007    vdf->vdf_epoch = epoch; 
    10061008    vdf->vdf_duration = duration; 
     1009    vdf->vdf_cutborder = 0; 
    10071010    TAILQ_INSERT_TAIL(&vd->vd_display_queue, vdf, vdf_link); 
    10081011    return; 
    10091012 
    1010   case VD_DEILACE_HALF_RES: 
     1013  case DEINTERLACE_OPENGL: 
    10111014    duration /= 2; 
    10121015 
    1013     tff = !!frame->top_field_first ^ vd->vd_field_parity; 
     1016    tff = !!frame->top_field_first ^ parity; 
    10141017 
    10151018    vd->vd_active_frames_needed = 3; 
     
    10191022     *  OpenGL does bledning for us 
    10201023     */ 
    1021  
    1022     vd->vd_interlaced = 1; 
    10231024 
    10241025    hvec[0] = hvec[0] / 2; 
     
    10691070     
    10701071    vdf->vdf_debob = tff; 
    1071      
     1072    vdf->vdf_cutborder = 1; 
     1073 
    10721074    vdf->vdf_pts = pts + duration; 
    10731075    vdf->vdf_epoch = epoch; 
     
    10761078    return; 
    10771079     
    1078   case VD_DEILACE_YADIF_FRAME: 
     1080  case DEINTERLACE_YADIF_FRAME: 
    10791081    mode = 0; goto yadif; 
    1080   case VD_DEILACE_YADIF_FIELD: 
     1082  case DEINTERLACE_YADIF_FIELD: 
    10811083    mode = 1; goto yadif; 
    1082   case VD_DEILACE_YADIF_FRAME_NO_SPATIAL_ILACE: 
     1084  case DEINTERLACE_YADIF_FRAME_NO_SPATIAL_ILACE: 
    10831085    mode = 2; goto yadif; 
    1084   case VD_DEILACE_YADIF_FIELD_NO_SPATIAL_ILACE: 
     1086  case DEINTERLACE_YADIF_FIELD_NO_SPATIAL_ILACE: 
    10851087    mode = 3; 
    10861088  yadif: 
     
    11011103 
    11021104    vd->vd_active_frames_needed = 3; 
    1103     vd->vd_interlaced = 1; 
    1104  
    11051105    for(i = 0; i < 3; i++) { 
    11061106      w = vd->vd_yadif_width  >> (i ? hshift : 0); 
     
    11151115    } 
    11161116 
    1117     tff = !!frame->top_field_first ^ vd->vd_field_parity; 
     1117    tff = !!frame->top_field_first ^ parity; 
    11181118 
    11191119    pts -= duration; 
     
    11721172      vdf->vdf_epoch = epoch; 
    11731173      vdf->vdf_duration = duration; 
     1174      vdf->vdf_cutborder = 0; 
    11741175      TAILQ_INSERT_TAIL(&vd->vd_display_queue, vdf, vdf_link); 
    11751176    } 
  • trunk/showtime/src/video/video_decoder.h

    r4268 r4303  
    7777} 
    7878 
    79  
    80 /** 
    81  * 
    82  */ 
    83 typedef enum { 
    84   VD_DEILACE_AUTO, 
    85   VD_DEILACE_NONE, 
    86   VD_DEILACE_HALF_RES, 
    87   VD_DEILACE_YADIF_FRAME, 
    88   VD_DEILACE_YADIF_FIELD, 
    89   VD_DEILACE_YADIF_FRAME_NO_SPATIAL_ILACE, 
    90   VD_DEILACE_YADIF_FIELD_NO_SPATIAL_ILACE, 
    91 } deilace_type_t; 
    92  
    93  
    9479TAILQ_HEAD(video_decoder_frame_queue, video_decoder_frame); 
    9580 
     
    10691  int vdf_epoch; 
    10792 
    108   int vdf_debob; 
     93  uint8_t vdf_debob; 
     94  uint8_t vdf_cutborder; 
    10995 
    11096  void *vdf_data[3]; 
     
    130116 
    131117 
    132   /* Configuration */ 
    133  
    134   deilace_type_t vd_deilace_conf; 
    135   int vd_field_parity; 
    136   
    137118  media_pipe_t *vd_mp; 
    138  
    139119 
    140120  /* Mutex for protecting access to the frame queues */ 
     
    187167 
    188168  int vd_skip; 
    189  
    190   int vd_interlaced; 
    191169 
    192170  int64_t vd_nextpts;