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); }
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; }