| 82 | } |
| 83 | |
| 84 | void SeparateYuyvBufferDecoder::decode(StreamingBuffer p_buffer) { |
| 85 | uint8_t *y_dst = (uint8_t *)y_image_data.ptrw(); |
| 86 | uint8_t *uv_dst = (uint8_t *)cbcr_image_data.ptrw(); |
| 87 | uint8_t *src = (uint8_t *)p_buffer.start; |
| 88 | uint8_t *y0_src = src + component_indexes[0]; |
| 89 | uint8_t *y1_src = src + component_indexes[1]; |
| 90 | uint8_t *u_src = src + component_indexes[2]; |
| 91 | uint8_t *v_src = src + component_indexes[3]; |
| 92 | |
| 93 | for (int i = 0; i < width * height; i += 2) { |
| 94 | *y_dst++ = *y0_src; |
| 95 | *y_dst++ = *y1_src; |
| 96 | *uv_dst++ = *u_src; |
| 97 | *uv_dst++ = *v_src; |
| 98 | |
| 99 | y0_src += 4; |
| 100 | y1_src += 4; |
| 101 | u_src += 4; |
| 102 | v_src += 4; |
| 103 | } |
| 104 | |
| 105 | if (y_image.is_valid()) { |
| 106 | y_image->set_data(width, height, false, Image::FORMAT_L8, y_image_data); |
| 107 | } else { |
| 108 | y_image.instantiate(width, height, false, Image::FORMAT_RGB8, y_image_data); |
| 109 | } |
| 110 | if (cbcr_image.is_valid()) { |
| 111 | cbcr_image->set_data(width, height, false, Image::FORMAT_L8, cbcr_image_data); |
| 112 | } else { |
| 113 | cbcr_image.instantiate(width, height, false, Image::FORMAT_RGB8, cbcr_image_data); |
| 114 | } |
| 115 | |
| 116 | camera_feed->set_ycbcr_images(y_image, cbcr_image); |
| 117 | } |
| 118 | |
| 119 | YuyvToGrayscaleBufferDecoder::YuyvToGrayscaleBufferDecoder(CameraFeed *p_camera_feed) : |
| 120 | AbstractYuyvBufferDecoder(p_camera_feed) { |
no test coverage detected