1ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian/*
2ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian *  Copyright 2011 The LibYuv Project Authors. All rights reserved.
3ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian *
4ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian *  Use of this source code is governed by a BSD-style license
5ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian *  that can be found in the LICENSE file in the root of the source
6ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian *  tree. An additional intellectual property rights grant can be found
7ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian *  in the file PATENTS. All contributing project authors may
8ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian *  be found in the AUTHORS file in the root of the source tree.
9ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian */
10ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
11ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
12ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#include "libyuv/video_common.h"
13ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
14ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#ifdef __cplusplus
15ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramaniannamespace libyuv {
16ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianextern "C" {
17ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#endif
18ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
19ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#define ARRAY_SIZE(x) (int)(sizeof(x) / sizeof(x[0]))
20ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
21ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianstruct FourCCAliasEntry {
22ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  uint32 alias;
23ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  uint32 canonical;
24ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian};
25ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
26ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianstatic const struct FourCCAliasEntry kFourCCAliases[] = {
27ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  {FOURCC_IYUV, FOURCC_I420},
28ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  {FOURCC_YU16, FOURCC_I422},
29ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  {FOURCC_YU24, FOURCC_I444},
30ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  {FOURCC_YUYV, FOURCC_YUY2},
31ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  {FOURCC_YUVS, FOURCC_YUY2},  // kCMPixelFormat_422YpCbCr8_yuvs
32ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  {FOURCC_HDYC, FOURCC_UYVY},
33ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  {FOURCC_2VUY, FOURCC_UYVY},  // kCMPixelFormat_422YpCbCr8
34ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  {FOURCC_JPEG, FOURCC_MJPG},  // Note: JPEG has DHT while MJPG does not.
35ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  {FOURCC_DMB1, FOURCC_MJPG},
367ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  {FOURCC_BA81, FOURCC_BGGR},  // deprecated.
37ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  {FOURCC_RGB3, FOURCC_RAW },
38ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  {FOURCC_BGR3, FOURCC_24BG},
39ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  {FOURCC_CM32, FOURCC_BGRA},  // kCMPixelFormat_32ARGB
40ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  {FOURCC_CM24, FOURCC_RAW },  // kCMPixelFormat_24RGB
41ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  {FOURCC_L555, FOURCC_RGBO},  // kCMPixelFormat_16LE555
42ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  {FOURCC_L565, FOURCC_RGBP},  // kCMPixelFormat_16LE565
43ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  {FOURCC_5551, FOURCC_RGBO},  // kCMPixelFormat_16LE5551
44ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian};
45ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// TODO(fbarchard): Consider mapping kCMPixelFormat_32BGRA to FOURCC_ARGB.
46ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian//  {FOURCC_BGRA, FOURCC_ARGB},  // kCMPixelFormat_32BGRA
47ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
48ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianLIBYUV_API
49ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianuint32 CanonicalFourCC(uint32 fourcc) {
50ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  int i;
51ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  for (i = 0; i < ARRAY_SIZE(kFourCCAliases); ++i) {
52ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    if (kFourCCAliases[i].alias == fourcc) {
53ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      return kFourCCAliases[i].canonical;
54ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    }
55ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  }
56ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  // Not an alias, so return it as-is.
57ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  return fourcc;
58ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian}
59ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
60ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#ifdef __cplusplus
61ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian}  // extern "C"
62ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian}  // namespace libyuv
63ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#endif
64ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
65