Make enum size same for all compilers

Enum size is defined depending upon range of values used in enum.
ATTRIBUTE_PACKED is unused.

Tested with multiple streams with diffrent configuration and
observed no change in memory footprint or encoder/decoder time.

Change-Id: I9bba27c0652ec29153cdbdac58cd3ff891a6a10a
diff --git a/aom/aom_codec.h b/aom/aom_codec.h
index fc0df5b..be3a6c9 100644
--- a/aom/aom_codec.h
+++ b/aom/aom_codec.h
@@ -98,7 +98,7 @@
 #define AOM_CODEC_ABI_VERSION (3 + AOM_IMAGE_ABI_VERSION) /**<\hideinitializer*/
 
 /*!\brief Algorithm return codes */
-typedef enum {
+enum {
   /*!\brief Operation completed without error */
   AOM_CODEC_OK,
 
@@ -150,7 +150,7 @@
    */
   AOM_CODEC_LIST_END
 
-} aom_codec_err_t;
+} UENUM1BYTE(aom_codec_err_t); /**< enum type algorithm return codes */
 
 /*! \brief Codec capabilities bitfield
  *
@@ -221,11 +221,11 @@
  * *
  * This enumeration determines the bit depth of the codec.
  */
-typedef enum aom_bit_depth {
-  AOM_BITS_8 = 8,   /**<  8 bits */
-  AOM_BITS_10 = 10, /**< 10 bits */
-  AOM_BITS_12 = 12, /**< 12 bits */
-} aom_bit_depth_t;
+enum {
+  AOM_BITS_8 = 8,              /**<  8 bits */
+  AOM_BITS_10 = 10,            /**< 10 bits */
+  AOM_BITS_12 = 12,            /**< 12 bits */
+} SENUM1BYTE(aom_bit_depth_t); /**< enum type for codec bit depth*/
 
 /*!\brief Superblock size selection.
  *
@@ -233,11 +233,11 @@
  * either be fixed at 64x64 or 128x128 pixels, or it can be dynamically
  * selected by the encoder for each frame.
  */
-typedef enum aom_superblock_size {
-  AOM_SUPERBLOCK_SIZE_64X64,   /**< Always use 64x64 superblocks. */
-  AOM_SUPERBLOCK_SIZE_128X128, /**< Always use 128x128 superblocks. */
-  AOM_SUPERBLOCK_SIZE_DYNAMIC  /**< Select superblock size dynamically. */
-} aom_superblock_size_t;
+enum {
+  AOM_SUPERBLOCK_SIZE_64X64,         /**< Always use 64x64 superblocks. */
+  AOM_SUPERBLOCK_SIZE_128X128,       /**< Always use 128x128 superblocks. */
+  AOM_SUPERBLOCK_SIZE_DYNAMIC        /**< Select superblock size dynamically. */
+} SENUM1BYTE(aom_superblock_size_t); /**<enum type super block size selection*/
 
 /*
  * Library Version Number Interface
@@ -475,7 +475,7 @@
 #endif
 
 /*!\brief OBU types. */
-typedef enum ATTRIBUTE_PACKED {
+enum {
   OBU_SEQUENCE_HEADER = 1,
   OBU_TEMPORAL_DELIMITER = 2,
   OBU_FRAME_HEADER = 3,
@@ -485,17 +485,17 @@
   OBU_REDUNDANT_FRAME_HEADER = 7,
   OBU_TILE_LIST = 8,
   OBU_PADDING = 15,
-} OBU_TYPE;
+} SENUM1BYTE(OBU_TYPE); /**< enum type for OBU*/
 
 /*!\brief OBU metadata types. */
-typedef enum {
+enum {
   OBU_METADATA_TYPE_AOM_RESERVED_0 = 0,
   OBU_METADATA_TYPE_HDR_CLL = 1,
   OBU_METADATA_TYPE_HDR_MDCV = 2,
   OBU_METADATA_TYPE_SCALABILITY = 3,
   OBU_METADATA_TYPE_ITUT_T35 = 4,
   OBU_METADATA_TYPE_TIMECODE = 5,
-} OBU_METADATA_TYPE;
+} UENUM1BYTE(OBU_METADATA_TYPE); /**< enum type for OBU metadata*/
 
 /*!\brief Returns string representation of OBU_TYPE.
  *
diff --git a/aom/aom_image.h b/aom/aom_image.h
index 245ef2c..8c6d7e3 100644
--- a/aom/aom_image.h
+++ b/aom/aom_image.h
@@ -55,7 +55,7 @@
 } aom_img_fmt_t; /**< alias for enum aom_img_fmt */
 
 /*!\brief List of supported color primaries */
-typedef enum aom_color_primaries {
+enum {
   AOM_CICP_CP_RESERVED_0 = 0,  /**< For future use */
   AOM_CICP_CP_BT_709 = 1,      /**< BT.709 */
   AOM_CICP_CP_UNSPECIFIED = 2, /**< Unspecified */
@@ -66,17 +66,17 @@
   AOM_CICP_CP_SMPTE_240 = 7,   /**< SMPTE 240 */
   AOM_CICP_CP_GENERIC_FILM =
       8, /**< Generic film (color filters using illuminant C) */
-  AOM_CICP_CP_BT_2020 = 9,      /**< BT.2020, BT.2100 */
-  AOM_CICP_CP_XYZ = 10,         /**< SMPTE 428 (CIE 1921 XYZ) */
-  AOM_CICP_CP_SMPTE_431 = 11,   /**< SMPTE RP 431-2 */
-  AOM_CICP_CP_SMPTE_432 = 12,   /**< SMPTE EG 432-1  */
-  AOM_CICP_CP_RESERVED_13 = 13, /**< For future use (values 13 - 21)  */
-  AOM_CICP_CP_EBU_3213 = 22,    /**< EBU Tech. 3213-E  */
-  AOM_CICP_CP_RESERVED_23 = 23  /**< For future use (values 23 - 255)  */
-} aom_color_primaries_t;        /**< alias for enum aom_color_primaries */
+  AOM_CICP_CP_BT_2020 = 9,           /**< BT.2020, BT.2100 */
+  AOM_CICP_CP_XYZ = 10,              /**< SMPTE 428 (CIE 1921 XYZ) */
+  AOM_CICP_CP_SMPTE_431 = 11,        /**< SMPTE RP 431-2 */
+  AOM_CICP_CP_SMPTE_432 = 12,        /**< SMPTE EG 432-1  */
+  AOM_CICP_CP_RESERVED_13 = 13,      /**< For future use (values 13 - 21)  */
+  AOM_CICP_CP_EBU_3213 = 22,         /**< EBU Tech. 3213-E  */
+  AOM_CICP_CP_RESERVED_23 = 23       /**< For future use (values 23 - 255)  */
+} UENUM1BYTE(aom_color_primaries_t); /**< alias for enum aom_color_primaries */
 
 /*!\brief List of supported transfer functions */
-typedef enum aom_transfer_characteristics {
+enum {
   AOM_CICP_TC_RESERVED_0 = 0,  /**< For future use */
   AOM_CICP_TC_BT_709 = 1,      /**< BT.709 */
   AOM_CICP_TC_UNSPECIFIED = 2, /**< Unspecified */
@@ -98,10 +98,10 @@
   AOM_CICP_TC_SMPTE_428 = 17,      /**< SMPTE ST 428 */
   AOM_CICP_TC_HLG = 18,            /**< BT.2100 HLG, ARIB STD-B67 */
   AOM_CICP_TC_RESERVED_19 = 19     /**< For future use (values 19-255) */
-} aom_transfer_characteristics_t;  /**< alias for enum aom_transfer_function */
+} UENUM1BYTE(aom_transfer_characteristics_t); /**<transfer characteristics*/
 
 /*!\brief List of supported matrix coefficients */
-typedef enum aom_matrix_coefficients {
+enum {
   AOM_CICP_MC_IDENTITY = 0,    /**< Identity matrix */
   AOM_CICP_MC_BT_709 = 1,      /**< BT.709 */
   AOM_CICP_MC_UNSPECIFIED = 2, /**< Unspecified */
@@ -120,22 +120,22 @@
   AOM_CICP_MC_CHROMAT_CL = 13, /**< Chromaticity-derived constant luminance */
   AOM_CICP_MC_ICTCP = 14,      /**< BT.2100 ICtCp */
   AOM_CICP_MC_RESERVED_15 = 15 /**< For future use (values 15-255)  */
-} aom_matrix_coefficients_t;
+} SENUM1BYTE(aom_matrix_coefficients_t); /**<enum type Matrix Coefficients*/
 
 /*!\brief List of supported color range */
