* Convert yuv image inside AImage into ANativeWindow_Buffer * ANativeWindow_Buffer format is guaranteed to be * WINDOW_FORMAT_RGBX_8888 * WINDOW_FORMAT_RGBA_8888 * @param buf a ANativeWindow_Buffer instance, destination of * image conversion * @param image a AImage instance, source of image conversion. * it will be deleted via {@link AImage_d
| 207 | * it will be deleted via {@link AImage_delete} |
| 208 | */ |
| 209 | bool ImageReader::DisplayImage(ANativeWindow_Buffer* buf, AImage* image) { |
| 210 | ASSERT(buf->format == WINDOW_FORMAT_RGBX_8888 || |
| 211 | buf->format == WINDOW_FORMAT_RGBA_8888, |
| 212 | "Not supported buffer format"); |
| 213 | |
| 214 | int32_t srcFormat = -1; |
| 215 | AImage_getFormat(image, &srcFormat); |
| 216 | ASSERT(AIMAGE_FORMAT_YUV_420_888 == srcFormat, "Failed to get format"); |
| 217 | int32_t srcPlanes = 0; |
| 218 | AImage_getNumberOfPlanes(image, &srcPlanes); |
| 219 | ASSERT(srcPlanes == 3, "Is not 3 planes"); |
| 220 | |
| 221 | switch (presentRotation_) { |
| 222 | case 0: |
| 223 | PresentImage(buf, image); |
| 224 | break; |
| 225 | case 90: |
| 226 | PresentImage90(buf, image); |
| 227 | break; |
| 228 | case 180: |
| 229 | PresentImage180(buf, image); |
| 230 | break; |
| 231 | case 270: |
| 232 | PresentImage270(buf, image); |
| 233 | break; |
| 234 | default: |
| 235 | ASSERT(0, "NOT recognized display rotation: %d", presentRotation_); |
| 236 | } |
| 237 | |
| 238 | AImage_delete(image); |
| 239 | |
| 240 | return true; |
| 241 | } |
| 242 | |
| 243 | /* |
| 244 | * PresentImage() |