예제 #1
0
파일: yuv4mpeg.c 프로젝트: c0ntrol/veejay
int y4m_read_frame(int fd, const y4m_stream_info_t *si, 
		   y4m_frame_info_t *fi, uint8_t * const *frame)
{
  y4m_cb_reader_t r;
  set_cb_reader_from_fd(&r, &fd);
  return y4m_read_frame_cb(&r, si, fi, frame);
}
예제 #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;
}