Changeset 4303
- Timestamp:
- 03/10/10 20:12:47 (6 months ago)
- Location:
- trunk/showtime/src
- Files:
-
- 2 modified
-
ui/glw/glw_video_opengl.c (modified) (14 diffs)
-
video/video_decoder.h (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/showtime/src/ui/glw/glw_video_opengl.c
r4265 r4303 573 573 float x1, x2, y1, y2; 574 574 575 const int bordersize = 3; 576 575 577 if(rectmode) { 576 578 577 579 if(interlace) { 578 580 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; 583 585 584 586 } else { … … 594 596 if(interlace) { 595 597 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); 600 602 601 603 } else { … … 675 677 glBindTexture(textype, tex); 676 678 677 render_video_quad(vd ->vd_interlaced, rectmode,679 render_video_quad(vdf->vdf_cutborder, rectmode, 678 680 vdf->vdf_width[0], vdf->vdf_height[0]); 679 681 … … 740 742 glBindTexture(textype, gv_tex_get(gvf_a, GVF_TEX_L)); 741 743 742 render_video_quad( vd->vd_interlaced, rectmode,744 render_video_quad(fra->vdf_cutborder, rectmode, 743 745 fra->vdf_width[0], fra->vdf_height[0]); 744 746 … … 940 942 941 943 942 943 944 944 typedef 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; 945 952 946 953 /** … … 956 963 uint8_t *prev, *cur, *next, *src, *dst; 957 964 int hshift, vshift; 958 dei lace_type_t dt;965 deinterlacertype_t dt; 959 966 video_decoder_frame_t *vdf; 960 967 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 } 964 975 965 976 avcodec_get_chroma_sub_sample(ctx->pix_fmt, &hshift, &vshift); … … 974 985 switch(dt) { 975 986 976 case VD_DEILACE_AUTO: 977 return; 978 979 /* 980 * No post processing 981 */ 982 983 case VD_DEILACE_NONE: 987 case DEINTERLACE_NONE: 984 988 vd->vd_active_frames_needed = 3; 985 vd->vd_interlaced = 0;986 989 if((vdf = vd_dequeue_for_decode(vd, wvec, hvec)) == NULL) 987 990 return; … … 1001 1004 } 1002 1005 1003 vd->vd_interlaced = 0;1004 1006 vdf->vdf_pts = pts; 1005 1007 vdf->vdf_epoch = epoch; 1006 1008 vdf->vdf_duration = duration; 1009 vdf->vdf_cutborder = 0; 1007 1010 TAILQ_INSERT_TAIL(&vd->vd_display_queue, vdf, vdf_link); 1008 1011 return; 1009 1012 1010 case VD_DEILACE_HALF_RES:1013 case DEINTERLACE_OPENGL: 1011 1014 duration /= 2; 1012 1015 1013 tff = !!frame->top_field_first ^ vd->vd_field_parity;1016 tff = !!frame->top_field_first ^ parity; 1014 1017 1015 1018 vd->vd_active_frames_needed = 3; … … 1019 1022 * OpenGL does bledning for us 1020 1023 */ 1021 1022 vd->vd_interlaced = 1;1023 1024 1024 1025 hvec[0] = hvec[0] / 2; … … 1069 1070 1070 1071 vdf->vdf_debob = tff; 1071 1072 vdf->vdf_cutborder = 1; 1073 1072 1074 vdf->vdf_pts = pts + duration; 1073 1075 vdf->vdf_epoch = epoch; … … 1076 1078 return; 1077 1079 1078 case VD_DEILACE_YADIF_FRAME:1080 case DEINTERLACE_YADIF_FRAME: 1079 1081 mode = 0; goto yadif; 1080 case VD_DEILACE_YADIF_FIELD:1082 case DEINTERLACE_YADIF_FIELD: 1081 1083 mode = 1; goto yadif; 1082 case VD_DEILACE_YADIF_FRAME_NO_SPATIAL_ILACE:1084 case DEINTERLACE_YADIF_FRAME_NO_SPATIAL_ILACE: 1083 1085 mode = 2; goto yadif; 1084 case VD_DEILACE_YADIF_FIELD_NO_SPATIAL_ILACE:1086 case DEINTERLACE_YADIF_FIELD_NO_SPATIAL_ILACE: 1085 1087 mode = 3; 1086 1088 yadif: … … 1101 1103 1102 1104 vd->vd_active_frames_needed = 3; 1103 vd->vd_interlaced = 1;1104 1105 1105 for(i = 0; i < 3; i++) { 1106 1106 w = vd->vd_yadif_width >> (i ? hshift : 0); … … 1115 1115 } 1116 1116 1117 tff = !!frame->top_field_first ^ vd->vd_field_parity;1117 tff = !!frame->top_field_first ^ parity; 1118 1118 1119 1119 pts -= duration; … … 1172 1172 vdf->vdf_epoch = epoch; 1173 1173 vdf->vdf_duration = duration; 1174 vdf->vdf_cutborder = 0; 1174 1175 TAILQ_INSERT_TAIL(&vd->vd_display_queue, vdf, vdf_link); 1175 1176 } -
trunk/showtime/src/video/video_decoder.h
r4268 r4303 77 77 } 78 78 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 94 79 TAILQ_HEAD(video_decoder_frame_queue, video_decoder_frame); 95 80 … … 106 91 int vdf_epoch; 107 92 108 int vdf_debob; 93 uint8_t vdf_debob; 94 uint8_t vdf_cutborder; 109 95 110 96 void *vdf_data[3]; … … 130 116 131 117 132 /* Configuration */133 134 deilace_type_t vd_deilace_conf;135 int vd_field_parity;136 137 118 media_pipe_t *vd_mp; 138 139 119 140 120 /* Mutex for protecting access to the frame queues */ … … 187 167 188 168 int vd_skip; 189 190 int vd_interlaced;191 169 192 170 int64_t vd_nextpts;