📄 tvtime.c
字号:
if( pulldown_source( tvtime->pdoffset, 0 ) ) { pulldown_merge_fields( output, lastframe, lastframe + instride, width, frame_height, instride*2, outstride ); } else { pulldown_merge_fields( output, curframe, lastframe + instride, width, frame_height, instride*2, outstride ); } return 1; } else { if( tvtime->filmmode ) { printf( "Film mode disabled.\n" ); tvtime->filmmode = 0; } } } else if( !tvtime->pderror ) { if( pulldown_drop( tvtime->pdoffset, 1 ) ) return 0; if( pulldown_source( tvtime->pdoffset, 1 ) ) { pulldown_merge_fields( output, curframe, lastframe + instride, width, frame_height, instride*2, outstride ); } else { pulldown_merge_fields( output, curframe, curframe + instride, width, frame_height, instride*2, outstride ); } return 1; } } if( !tvtime->curmethod->scanlinemode ) { deinterlace_frame_data_t data; data.f0 = curframe; data.f1 = lastframe; data.f2 = secondlastframe; tvtime->curmethod->deinterlace_frame( output, outstride, &data, bottom_field, second_field, width, frame_height ); } else { int loop_size; int scanline = 0; if( bottom_field ) { /* Advance frame pointers to the next input line. */ curframe += instride; lastframe += instride; secondlastframe += instride; /* Double the top scanline a scanline. */ blit_packed422_scanline( output, curframe, width ); output += outstride; scanline++; } /* Copy a scanline. */ blit_packed422_scanline( output, curframe, width ); output += outstride; scanline++; /* Something is wrong here. -Billy */ loop_size = ((frame_height - 2) / 2); for( i = loop_size; i; --i ) { deinterlace_scanline_data_t data; data.bottom_field = bottom_field; data.t0 = curframe; data.b0 = curframe + (instride*2); if( second_field ) { data.tt1 = (i < loop_size) ? (curframe - instride) : (curframe + instride); data.m1 = curframe + instride; data.bb1 = (i > 1) ? (curframe + (instride*3)) : (curframe + instride); } else { data.tt1 = (i < loop_size) ? (lastframe - instride) : (lastframe + instride); data.m1 = lastframe + instride; data.bb1 = (i > 1) ? (lastframe + (instride*3)) : (lastframe + instride); } data.t2 = lastframe; data.b2 = lastframe + (instride*2); if( second_field ) { data.tt3 = (i < loop_size) ? (lastframe - instride) : (lastframe + instride); data.m3 = lastframe + instride; data.bb3 = (i > 1) ? (lastframe + (instride*3)) : (lastframe + instride); } else { data.tt3 = (i < loop_size) ? (secondlastframe - instride) : (secondlastframe + instride); data.m3 = secondlastframe + instride; data.bb3 = (i > 1) ? (secondlastframe + (instride*3)) : (secondlastframe + instride); } tvtime->curmethod->interpolate_scanline( output, &data, width ); output += outstride; scanline++; data.tt0 = curframe; data.m0 = curframe + (instride*2); data.bb0 = (i > 1) ? (curframe + (instride*4)) : (curframe + (instride*2)); if( second_field ) { data.t1 = curframe + instride; data.b1 = (i > 1) ? (curframe + (instride*3)) : (curframe + instride); } else { data.t1 = lastframe + instride; data.b1 = (i > 1) ? (lastframe + (instride*3)) : (lastframe + instride); } data.tt2 = lastframe; data.m2 = lastframe + (instride*2); data.bb2 = (i > 1) ? (lastframe + (instride*4)) : (lastframe + (instride*2)); if( second_field ) { data.t2 = lastframe + instride; data.b2 = (i > 1) ? (lastframe + (instride*3)) : (lastframe + instride); } else { data.t2 = secondlastframe + instride; data.b2 = (i > 1) ? (secondlastframe + (instride*3)) : (secondlastframe + instride); } /* Copy a scanline. */ tvtime->curmethod->copy_scanline( output, &data, width ); curframe += instride * 2; lastframe += instride * 2; secondlastframe += instride * 2; output += outstride; scanline++; } if( !bottom_field ) { /* Double the bottom scanline. */ blit_packed422_scanline( output, curframe, width ); output += outstride; scanline++; } } return 1;}int tvtime_build_copied_field( tvtime_t *tvtime, uint8_t *output, uint8_t *curframe, int bottom_field, int width, int frame_height, int instride, int outstride ){ int scanline = 0; int i; if( bottom_field ) { /* Advance frame pointers to the next input line. */ curframe += instride; } /* Copy a scanline. */ // blit_packed422_scanline( output, curframe, width ); quarter_blit_vertical_packed422_scanline( output, curframe + (instride*2), curframe, width ); curframe += instride * 2; output += outstride; scanline += 2; for( i = ((frame_height - 2) / 2); i; --i ) { /* Copy/interpolate a scanline. */ if( bottom_field ) { // interpolate_packed422_scanline( output, curframe, curframe - (instride*2), width ); quarter_blit_vertical_packed422_scanline( output, curframe - (instride*2), curframe, width ); } else { // blit_packed422_scanline( output, curframe, width ); if( i > 1 ) { quarter_blit_vertical_packed422_scanline( output, curframe + (instride*2), curframe, width ); } else { blit_packed422_scanline( output, curframe, width ); } } curframe += instride * 2; output += outstride; scanline += 2; } return 1;}tvtime_t *tvtime_new_context(void){ tvtime_t *tvtime; tvtime = malloc(sizeof(tvtime_t)); tvtime->pulldown_alg = PULLDOWN_NONE; tvtime->curmethod = NULL; tvtime_reset_context(tvtime); return tvtime;}void tvtime_reset_context( tvtime_t *tvtime ){ tvtime->last_topdiff = 0; tvtime->last_botdiff = 0; tvtime->pdoffset = PULLDOWN_SEQ_AA; tvtime->pderror = PULLDOWN_ERROR_WAIT; tvtime->pdlastbusted = 0; tvtime->filmmode = 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -