int RecVideoOverlay:: overlay(VFrame *out) { VFrame *in = vframe; int xx = x * scale, yy = y * scale; int w = in->get_w(), h = in->get_h(); int ww = w * scale, hh = h * scale; BC_WindowBase::get_cmodels()->transfer(out->get_rows(), in->get_rows(), out->get_y(), out->get_u(), out->get_v(), in->get_y(), in->get_u(), in->get_v(), 0, 0, w, h, xx, yy, ww, hh, in->get_color_model(), out->get_color_model(), 0, in->get_bytes_per_line(), out->get_bytes_per_line()); return ticks > 0 && --ticks == 0 ? 1 : 0; }
int FileDB::read_frame(VFrame *frame) { int sw, sh; mdb->attachDb(); int result = seq_no < clip_size ? 0 : 1; if( !result ) { int n = seq_no++; if( !n ) { frame_id = -1; } else if( n >= prefix_size ) n += suffix_offset; result = mdb->get_sequences(clip_id, n); if( !result && mdb->timeline_sequence_no() == n ) frame_id = mdb->timeline_frame_id(); } VFrame *fp = frame->get_w() == swidth && frame->get_h() == sheight && frame->get_color_model() == BC_YUV420P ? frame : !vframe ? (vframe = new VFrame(swidth,sheight,BC_YUV420P)) : vframe; if( !result ) { if( frame_id < 0 ) memset(fp->get_y(), 0, swidth*sheight); else result = mdb->get_image(frame_id, fp->get_y(), sw,sh); } //printf("seq_no=%d, result=%d\n",seq_no,result); mdb->detachDb(); if( !result ) { memset(fp->get_u(),0x80,swidth/2 * sheight/2); memset(fp->get_v(),0x80,swidth/2 * sheight/2); } if( !result && fp == vframe ) { BC_CModels::transfer(frame->get_rows(), fp->get_rows(), frame->get_y(), frame->get_u(), frame->get_v(), fp->get_y(), fp->get_u(), fp->get_v(), 0, 0, fp->get_w(), fp->get_h(), 0, 0, frame->get_w(), frame->get_h(), fp->get_color_model(), frame->get_color_model(), 0, fp->get_bytes_per_line(), swidth); } return result; }