예제 #1
0
파일: bgsubtract.c 프로젝트: c0ntrol/veejay
int bgsubtract_prepare(VJFrame *frame)
{
	if(!static_bg__ )
	{
		return 0;
	}
	
	if( auto_hist )
		vje_histogram_auto_eq( frame );

	//@ copy the iamge
	veejay_memcpy( bg_frame__[0], frame->data[0], frame->len );
	
	if( frame->ssm ) {
		veejay_memcpy( bg_frame__[1], frame->data[1], frame->len );
		veejay_memcpy( bg_frame__[2], frame->data[2], frame->len );
		bg_ssm = 1;
	}
	else {
		// if data is not subsampled, upsample chroma planes now 
		veejay_memcpy( bg_frame__[1], frame->data[1], frame->uv_len );
		veejay_memcpy( bg_frame__[2], frame->data[2], frame->uv_len );
		chroma_supersample( SSM_422_444, frame, bg_frame__ );
		bg_ssm = 1;
	}

	bg_n = 0;

	veejay_msg(2, "Subtract background: Snapped background frame (4:4:4 = %d)", bg_ssm);
	return 1;
}
예제 #2
0
파일: y4m_js.c 프로젝트: tufei/y4m.js
int y4m_js_decode_frame(y4m_cb_reader_t *r, y4m_stream_info_t *si, y4m_frame_info_t *fi, uint8_t *rgba)
{
    int i, j;
    uint8_t *ycbcr[3];
    int32_t plane_length[3];
    int32_t width;
    int32_t height;
    int32_t ret_value;

    if(NULL == r || NULL == si || NULL == fi || NULL == rgba) {
        return Y4M_UNKNOWN;
    }

    if(3 != y4m_si_get_plane_count(si)) {
        return Y4M_UNKNOWN;
    }

    width = y4m_si_get_plane_width(si, 0);
    height = y4m_si_get_plane_height(si, 0);

    for(i = 0; i < 3; ++i) {
        plane_length[i] = y4m_si_get_plane_length(si, i);
        if(NULL == (ycbcr[i] = malloc(width * height))) {
            return Y4M_UNKNOWN;
        }
    }

    ret_value = y4m_read_frame_cb(r, si, fi, ycbcr);
    if(Y4M_OK != ret_value) {
        return ret_value;
    }

    chroma_supersample(Y4M_CHROMA_420JPEG, ycbcr, width, height);
    convert_YCbCr_to_RGB(ycbcr, width * height);

    for(i = 0; i < width * height; ++i) {
        for(j = 0; j < 3; ++j) {
            rgba[i * 4 + j] = ycbcr[j][i];
        }
    }

    return Y4M_OK;
}
예제 #3
0
파일: vj-misc.c 프로젝트: flv0/veejay
int vj_perform_take_bg(veejay_t *info, VJFrame *frame, int pass)
{
	int n = 0;
	if( pass == 0 ) {
		if(frame->ssm == 1 ) {
			n += vj_effect_prepare( frame, VJ_VIDEO_EFFECT_CHAMBLEND );
			n += vj_effect_prepare( frame, VJ_IMAGE_EFFECT_CHAMELEON );
			if(n > 0 )
				return 1;
		}	
		if(frame->ssm == 0) {
			n += vj_effect_prepare( frame, VJ_IMAGE_EFFECT_BGSUBTRACT );
			n += vj_effect_prepare( frame, VJ_VIDEO_EFFECT_DIFF );
			n += vj_effect_prepare( frame, VJ_IMAGE_EFFECT_MOTIONMAP );	
			n += vj_effect_prepare( frame, VJ_IMAGE_EFFECT_CONTOUR );
			if( n > 0 )
				return 1;
		}

		if( frame->ssm == 0 ) 
		{
			chroma_supersample( info->settings->sample_mode,frame,frame->data );
			n += vj_effect_prepare( frame, VJ_VIDEO_EFFECT_CHAMBLEND );
			n += vj_effect_prepare( frame, VJ_IMAGE_EFFECT_CHAMELEON );
			frame->ssm = 1;
			return 0;
		}

		return (n > 0 ? 0: 1 );
	} else {
		if(frame->ssm == 0) {
			n += vj_effect_prepare( frame, VJ_IMAGE_EFFECT_BGSUBTRACT );
			n += vj_effect_prepare( frame, VJ_VIDEO_EFFECT_DIFF );
			n += vj_effect_prepare( frame, VJ_IMAGE_EFFECT_MOTIONMAP );	
			n += vj_effect_prepare( frame, VJ_IMAGE_EFFECT_CONTOUR );
			return 0;
		}
	}
	return 0;
}