-typedef enum aom_color_range {
-  AOM_CR_STUDIO_RANGE = 0, /**< Y [16..235], UV [16..240] */
-  AOM_CR_FULL_RANGE = 1    /**< YUV/RGB [0..255] */
-} aom_color_range_t;       /**< alias for enum aom_color_range */
+enum {
+  AOM_CR_STUDIO_RANGE = 0,       /**< Y [16..235], UV [16..240] */
+  AOM_CR_FULL_RANGE = 1          /**< YUV/RGB [0..255] */
+} UENUM1BYTE(aom_color_range_t); /**< alias for enum aom_color_range */
 
 /*!\brief List of chroma sample positions */
-typedef enum aom_chroma_sample_position {
-  AOM_CSP_UNKNOWN = 0,          /**< Unknown */
-  AOM_CSP_VERTICAL = 1,         /**< Horizontally co-located with luma(0, 0)*/
-                                /**< sample, between two vertical samples */
-  AOM_CSP_COLOCATED = 2,        /**< Co-located with luma(0, 0) sample */
-  AOM_CSP_RESERVED = 3          /**< Reserved value */
-} aom_chroma_sample_position_t; /**< alias for enum aom_transfer_function */
+enum {
+  AOM_CSP_UNKNOWN = 0,   /**< Unknown */
+  AOM_CSP_VERTICAL = 1,  /**< Horizontally co-located with luma(0, 0)*/
+                         /**< sample, between two vertical samples */
+  AOM_CSP_COLOCATED = 2, /**< Co-located with luma(0, 0) sample */
+  AOM_CSP_RESERVED = 3   /**< Reserved value */
+} UENUM1BYTE(aom_chroma_sample_position_t); /**<chroma sample positions*/
 
 /**\brief Image Descriptor */
 typedef struct aom_image {
diff --git a/aom/aom_integer.h b/aom/aom_integer.h
index 90263bd..1ce6ea3 100644
--- a/aom/aom_integer.h
+++ b/aom/aom_integer.h
@@ -74,6 +74,36 @@
 
 #define NELEMENTS(x) (int)(sizeof(x) / sizeof(x[0]))
 
+/*!\brief force enum to be unsigned 1 byte*/
+#define UENUM1BYTE(enumvar) \
+  ;                         \
+  typedef uint8_t enumvar
+
+/*!\brief force enum to be signed 1 byte*/
+#define SENUM1BYTE(enumvar) \
+  ;                         \
+  typedef int8_t enumvar
+
+/*!\brief force enum to be unsigned 2 byte*/
+#define UENUM2BYTE(enumvar) \
+  ;                         \
+  typedef uint16_t enumvar
+
+/*!\brief force enum to be signed 2 byte*/
+#define SENUM2BYTE(enumvar) \
+  ;                         \
+  typedef int16_t enumvar
+
+/*!\brief force enum to be unsigned 4 byte*/
+#define UENUM4BYTE(enumvar) \
+  ;                         \
+  typedef uint32_t enumvar
+
+/*!\brief force enum to be unsigned 4 byte*/
+#define SENUM4BYTE(enumvar) \
+  ;                         \
+  typedef int32_t enumvar
+
 #if defined(__cplusplus)
 extern "C" {
 #endif  // __cplusplus
diff --git a/aom/aomcx.h b/aom/aomcx.h
index 982a1f1..2787660 100644
--- a/aom/aomcx.h
+++ b/aom/aomcx.h
@@ -150,7 +150,7 @@
  *
  * \sa #aom_codec_control
  */
-enum aome_enc_control_id {
+enum {
   /*!\brief Codec control function to set which reference frame encoder can use.
    */
   AOME_USE_REFERENCE = 7,
@@ -949,18 +949,18 @@
   /*!\brief Control to select maximum height for the GF group pyramid structure
    * (valid values: 1 - 4) */
   AV1E_SET_GF_MAX_PYRAMID_HEIGHT,
-};
+} UENUM1BYTE(aome_enc_control_id); /**<enum type encoder control function*/
 
 /*!\brief aom 1-D scaling mode
  *
  * This set of constants define 1-D aom scaling modes
  */
-typedef enum aom_scaling_mode_1d {
+enum {
   AOME_NORMAL = 0,
   AOME_FOURFIVE = 1,
   AOME_THREEFIVE = 2,
   AOME_ONETWO = 3
-} AOM_SCALING_MODE;
+} UENUM1BYTE(AOM_SCALING_MODE); /**< enum type 1-D scaling mode*/
 
 /*!\brief Max number of segments
  *
@@ -1013,30 +1013,30 @@
 } aom_scaling_mode_t;
 
 /*!brief AV1 encoder content type */
-typedef enum {
+enum {
   AOM_CONTENT_DEFAULT,
   AOM_CONTENT_SCREEN,
   AOM_CONTENT_INVALID
-} aom_tune_content;
+} SENUM1BYTE(aom_tune_content); /**< anum type encoder content type*/
 
 /*!brief AV1 encoder timing info type signaling */
-typedef enum {
+enum {
   AOM_TIMING_UNSPECIFIED,
   AOM_TIMING_EQUAL,
   AOM_TIMING_DEC_MODEL
-} aom_timing_info_type_t;
+} SENUM1BYTE(aom_timing_info_type_t); /**<encoder timing info type signaling*/
 
 /*!\brief Model tuning parameters
  *
  * Changes the encoder to tune for certain types of input material.
  *
  */
-typedef enum {
+enum {
   AOM_TUNE_PSNR,
   AOM_TUNE_SSIM,
   AOM_TUNE_CDEF_DIST,
   AOM_TUNE_DAALA_DIST
-} aom_tune_metric;
+} SENUM1BYTE(aom_tune_metric); /**< enum type model tuning parameters*/
 
 /*!\cond */
 /*!\brief Encoder control function parameter type
diff --git a/aom/aomdx.h b/aom/aomdx.h
index c71eaf9..6023c9e 100644
--- a/aom/aomdx.h
+++ b/aom/aomdx.h
@@ -100,15 +100,14 @@
   int num;
 } av1_ext_ref_frame_t;
 
-/*!\enum aom_dec_control_id
- * \brief AOM decoder control functions
+/*! \brief AOM decoder control functions
  *
  * This set of macros define the control functions available for the AOM
  * decoder interface.
  *
  * \sa #aom_codec_control
  */
-enum aom_dec_control_id {
+enum {
   /** control function to get info on which reference frames were updated
    *  by the last decode
    */
@@ -253,7 +252,7 @@
   AV1D_SET_SKIP_FILM_GRAIN,
 
   AOM_DECODER_CTRL_ID_MAX,
-};
+} UENUM2BYTE(aom_dec_control_id) /**< enum type decoder control function*/;
 
 /*!\cond */
 /*!\brief AOM decoder control function parameter type
diff --git a/aom_dsp/noise_model.h b/aom_dsp/noise_model.h
index 049d5be..5e7de9b 100644
--- a/aom_dsp/noise_model.h
+++ b/aom_dsp/noise_model.h
@@ -158,10 +158,10 @@
                               int stride, uint8_t *flat_blocks);
 
 // The noise shape indicates the allowed coefficients in the AR model.
-typedef enum {
+enum {
   AOM_NOISE_SHAPE_DIAMOND = 0,
   AOM_NOISE_SHAPE_SQUARE = 1
-} aom_noise_shape;
+} UENUM1BYTE(aom_noise_shape);
 
 // The parameters of the noise model include the shape type, lag, the
 // bit depth of the input images provided, and whether the input images
@@ -202,13 +202,13 @@
 } aom_noise_model_t;
 
 /*!\brief Result of a noise model update. */
-typedef enum {
+enum {
   AOM_NOISE_STATUS_OK = 0,
   AOM_NOISE_STATUS_INVALID_ARGUMENT,
   AOM_NOISE_STATUS_INSUFFICIENT_FLAT_BLOCKS,
   AOM_NOISE_STATUS_DIFFERENT_NOISE_TYPE,
   AOM_NOISE_STATUS_INTERNAL_ERROR,
-} aom_noise_status_t;
+} UENUM1BYTE(aom_noise_status_t);
 
 /*!\brief Initializes a noise model with the given parameters.
  *
diff --git a/aom_util/aom_thread.h b/aom_util/aom_thread.h
index bda8b75..0cfb000 100644
--- a/aom_util/aom_thread.h
+++ b/aom_util/aom_thread.h
@@ -363,11 +363,11 @@
 #endif  // CONFIG_MULTITHREAD
 
 // State of the worker thread object
-typedef enum {
+enum {
   NOT_OK = 0,  // object is unusable
   OK,          // ready to work
   WORK         // busy finishing the current task
-} AVxWorkerStatus;
+} UENUM1BYTE(AVxWorkerStatus);
 
 // Function to be called by the worker thread. Takes two opaque pointers as
 // arguments (data1 and data2). Should return true on success and return false
diff --git a/av1/common/av1_loopfilter.c b/av1/common/av1_loopfilter.c
index c5a86fb..838fa29 100644
--- a/av1/common/av1_loopfilter.c
+++ b/av1/common/av1_loopfilter.c
@@ -32,7 +32,7 @@
   { 0, 1 }, { 2, 2 }, { 3, 3 }
 };
 
-typedef enum EDGE_DIR { VERT_EDGE = 0, HORZ_EDGE = 1, NUM_EDGE_DIRS } EDGE_DIR;
+enum { VERT_EDGE = 0, HORZ_EDGE = 1, NUM_EDGE_DIRS } UENUM1BYTE(EDGE_DIR);
 
 static const int mode_lf_lut[] = {
   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  // INTRA_MODES
diff --git a/av1/common/av1_txfm.h b/av1/common/av1_txfm.h
index 59d64ca..14e2c0e 100644
--- a/av1/common/av1_txfm.h
+++ b/av1/common/av1_txfm.h
@@ -110,7 +110,7 @@
 typedef void (*FwdTxfm2dFunc)(const int16_t *input, int32_t *output, int stride,
                               TX_TYPE tx_type, int bd);
 
-typedef enum TXFM_TYPE {
+enum {
   TXFM_TYPE_DCT4,
   TXFM_TYPE_DCT8,
   TXFM_TYPE_DCT16,
@@ -125,7 +125,7 @@
   TXFM_TYPE_IDENTITY32,
   TXFM_TYPES,
   TXFM_TYPE_INVALID,
-} TXFM_TYPE;
+} UENUM1BYTE(TXFM_TYPE);
 
 typedef struct TXFM_2D_FLIP_CFG {
   TX_SIZE tx_size;
diff --git a/av1/common/blockd.h b/av1/common/blockd.h
index 88afc76..69c01a1 100644
--- a/av1/common/blockd.h
+++ b/av1/common/blockd.h
@@ -38,19 +38,19 @@
 #define MAX_DIFFWTD_MASK_BITS 1
 
 // DIFFWTD_MASK_TYPES should not surpass 1 << MAX_DIFFWTD_MASK_BITS
-typedef enum ATTRIBUTE_PACKED {
+enum {
   DIFFWTD_38 = 0,
   DIFFWTD_38_INV,
   DIFFWTD_MASK_TYPES,
-} DIFFWTD_MASK_TYPE;
+} UENUM1BYTE(DIFFWTD_MASK_TYPE);
 
-typedef enum ATTRIBUTE_PACKED {
+enum {
   KEY_FRAME = 0,
   INTER_FRAME = 1,
   INTRA_ONLY_FRAME = 2,  // replaces intra-only
   S_FRAME = 3,
   FRAME_TYPES,
-} FRAME_TYPE;
+} UENUM1BYTE(FRAME_TYPE);
 
 static INLINE int is_comp_ref_allowed(BLOCK_SIZE bsize) {
   return AOMMIN(block_size_wide[bsize], block_size_high[bsize]) >= 8;
@@ -372,7 +372,7 @@
 }
 #endif
 
-enum ATTRIBUTE_PACKED mv_precision { MV_PRECISION_Q3, MV_PRECISION_Q4 };
+enum { MV_PRECISION_Q3, MV_PRECISION_Q4 } UENUM1BYTE(mv_precision);
 
 struct buf_2d {
   uint8_t *buf;
diff --git a/av1/common/entropy.h b/av1/common/entropy.h
index 991692c..41218d3 100644
--- a/av1/common/entropy.h
+++ b/av1/common/entropy.h
@@ -54,12 +54,12 @@
 
 #define BASE_CONTEXT_POSITION_NUM 12
 
-typedef enum TX_CLASS {
+enum {
   TX_CLASS_2D = 0,
   TX_CLASS_HORIZ = 1,
   TX_CLASS_VERT = 2,
   TX_CLASSES = 3,
-} TX_CLASS;
+} UENUM1BYTE(TX_CLASS);
 
 #define DCT_MAX_VALUE 16384
 #define DCT_MAX_VALUE_HIGH10 65536
diff --git a/av1/common/entropymv.h b/av1/common/entropymv.h
index fa818a2..cddc807 100644
--- a/av1/common/entropymv.h
+++ b/av1/common/entropymv.h
@@ -30,12 +30,12 @@
 
 /* Symbols for coding which components are zero jointly */
 #define MV_JOINTS 4
-typedef enum {
+enum {
   MV_JOINT_ZERO = 0,   /* Zero vector */
   MV_JOINT_HNZVZ = 1,  /* Vert zero, hor nonzero */
   MV_JOINT_HZVNZ = 2,  /* Hor zero, vert nonzero */
   MV_JOINT_HNZVNZ = 3, /* Both components nonzero */
-} MV_JOINT_TYPE;
+} UENUM1BYTE(MV_JOINT_TYPE);
 
 static INLINE int mv_joint_vertical(MV_JOINT_TYPE type) {
   return type == MV_JOINT_HZVNZ || type == MV_JOINT_HNZVNZ;
@@ -47,7 +47,7 @@
 
 /* Symbols for coding magnitude class of nonzero components */
 #define MV_CLASSES 11
-typedef enum {
+enum {
   MV_CLASS_0 = 0,   /* (0, 2]     integer pel */
   MV_CLASS_1 = 1,   /* (2, 4]     integer pel */
   MV_CLASS_2 = 2,   /* (4, 8]     integer pel */
@@ -59,7 +59,7 @@
   MV_CLASS_8 = 8,   /* (256, 512] integer pel */
   MV_CLASS_9 = 9,   /* (512, 1024] integer pel */
   MV_CLASS_10 = 10, /* (1024,2048] integer pel */
-} MV_CLASS_TYPE;
+} UENUM1BYTE(MV_CLASS_TYPE);
 
 #define CLASS0_BITS 1 /* bits at integer precision for class 0 */
 #define CLASS0_SIZE (1 << CLASS0_BITS)
@@ -91,11 +91,11 @@
   nmv_component comps[2];
 } nmv_context;
 
-typedef enum {
+enum {
   MV_SUBPEL_NONE = -1,
   MV_SUBPEL_LOW_PRECISION = 0,
   MV_SUBPEL_HIGH_PRECISION,
-} MvSubpelPrecision;
+} SENUM1BYTE(MvSubpelPrecision);
 
 #ifdef __cplusplus
 }  // extern "C"
diff --git a/av1/common/enums.h b/av1/common/enums.h
index d7c6279..24d4177 100644
--- a/av1/common/enums.h
+++ b/av1/common/enums.h
@@ -84,12 +84,12 @@
 // Profile 2.  8-bit and 10-bit 4:2:2
 //            12-bit  4:0:0, 4:2:2 and 4:4:4
 // Since we have three bits for the profiles, it can be extended later.
-typedef enum BITSTREAM_PROFILE {
+enum {
   PROFILE_0,
   PROFILE_1,
   PROFILE_2,
   MAX_PROFILES,
-} BITSTREAM_PROFILE;
+} SENUM1BYTE(BITSTREAM_PROFILE);
 
 #define LEVEL_MAJOR_BITS 3
 #define LEVEL_MINOR_BITS 2
@@ -138,7 +138,7 @@
 // 4X4, 8X8, 16X16, 32X32, 64X64, 128X128
 #define SQR_BLOCK_SIZES 6
 
-typedef enum ATTRIBUTE_PACKED {
+enum {
   PARTITION_NONE,
   PARTITION_HORZ,
   PARTITION_VERT,
@@ -152,7 +152,7 @@
   EXT_PARTITION_TYPES,
   PARTITION_TYPES = PARTITION_SPLIT + 1,
   PARTITION_INVALID = 255
-} PARTITION_TYPE;
+} UENUM1BYTE(PARTITION_TYPE);
 
 typedef char PARTITION_CONTEXT;
 #define PARTITION_PLOFFSET 4  // number of probability models per block size
@@ -160,12 +160,7 @@
 #define PARTITION_CONTEXTS (PARTITION_BLOCK_SIZES * PARTITION_PLOFFSET)
 
 // block transform size
-#if defined(_MSC_VER)
-typedef uint8_t TX_SIZE;
-enum ATTRIBUTE_PACKED {
-#else
-typedef enum ATTRIBUTE_PACKED {
-#endif
+enum {
   TX_4X4,             // 4x4 transform
   TX_8X8,             // 8x8 transform
   TX_16X16,           // 16x16 transform
@@ -189,11 +184,7 @@
   TX_SIZES = TX_4X8,  // Does NOT include rectangular transforms
   TX_SIZES_LARGEST = TX_64X64,
   TX_INVALID = 255  // Invalid transform size
-#if defined(_MSC_VER)
-};
-#else
-} TX_SIZE;
-#endif
+} UENUM1BYTE(TX_SIZE);
 
 #define TX_SIZE_LUMA_MIN (TX_4X4)
 /* We don't need to code a transform size unless the allowed size is at least
@@ -227,23 +218,23 @@
 #define MAX_TX_BLOCKS_IN_MAX_SB (1 << MAX_TX_BLOCKS_IN_MAX_SB_LOG2)
 
 // frame transform mode
-typedef enum ATTRIBUTE_PACKED {
+enum {
   ONLY_4X4,         // use only 4x4 transform
   TX_MODE_LARGEST,  // transform size is the largest possible for pu size
   TX_MODE_SELECT,   // transform specified for each block
   TX_MODES,
-} TX_MODE;
+} UENUM1BYTE(TX_MODE);
 
 // 1D tx types
-typedef enum ATTRIBUTE_PACKED {
+enum {
   DCT_1D,
   ADST_1D,
   FLIPADST_1D,
   IDTX_1D,
   TX_TYPES_1D,
-} TX_TYPE_1D;
+} UENUM1BYTE(TX_TYPE_1D);
 
-typedef enum ATTRIBUTE_PACKED {
+enum {
   DCT_DCT,            // DCT in both horizontal and vertical
   ADST_DCT,           // ADST in vertical, DCT in horizontal
   DCT_ADST,           // DCT in vertical, ADST in horizontal
@@ -261,9 +252,9 @@
   V_FLIPADST,         // FLIPADST in vertical, identity in horizontal
   H_FLIPADST,         // Identity in vertical, FLIPADST in horizontal
   TX_TYPES,
-} TX_TYPE;
+} UENUM1BYTE(TX_TYPE);
 
-typedef enum ATTRIBUTE_PACKED {
+enum {
   REG_REG,
   REG_SMOOTH,
   REG_SHARP,
@@ -273,9 +264,9 @@
   SHARP_REG,
   SHARP_SMOOTH,
   SHARP_SHARP,
-} DUAL_FILTER_TYPE;
+} UENUM1BYTE(DUAL_FILTER_TYPE);
 
-typedef enum ATTRIBUTE_PACKED {
+enum {
   // DCT only
   EXT_TX_SET_DCTONLY,
   // DCT + Identity only
@@ -289,7 +280,7 @@
   // Discrete Trig transforms w/ flip (9) + Identity (1) + 1D Hor/Ver (6)
   EXT_TX_SET_ALL16,
   EXT_TX_SET_TYPES
-} TxSetType;
+} UENUM1BYTE(TxSetType);
 
 #define IS_2D_TRANSFORM(tx_type) (tx_type < IDTX)
 
@@ -297,7 +288,7 @@
 #define EXT_TX_SETS_INTER 4  // Sets of transform selections for INTER
 #define EXT_TX_SETS_INTRA 3  // Sets of transform selections for INTRA
 
-typedef enum ATTRIBUTE_PACKED {
+enum {
   AOM_LAST_FLAG = 1 << 0,
   AOM_LAST2_FLAG = 1 << 1,
   AOM_LAST3_FLAG = 1 << 2,
@@ -306,19 +297,15 @@
   AOM_ALT2_FLAG = 1 << 5,
   AOM_ALT_FLAG = 1 << 6,
   AOM_REFFRAME_ALL = (1 << 7) - 1
-} AOM_REFFRAME;
+} UENUM1BYTE(AOM_REFFRAME);
 
-typedef enum ATTRIBUTE_PACKED {
+enum {
   UNIDIR_COMP_REFERENCE,
   BIDIR_COMP_REFERENCE,
   COMP_REFERENCE_TYPES,
-} COMP_REFERENCE_TYPE;
+} UENUM1BYTE(COMP_REFERENCE_TYPE);
 
-typedef enum ATTRIBUTE_PACKED {
-  PLANE_TYPE_Y,
-  PLANE_TYPE_UV,
-  PLANE_TYPES
-} PLANE_TYPE;
+enum { PLANE_TYPE_Y, PLANE_TYPE_UV, PLANE_TYPES } UENUM1BYTE(PLANE_TYPE);
 
 #define CFL_ALPHABET_SIZE_LOG2 4
 #define CFL_ALPHABET_SIZE (1 << CFL_ALPHABET_SIZE_LOG2)
@@ -326,24 +313,20 @@
 #define CFL_IDX_U(idx) (idx >> CFL_ALPHABET_SIZE_LOG2)
 #define CFL_IDX_V(idx) (idx & (CFL_ALPHABET_SIZE - 1))
 
-typedef enum ATTRIBUTE_PACKED {
-  CFL_PRED_U,
-  CFL_PRED_V,
-  CFL_PRED_PLANES
-} CFL_PRED_TYPE;
+enum { CFL_PRED_U, CFL_PRED_V, CFL_PRED_PLANES } UENUM1BYTE(CFL_PRED_TYPE);
 
-typedef enum ATTRIBUTE_PACKED {
+enum {
   CFL_SIGN_ZERO,
   CFL_SIGN_NEG,
   CFL_SIGN_POS,
   CFL_SIGNS
-} CFL_SIGN_TYPE;
+} UENUM1BYTE(CFL_SIGN_TYPE);
 
-typedef enum ATTRIBUTE_PACKED {
+enum {
   CFL_DISALLOWED,
   CFL_ALLOWED,
   CFL_ALLOWED_TYPES
-} CFL_ALLOWED_TYPE;
+} UENUM1BYTE(CFL_ALLOWED_TYPE);
 
 // CFL_SIGN_ZERO,CFL_SIGN_ZERO is invalid
 #define CFL_JOINT_SIGNS (CFL_SIGNS * CFL_SIGNS - 1)
@@ -360,12 +343,12 @@
 #define CFL_CONTEXT_V(js) \
   (CFL_SIGN_V(js) * CFL_SIGNS + CFL_SIGN_U(js) - CFL_SIGNS)
 
-typedef enum ATTRIBUTE_PACKED {
+enum {
   PALETTE_MAP,
   COLOR_MAP_TYPES,
-} COLOR_MAP_TYPE;
+} UENUM1BYTE(COLOR_MAP_TYPE);
 
-typedef enum ATTRIBUTE_PACKED {
+enum {
   TWO_COLORS,
   THREE_COLORS,
   FOUR_COLORS,
@@ -374,9 +357,9 @@
   SEVEN_COLORS,
   EIGHT_COLORS,
   PALETTE_SIZES
-} PALETTE_SIZE;
+} UENUM1BYTE(PALETTE_SIZE);
 
-typedef enum ATTRIBUTE_PACKED {
+enum {
   PALETTE_COLOR_ONE,
   PALETTE_COLOR_TWO,
   PALETTE_COLOR_THREE,
@@ -386,11 +369,11 @@
   PALETTE_COLOR_SEVEN,
   PALETTE_COLOR_EIGHT,
   PALETTE_COLORS
-} PALETTE_COLOR;
+} UENUM1BYTE(PALETTE_COLOR);
 
 // Note: All directional predictors must be between V_PRED and D67_PRED (both
 // inclusive).
-typedef enum ATTRIBUTE_PACKED {
+enum {
   DC_PRED,        // Average of above and left pixels
   V_PRED,         // Vertical
   H_PRED,         // Horizontal
@@ -431,11 +414,11 @@
   INTER_MODE_END = MB_MODE_COUNT,
   INTRA_MODES = PAETH_PRED + 1,  // PAETH_PRED has to be the last intra mode.
   INTRA_INVALID = MB_MODE_COUNT  // For uv_mode in inter blocks
-} PREDICTION_MODE;
+} UENUM1BYTE(PREDICTION_MODE);
 
 // TODO(ltrudeau) Do we really want to pack this?
 // TODO(ltrudeau) Do we match with PREDICTION_MODE?
-typedef enum ATTRIBUTE_PACKED {
+enum {
   UV_DC_PRED,        // Average of above and left pixels
   UV_V_PRED,         // Vertical
   UV_H_PRED,         // Horizontal
@@ -452,38 +435,38 @@
   UV_CFL_PRED,       // Chroma-from-Luma
   UV_INTRA_MODES,
   UV_MODE_INVALID,  // For uv_mode in inter blocks
-} UV_PREDICTION_MODE;
+} UENUM1BYTE(UV_PREDICTION_MODE);
 
-typedef enum ATTRIBUTE_PACKED {
+enum {
   SIMPLE_TRANSLATION,
   OBMC_CAUSAL,    // 2-sided OBMC
   WARPED_CAUSAL,  // 2-sided WARPED
   MOTION_MODES
-} MOTION_MODE;
+} UENUM1BYTE(MOTION_MODE);
 
-typedef enum ATTRIBUTE_PACKED {
+enum {
   II_DC_PRED,
   II_V_PRED,
   II_H_PRED,
   II_SMOOTH_PRED,
   INTERINTRA_MODES
-} INTERINTRA_MODE;
+} UENUM1BYTE(INTERINTRA_MODE);
 
-typedef enum ATTRIBUTE_PACKED {
+enum {
   COMPOUND_AVERAGE,
   COMPOUND_WEDGE,
   COMPOUND_DIFFWTD,
   COMPOUND_TYPES,
-} COMPOUND_TYPE;
+} UENUM1BYTE(COMPOUND_TYPE);
 
-typedef enum ATTRIBUTE_PACKED {
+enum {
   FILTER_DC_PRED,
   FILTER_V_PRED,
   FILTER_H_PRED,
   FILTER_D157_PRED,
   FILTER_PAETH_PRED,
   FILTER_INTRA_MODES,
-} FILTER_INTRA_MODE;
+} UENUM1BYTE(FILTER_INTRA_MODE);
 
 #define DIRECTIONAL_MODES 8
 #define MAX_ANGLE_DELTA 3
@@ -540,7 +523,7 @@
 typedef uint8_t TXFM_CONTEXT;
 
 // An enum for single reference types (and some derived values).
-enum ATTRIBUTE_PACKED {
+enum {
   NONE_FRAME = -1,
   INTRA_FRAME,
   LAST_FRAME,
@@ -579,7 +562,7 @@
 #define FWD_RF_OFFSET(ref) (ref - LAST_FRAME)
 #define BWD_RF_OFFSET(ref) (ref - BWDREF_FRAME)
 
-typedef enum ATTRIBUTE_PACKED {
+enum {
   LAST_LAST2_FRAMES,      // { LAST_FRAME, LAST2_FRAME }
   LAST_LAST3_FRAMES,      // { LAST_FRAME, LAST3_FRAME }
   LAST_GOLDEN_FRAMES,     // { LAST_FRAME, GOLDEN_FRAME }
@@ -593,7 +576,7 @@
   // NOTE: UNIDIR_COMP_REFS is the number of uni-directional reference pairs
   //       that are explicitly signaled.
   UNIDIR_COMP_REFS = BWDREF_ALTREF_FRAMES + 1,
-} UNIDIR_COMP_REF;
+} UENUM1BYTE(UNIDIR_COMP_REF);
 
 #define TOTAL_COMP_REFS (FWD_REFS * BWD_REFS + TOTAL_UNIDIR_COMP_REFS)
 
@@ -608,14 +591,14 @@
 // NONE_FRAME to (MODE_CTX_REF_FRAMES - 1). Hence, it is not defined as an enum.
 typedef int8_t MV_REFERENCE_FRAME;
 
-typedef enum ATTRIBUTE_PACKED {
+enum {
   RESTORE_NONE,
   RESTORE_WIENER,
   RESTORE_SGRPROJ,
   RESTORE_SWITCHABLE,
   RESTORE_SWITCHABLE_TYPES = RESTORE_SWITCHABLE,
   RESTORE_TYPES = 4,
-} RestorationType;
+} UENUM1BYTE(RestorationType);
 
 #define SUPERRES_SCALE_BITS 3
 #define SUPERRES_SCALE_DENOMINATOR_MIN (SCALE_NUMERATOR + 1)
diff --git a/av1/common/filter.h b/av1/common/filter.h
index d7ef5c9..184f5b2 100644
--- a/av1/common/filter.h
+++ b/av1/common/filter.h
@@ -37,12 +37,12 @@
   EXTRA_FILTERS = INTERP_FILTERS_ALL - SWITCHABLE_FILTERS,
 } InterpFilter;
 
-typedef enum {
+enum {
   USE_2_TAPS_ORIG = 0,  // This is used in temporal filtering.
   USE_2_TAPS,
   USE_4_TAPS,
   USE_8_TAPS,
-} SUBPEL_SEARCH_TYPE;
+} UENUM1BYTE(SUBPEL_SEARCH_TYPE);
 
 // Pack two InterpFilter's into a uint32_t: since there are at most 10 filters,
 // we can use 16 bits for each and have more than enough space. This reduces
diff --git a/av1/common/mv.h b/av1/common/mv.h
index 737d715..f3a4def 100644
--- a/av1/common/mv.h
+++ b/av1/common/mv.h
@@ -56,13 +56,13 @@
 #define WARPEDDIFF_PREC_BITS (WARPEDMODEL_PREC_BITS - WARPEDPIXEL_PREC_BITS)
 
 /* clang-format off */
-typedef enum ATTRIBUTE_PACKED {
+enum {
   IDENTITY = 0,      // identity transformation, 0-parameter
   TRANSLATION = 1,   // translational motion 2-parameter
   ROTZOOM = 2,       // simplified affine with rotation + zoom only, 4-parameter
   AFFINE = 3,        // affine, 6-parameter
   TRANS_TYPES,
-} TransformationType;
+} UENUM1BYTE(TransformationType);
 /* clang-format on */
 
 // Number of types used for global motion (must be >= 3 and <= TRANS_TYPES)
diff --git a/av1/common/onyxc_int.h b/av1/common/onyxc_int.h
index 1d85c0f..4b4209a 100644
--- a/av1/common/onyxc_int.h
+++ b/av1/common/onyxc_int.h
@@ -79,14 +79,14 @@
 #define TXCOEFF_TIMER 0
 #define TXCOEFF_COST_TIMER 0
 
-typedef enum {
+enum {
   SINGLE_REFERENCE = 0,
   COMPOUND_REFERENCE = 1,
   REFERENCE_MODE_SELECT = 2,
   REFERENCE_MODES = 3,
-} REFERENCE_MODE;
+} UENUM1BYTE(REFERENCE_MODE);
 
-typedef enum {
+enum {
   /**
    * Frame context updates are disabled
    */
@@ -96,7 +96,7 @@
    * updates based on entropy/counts in the decoded frame
    */
   REFRESH_FRAME_CONTEXT_BACKWARD,
-} REFRESH_FRAME_CONTEXT_MODE;
+} UENUM1BYTE(REFRESH_FRAME_CONTEXT_MODE);
 
 #define MFMV_STACK_SIZE 3
 typedef struct {
@@ -112,7 +112,7 @@
 // FIXME(jack.haughton@argondesign.com): This enum was originally in
 // encoder/ratectrl.h, and is encoder specific. When we move to C++, this
 // should go back there and BufferPool should be templatized.
-typedef enum {
+enum {
   INTER_NORMAL = 0,
   INTER_LOW = 1,
   INTER_HIGH = 2,
@@ -120,7 +120,7 @@
   GF_ARF_STD = 4,
   KF_STD = 5,
   RATE_FACTOR_LEVELS = 6
-} RATE_FACTOR_LEVEL;
+} UENUM1BYTE(RATE_FACTOR_LEVEL);
 
 typedef struct RefCntBuffer {
   // For a RefCntBuffer, the following are reference-holding variables:
diff --git a/av1/common/reconinter.h b/av1/common/reconinter.h
index fb825e0..b97f72c 100644
--- a/av1/common/reconinter.h
+++ b/av1/common/reconinter.h
@@ -47,7 +47,7 @@
 #define WEDGE_NONE -1
 
 // Angles are with respect to horizontal anti-clockwise
-typedef enum {
+enum {
   WEDGE_HORIZONTAL = 0,
   WEDGE_VERTICAL = 1,
   WEDGE_OBLIQUE27 = 2,
@@ -55,7 +55,7 @@
   WEDGE_OBLIQUE117 = 4,
   WEDGE_OBLIQUE153 = 5,
   WEDGE_DIRECTIONS
-} WedgeDirectionType;
+} UENUM1BYTE(WedgeDirectionType);
 
 // 3-tuple: {direction, x_offset, y_offset}
 typedef struct {
diff --git a/av1/common/scan.h b/av1/common/scan.h
index 233dc0e..f9c3392 100644
--- a/av1/common/scan.h
+++ b/av1/common/scan.h
@@ -25,14 +25,14 @@
 
 #define MAX_NEIGHBORS 2
 
-typedef enum SCAN_MODE {
+enum {
   SCAN_MODE_ZIG_ZAG,
   SCAN_MODE_COL_DIAG,
   SCAN_MODE_ROW_DIAG,
   SCAN_MODE_COL_1D,
   SCAN_MODE_ROW_1D,
   SCAN_MODES
-} SCAN_MODE;
+} UENUM1BYTE(SCAN_MODE);
 
 extern const SCAN_ORDER av1_default_scan_orders[TX_SIZES];
 extern const SCAN_ORDER av1_scan_orders[TX_SIZES_ALL][TX_TYPES];
diff --git a/av1/common/seg_common.h b/av1/common/seg_common.h
index 8c35bba..fa7894c 100644
--- a/av1/common/seg_common.h
+++ b/av1/common/seg_common.h
@@ -24,7 +24,7 @@
 #define SEG_TEMPORAL_PRED_CTXS 3
 #define SPATIAL_PREDICTION_PROBS 3
 
-typedef enum {
+enum {
   SEG_LVL_ALT_Q,       // Use alternate Quantizer ....
   SEG_LVL_ALT_LF_Y_V,  // Use alternate loop filter value on y plane vertical
   SEG_LVL_ALT_LF_Y_H,  // Use alternate loop filter value on y plane horizontal
@@ -34,7 +34,7 @@
   SEG_LVL_SKIP,        // Optional Segment (0,0) + skip mode
   SEG_LVL_GLOBALMV,
   SEG_LVL_MAX
-} SEG_LVL_FEATURES;
+} UENUM1BYTE(SEG_LVL_FEATURES);
 
 struct segmentation {
   uint8_t enabled;
diff --git a/av1/common/x86/av1_inv_txfm_ssse3.h b/av1/common/x86/av1_inv_txfm_ssse3.h
index 66bd339..7d5055d 100644
--- a/av1/common/x86/av1_inv_txfm_ssse3.h
+++ b/av1/common/x86/av1_inv_txfm_ssse3.h
@@ -72,13 +72,13 @@
 }
 
 // 1D itx types
-typedef enum ATTRIBUTE_PACKED {
+enum {
   IDCT_1D,
   IADST_1D,
   IFLIPADST_1D = IADST_1D,
   IIDENTITY_1D,
   ITX_TYPES_1D,
-} ITX_TYPE_1D;
+} UENUM1BYTE(ITX_TYPE_1D);
 
 static const ITX_TYPE_1D vitx_1d_tab[TX_TYPES] = {
   IDCT_1D,      IADST_1D,     IDCT_1D,      IADST_1D,
diff --git a/av1/decoder/obu.c b/av1/decoder/obu.c
index 9081e0d..58f7d2c 100644
--- a/av1/decoder/obu.c
+++ b/av1/decoder/obu.c
@@ -26,7 +26,7 @@
 #include "av1/decoder/obu.h"
 
 // Picture prediction structures (0-12 are predefined) in scalability metadata.
-typedef enum {
+enum {
   SCALABILITY_L1T2 = 0,
   SCALABILITY_L1T3 = 1,
   SCALABILITY_L2T1 = 2,
@@ -42,7 +42,7 @@
   SCALABILITY_S2T2h = 12,
   SCALABILITY_S2T3h = 13,
   SCALABILITY_SS = 14
-} SCALABILITY_STRUCTURES;
+} UENUM1BYTE(SCALABILITY_STRUCTURES);
 
 aom_codec_err_t aom_get_num_layers_from_operating_point_idc(
     int operating_point_idc, unsigned int *number_spatial_layers,
diff --git a/av1/encoder/context_tree.h b/av1/encoder/context_tree.h
index 7adb83b..3ced1f5 100644
--- a/av1/encoder/context_tree.h
+++ b/av1/encoder/context_tree.h
@@ -23,7 +23,7 @@
 struct AV1Common;
 struct ThreadData;
 
-typedef enum {
+enum {
   // Search all the partition types in this plane.
   SEARCH_FULL_PLANE = 0,
   // Only search none_partition coding block.
@@ -32,7 +32,7 @@
   SEARCH_SAME_PLANE = 2,
   // Skip search partition on this plane. Go split directly.
   SPLIT_PLANE = 3,
-} CB_TREE_SEARCH;
+} UENUM1BYTE(CB_TREE_SEARCH);
 
 // Structure to hold snapshot of coding context during the mode picking process
 typedef struct {
diff --git a/av1/encoder/encodeframe.c b/av1/encoder/encodeframe.c
index 03ab7a9..c7ca078 100644
--- a/av1/encoder/encodeframe.c
+++ b/av1/encoder/encodeframe.c
@@ -2348,14 +2348,14 @@
   8, 8, 10
 };
 
-typedef enum {
+enum {
   MV_ZERO = 0,
   MV_LEFT = 1,
   MV_UP = 2,
   MV_RIGHT = 3,
   MV_DOWN = 4,
   MV_INVALID
-} MOTION_DIRECTION;
+} UENUM1BYTE(MOTION_DIRECTION);
 
 static INLINE MOTION_DIRECTION get_motion_direction_fp(uint8_t fp_byte) {
   if (fp_byte & FPMB_MOTION_ZERO_MASK) {
diff --git a/av1/encoder/encodemb.c b/av1/encoder/encodemb.c
index e0c0370..d38321b 100644
--- a/av1/encoder/encodemb.c
+++ b/av1/encoder/encodemb.c
@@ -116,11 +116,11 @@
                               rate_cost, cpi->oxcf.sharpness);
 }
 
-typedef enum QUANT_FUNC {
+enum {
   QUANT_FUNC_LOWBD = 0,
   QUANT_FUNC_HIGHBD = 1,
   QUANT_FUNC_TYPES = 2
-} QUANT_FUNC;
+} UENUM1BYTE(QUANT_FUNC);
 
 static AV1_QUANT_FACADE
     quant_func_list[AV1_XFORM_QUANT_TYPES][QUANT_FUNC_TYPES] = {
diff --git a/av1/encoder/encodemb.h b/av1/encoder/encodemb.h
index 39080de..d4394cf 100644
--- a/av1/encoder/encodemb.h
+++ b/av1/encoder/encodemb.h
@@ -37,13 +37,13 @@
   int8_t enable_optimize_b;
 };
 
-typedef enum AV1_XFORM_QUANT {
+enum {
   AV1_XFORM_QUANT_FP = 0,
   AV1_XFORM_QUANT_B = 1,
   AV1_XFORM_QUANT_DC = 2,
   AV1_XFORM_QUANT_SKIP_QUANT,
   AV1_XFORM_QUANT_TYPES,
-} AV1_XFORM_QUANT;
+} UENUM1BYTE(AV1_XFORM_QUANT);
 
 void av1_encode_sb(const struct AV1_COMP *cpi, MACROBLOCK *x, BLOCK_SIZE bsize,
                    int mi_row, int mi_col, RUN_TYPE dry_run);
diff --git a/av1/encoder/encoder.h b/av1/encoder/encoder.h
index 83b26a6..eeb307b 100644
--- a/av1/encoder/encoder.h
+++ b/av1/encoder/encoder.h
@@ -59,7 +59,7 @@
   FRAME_CONTEXT fc;
 } CODING_CONTEXT;
 
-typedef enum {
+enum {
   // regular inter frame
   REGULAR_FRAME = 0,
   // alternate reference frame
@@ -73,22 +73,22 @@
   // extra alternate reference frame
   EXT_ARF_FRAME = 5,
   FRAME_CONTEXT_INDEXES
-} FRAME_CONTEXT_INDEX;
+} UENUM1BYTE(FRAME_CONTEXT_INDEX);
 
-typedef enum {
+enum {
   NORMAL = 0,
   FOURFIVE = 1,
   THREEFIVE = 2,
   ONETWO = 3
-} AOM_SCALING;
+} UENUM1BYTE(AOM_SCALING);
 
-typedef enum {
+enum {
   // Good Quality Fast Encoding. The encoder balances quality with the amount of
   // time it takes to encode the output. Speed setting controls how fast.
   GOOD
-} MODE;
+} UENUM1BYTE(MODE);
 
-typedef enum {
+enum {
   FRAMEFLAGS_KEY = 1 << 0,
   FRAMEFLAGS_GOLDEN = 1 << 1,
   FRAMEFLAGS_BWDREF = 1 << 2,
@@ -97,30 +97,30 @@
   FRAMEFLAGS_INTRAONLY = 1 << 4,
   FRAMEFLAGS_SWITCH = 1 << 5,
   FRAMEFLAGS_ERROR_RESILIENT = 1 << 6,
-} FRAMETYPE_FLAGS;
+} UENUM1BYTE(FRAMETYPE_FLAGS);
 
-typedef enum {
+enum {
   NO_AQ = 0,
   VARIANCE_AQ = 1,
   COMPLEXITY_AQ = 2,
   CYCLIC_REFRESH_AQ = 3,
   AQ_MODE_COUNT  // This should always be the last member of the enum
-} AQ_MODE;
-typedef enum {
+} UENUM1BYTE(AQ_MODE);
+enum {
   NO_DELTA_Q = 0,
   DELTA_Q_ONLY = 1,
   DELTA_Q_LF = 2,
   DELTAQ_MODE_COUNT  // This should always be the last member of the enum
-} DELTAQ_MODE;
+} UENUM1BYTE(DELTAQ_MODE);
 
-typedef enum {
+enum {
   RESIZE_NONE = 0,    // No frame resizing allowed.
   RESIZE_FIXED = 1,   // All frames are coded at the specified scale.
   RESIZE_RANDOM = 2,  // All frames are coded at a random scale.
   RESIZE_MODES
-} RESIZE_MODE;
+} UENUM1BYTE(RESIZE_MODE);
 
-typedef enum {
+enum {
   SUPERRES_NONE = 0,     // No frame superres allowed
   SUPERRES_FIXED = 1,    // All frames are coded at the specified scale,
                          // and super-resolved.
@@ -129,7 +129,7 @@
   SUPERRES_QTHRESH = 3,  // Superres scale for a frame is determined based on
                          // q_index
   SUPERRES_MODES
-} SUPERRES_MODE;
+} UENUM1BYTE(SUPERRES_MODE);
 
 typedef struct TplDepStats {
   int64_t intra_cost;
@@ -572,13 +572,13 @@
 
 #if CONFIG_INTERNAL_STATS
 // types of stats
-typedef enum {
+enum {
   STAT_Y,
   STAT_U,
   STAT_V,
   STAT_ALL,
   NUM_STAT_TYPES  // This should always be the last member of the enum
-} StatType;
+} UENUM1BYTE(StatType);
 
 typedef struct IMAGE_STAT {
   double stat[NUM_STAT_TYPES];
diff --git a/av1/encoder/firstpass.h b/av1/encoder/firstpass.h
index f0e8627..c7e7e70 100644
--- a/av1/encoder/firstpass.h
+++ b/av1/encoder/firstpass.h
@@ -86,7 +86,7 @@
   double raw_error_stdev;
 } FIRSTPASS_STATS;
 
-typedef enum {
+enum {
   KF_UPDATE = 0,
   LF_UPDATE = 1,
   GF_UPDATE = 2,
@@ -98,14 +98,14 @@
   INTNL_OVERLAY_UPDATE = 8,  // Internal Overlay Frame
   INTNL_ARF_UPDATE = 9,      // Internal Altref Frame (candidate for ALTREF2)
   FRAME_UPDATE_TYPES = 10
-} FRAME_UPDATE_TYPE;
+} UENUM1BYTE(FRAME_UPDATE_TYPE);
 
 #define FC_ANIMATION_THRESH 0.15
-typedef enum {
+enum {
   FC_NORMAL = 0,
   FC_GRAPHICS_ANIMATION = 1,
   FRAME_CONTENT_TYPES = 2
-} FRAME_CONTENT_TYPE;
+} UENUM1BYTE(FRAME_CONTENT_TYPE);
 
 typedef struct {
   unsigned char index;
diff --git a/av1/encoder/rd.h b/av1/encoder/rd.h
index 2e2a30d..f61c23d 100644
--- a/av1/encoder/rd.h
+++ b/av1/encoder/rd.h
@@ -48,7 +48,7 @@
 
 // This enumerator type needs to be kept aligned with the mode order in
 // const MODE_DEFINITION av1_mode_order[MAX_MODES] used in the rd code.
-typedef enum {
+enum {
   THR_NEARESTMV,
   THR_NEARESTL2,
   THR_NEARESTL3,
@@ -246,9 +246,9 @@
   MAX_SINGLE_REF_MODES = LAST_SINGLE_REF_MODES + 1,
   LAST_COMP_REF_MODES = THR_COMP_GLOBAL_GLOBALBA,
   MAX_COMP_REF_MODES = LAST_COMP_REF_MODES + 1
-} THR_MODES;
+} UENUM1BYTE(THR_MODES);
 
-typedef enum {
+enum {
   THR_LAST,
   THR_LAST2,
   THR_LAST3,
@@ -275,7 +275,7 @@
   THR_INTRA,
 
   MAX_REFS
-} THR_MODES_SUB8X8;
+} UENUM1BYTE(THR_MODES_SUB8X8);
 
 typedef struct RD_OPT {
   // Thresh_mult is used to set a threshold for the rd score. A higher value
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index 3195768..fc86014 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -125,14 +125,14 @@
                                   int64_t sse, int num_samples, int *rate,
                                   int64_t *dist);
 
-typedef enum {
+enum {
   MODELRD_LEGACY,
   MODELRD_CURVFIT,
   MODELRD_SUFFIT,
   MODELRD_DNN,
   MODELRD_FULLRDY,
   MODELRD_TYPES
-} ModelRdType;
+} UENUM1BYTE(ModelRdType);
 
 static model_rd_for_sb_type model_rd_sb_fn[MODELRD_TYPES] = {
   model_rd_for_sb, model_rd_for_sb_with_curvfit, model_rd_for_sb_with_surffit,
@@ -183,12 +183,12 @@
   MV_REFERENCE_FRAME ref_frame[2];
 } REF_DEFINITION;
 
-typedef enum {
+enum {
   FTXS_NONE = 0,
   FTXS_DCT_AND_1D_DCT_ONLY = 1 << 0,
   FTXS_DISABLE_TRELLIS_OPT = 1 << 1,
   FTXS_USE_TRANSFORM_DOMAIN = 1 << 2
-} FAST_TX_SEARCH_MODE;
+} UENUM1BYTE(FAST_TX_SEARCH_MODE);
 
 static int inter_block_uvrd(const AV1_COMP *cpi, MACROBLOCK *x,
                             RD_STATS *rd_stats, BLOCK_SIZE bsize,
diff --git a/av1/encoder/reconinter_enc.c b/av1/encoder/reconinter_enc.c
index 9ba2584..1a22676 100644
--- a/av1/encoder/reconinter_enc.c
+++ b/av1/encoder/reconinter_enc.c
@@ -310,7 +310,7 @@
                                InterpFilters interp_filters,
                                const WarpTypesAllowed *warp_types, int p_col,
                                int p_row, int plane, int ref,
-                               enum mv_precision precision, int x, int y,
+                               mv_precision precision, int x, int y,
                                const MACROBLOCKD *xd, int can_use_previous) {
   const int is_q4 = precision == MV_PRECISION_Q4;
   const MV mv_q4 = { is_q4 ? src_mv->row : src_mv->row * 2,
diff --git a/av1/encoder/reconinter_enc.h b/av1/encoder/reconinter_enc.h
index 10d5e8c..3476c51 100644
--- a/av1/encoder/reconinter_enc.h
+++ b/av1/encoder/reconinter_enc.h
@@ -46,7 +46,7 @@
                                InterpFilters interp_filters,
                                const WarpTypesAllowed *warp_types, int p_col,
                                int p_row, int plane, int ref,
-                               enum mv_precision precision, int x, int y,
+                               mv_precision precision, int x, int y,
                                const MACROBLOCKD *xd, int can_use_previous);
 
 // Detect if the block have sub-pixel level motion vectors
diff --git a/av1/encoder/speed_features.h b/av1/encoder/speed_features.h
index a9d9338..916e260 100644
--- a/av1/encoder/speed_features.h
+++ b/av1/encoder/speed_features.h
@@ -73,7 +73,7 @@
                               (1 << THR_ALTR) | (1 << THR_GOLD)
 };
 
-typedef enum {
+enum {
   TXFM_CODING_SF = 1,
   INTER_PRED_SF = 2,
   INTRA_PRED_SF = 4,
@@ -82,9 +82,9 @@
   RD_SKIP_SF = 32,
   RESERVE_2_SF = 64,
   RESERVE_3_SF = 128,
-} DEV_SPEED_FEATURES;
+} UENUM1BYTE(DEV_SPEED_FEATURES);
 
-typedef enum {
+enum {
   DIAMOND = 0,
   NSTEP = 1,
   HEX = 2,
@@ -92,9 +92,9 @@
   SQUARE = 4,
   FAST_HEX = 5,
   FAST_DIAMOND = 6
-} SEARCH_METHODS;
+} UENUM1BYTE(SEARCH_METHODS);
 
-typedef enum {
+enum {
   // No recode.
   DISALLOW_RECODE = 0,
   // Allow recode for KF and exceeding maximum frame bandwidth.
@@ -103,28 +103,28 @@
   ALLOW_RECODE_KFARFGF = 2,
   // Allow recode for all frames based on bitrate constraints.
   ALLOW_RECODE = 3,
-} RECODE_LOOP_TYPE;
+} UENUM1BYTE(RECODE_LOOP_TYPE);
 
-typedef enum {
+enum {
   SUBPEL_TREE = 0,
   SUBPEL_TREE_PRUNED = 1,           // Prunes 1/2-pel searches
   SUBPEL_TREE_PRUNED_MORE = 2,      // Prunes 1/2-pel searches more aggressively
   SUBPEL_TREE_PRUNED_EVENMORE = 3,  // Prunes 1/2- and 1/4-pel searches
   // Other methods to come
-} SUBPEL_SEARCH_METHODS;
+} UENUM1BYTE(SUBPEL_SEARCH_METHODS);
 
-typedef enum {
+enum {
   USE_FULL_RD = 0,
   USE_FAST_RD,
   USE_LARGESTALL,
-} TX_SIZE_SEARCH_METHOD;
+} UENUM1BYTE(TX_SIZE_SEARCH_METHOD);
 
-typedef enum {
+enum {
   NOT_IN_USE = 0,
   RELAXED_NEIGHBORING_MIN_MAX = 1
-} AUTO_MIN_MAX_MODE;
+} UENUM1BYTE(AUTO_MIN_MAX_MODE);
 
-typedef enum {
+enum {
   // Try the full image with different values.
   LPF_PICK_FROM_FULL_IMAGE,
   // Try a small portion of the image with different values.
@@ -133,9 +133,9 @@
   LPF_PICK_FROM_Q,
   // Pick 0 to disable LPF if LPF was enabled last frame
   LPF_PICK_MINIMAL_LPF
-} LPF_PICK_METHOD;
+} UENUM1BYTE(LPF_PICK_METHOD);
 
-typedef enum {
+enum {
   // Terminate search early based on distortion so far compared to
   // qp step, distortion in the neighborhood of the frame, etc.
   FLAG_EARLY_TERMINATE = 1 << 0,
@@ -152,9 +152,9 @@
 
   // Skips intra modes other than DC_PRED if the source variance is small
   FLAG_SKIP_INTRA_LOWVAR = 1 << 5,
-} MODE_SEARCH_SKIP_LOGIC;
+} UENUM1BYTE(MODE_SEARCH_SKIP_LOGIC);
 
-typedef enum {
+enum {
   NO_PRUNE = 0,
   // eliminates one tx type in vertical and horizontal direction
   PRUNE_ONE = 1,
@@ -165,7 +165,7 @@
   PRUNE_2D_ACCURATE = 3,
   // similar, but applies much more aggressive pruning to get better speed-up
   PRUNE_2D_FAST = 4,
-} TX_TYPE_PRUNE_MODE;
+} UENUM1BYTE(TX_TYPE_PRUNE_MODE);
 
 typedef struct {
   TX_TYPE_PRUNE_MODE prune_mode;
@@ -184,7 +184,7 @@
   int skip_tx_search;
 } TX_TYPE_SEARCH;
 
-typedef enum {
+enum {
   // Search partitions using RD criterion
   SEARCH_PARTITION,
 
@@ -192,9 +192,14 @@
   FIXED_PARTITION,
 
   REFERENCE_PARTITION
-} PARTITION_SEARCH_TYPE;
+} UENUM1BYTE(PARTITION_SEARCH_TYPE);
 
-typedef enum { EIGHTH_PEL, QUARTER_PEL, HALF_PEL, FULL_PEL } SUBPEL_FORCE_STOP;
+enum {
+  EIGHTH_PEL,
+  QUARTER_PEL,
+  HALF_PEL,
+  FULL_PEL
+} UENUM1BYTE(SUBPEL_FORCE_STOP);
 
 typedef struct MV_SPEED_FEATURES {
   // Motion search method (Diamond, NSTEP, Hex, Big Diamond, Square, etc).
@@ -228,35 +233,35 @@
   int interval;
 } MESH_PATTERN;
 
-typedef enum {
+enum {
   GM_FULL_SEARCH,
   GM_REDUCED_REF_SEARCH,
   GM_DISABLE_SEARCH
-} GM_SEARCH_TYPE;
+} UENUM1BYTE(GM_SEARCH_TYPE);
 
-typedef enum {
+enum {
   GM_ERRORADV_TR_0,
   GM_ERRORADV_TR_1,
   GM_ERRORADV_TR_2,
   GM_ERRORADV_TR_TYPES,
-} GM_ERRORADV_TYPE;
+} UENUM1BYTE(GM_ERRORADV_TYPE);
 
-typedef enum {
+enum {
   NO_TRELLIS_OPT,         // No trellis optimization
   FULL_TRELLIS_OPT,       // Trellis optimization in all stages
   FINAL_PASS_TRELLIS_OPT  // Trellis optimization in only the final encode pass
-} TRELLIS_OPT_TYPE;
+} UENUM1BYTE(TRELLIS_OPT_TYPE);
 
-typedef enum {
+enum {
   FULL_TXFM_RD,
   LOW_TXFM_RD,
-} TXFM_RD_MODEL;
+} UENUM1BYTE(TXFM_RD_MODEL);
 
-typedef enum {
+enum {
   JNT_COMP_ENABLED,
   JNT_COMP_SKIP_MV_SEARCH,
   JNT_COMP_DISABLED,
-} JNT_COMP_FLAG;
+} UENUM1BYTE(JNT_COMP_FLAG);
 
 typedef struct SPEED_FEATURES {
   MV_SPEED_FEATURES mv;
diff --git a/av1/encoder/temporal_filter.c b/av1/encoder/temporal_filter.c
index 8c13bef..d26a264 100644
--- a/av1/encoder/temporal_filter.c
+++ b/av1/encoder/temporal_filter.c
@@ -42,7 +42,7 @@
     int stride, int uv_block_width, int uv_block_height, int mv_row, int mv_col,
     uint8_t *pred, struct scale_factors *scale, int x, int y,
     int can_use_previous, int num_planes, MV *blk_mvs, int use_32x32) {
-  enum mv_precision mv_precision_uv;
+  mv_precision mv_precision_uv;
   int uv_stride;
   // TODO(angiebird): change plane setting accordingly
   ConvolveParams conv_params = get_conv_params(0, 0, xd->bd);
diff --git a/av1/encoder/tokenize.h b/av1/encoder/tokenize.h
index 63b505f..c80af7b 100644
--- a/av1/encoder/tokenize.h
+++ b/av1/encoder/tokenize.h
@@ -38,11 +38,11 @@
   uint8_t allow_update_cdf;
 };
 
-typedef enum {
+enum {
   OUTPUT_ENABLED = 0,
   DRY_RUN_NORMAL,
   DRY_RUN_COSTCOEFFS,
-} RUN_TYPE;
+} UENUM1BYTE(RUN_TYPE);
 
 // Note in all the tokenize functions rate if non NULL is incremented
 // with the coefficient token cost only if dry_run = DRY_RUN_COSTCOEFS,
diff --git a/common/tools_common.h b/common/tools_common.h
index df3b62b..92b287c 100644
--- a/common/tools_common.h
+++ b/common/tools_common.h
@@ -78,11 +78,11 @@
 };
 
 // Used in lightfield example.
-typedef enum OUTPUT_FORMAT {
+enum {
   YUV1D,  // 1D tile output for conformance test.
   YUV,    // Tile output in YUV format.
   NV12,   // Tile output in NV12 format.
-} OUTPUT_FORMAT;
+} UENUM1BYTE(OUTPUT_FORMAT);
 
 struct FileTypeDetectionBuffer {
   char buf[4];
diff --git a/common/video_writer.h b/common/video_writer.h
index 3e2b655..14bdc1b 100644
--- a/common/video_writer.h
+++ b/common/video_writer.h
@@ -14,7 +14,7 @@
 
 #include "common/video_common.h"
 
-typedef enum { kContainerIVF } AvxContainer;
+enum { kContainerIVF } UENUM1BYTE(AvxContainer);
 
 struct AvxVideoWriterStruct;
 typedef struct AvxVideoWriterStruct AvxVideoWriter;
diff --git a/common/webmenc.h b/common/webmenc.h
index 4cdfd68..a4aa992 100644
--- a/common/webmenc.h
+++ b/common/webmenc.h
@@ -30,13 +30,13 @@
 };
 
 /* Stereo 3D packed frame format */
-typedef enum stereo_format {
+enum {
   STEREO_FORMAT_MONO = 0,
   STEREO_FORMAT_LEFT_RIGHT = 1,
   STEREO_FORMAT_BOTTOM_TOP = 2,
   STEREO_FORMAT_TOP_BOTTOM = 3,
   STEREO_FORMAT_RIGHT_LEFT = 11
-} stereo_format_t;
+} UENUM1BYTE(stereo_format_t);
 
 // The following functions wrap libwebm's mkvmuxer. All functions return 0 upon
 // success, or -1 upon failure.
diff --git a/test/av1_txfm_test.h b/test/av1_txfm_test.h
index a181647..5a56d28 100644
--- a/test/av1_txfm_test.h
+++ b/test/av1_txfm_test.h
@@ -29,14 +29,14 @@
 #include "av1/common/enums.h"
 
 namespace libaom_test {
-typedef enum {
+enum {
   TYPE_DCT = 0,
   TYPE_ADST,
   TYPE_IDTX,
   TYPE_IDCT,
   TYPE_IADST,
   TYPE_LAST
-} TYPE_TXFM;
+} UENUM1BYTE(TYPE_TXFM);
 
 int get_txfm1d_size(TX_SIZE tx_size);
 
diff --git a/test/quantize_func_test.cc b/test/quantize_func_test.cc
index 8dee864..e0e4c6a 100644
--- a/test/quantize_func_test.cc
+++ b/test/quantize_func_test.cc
@@ -63,7 +63,7 @@
   HBD_QUAN_FUNC;
 }
 
-typedef enum { TYPE_B, TYPE_DC, TYPE_FP } QuantType;
+enum { TYPE_B, TYPE_DC, TYPE_FP } UENUM1BYTE(QuantType);
 
 using ::testing::tuple;
 typedef tuple<QuantizeFunc, QuantizeFunc, TX_SIZE, QuantType, aom_bit_depth_t>