DecoderFlags.h (2182B)
1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 2 /* This Source Code Form is subject to the terms of the Mozilla Public 3 * License, v. 2.0. If a copy of the MPL was not distributed with this 4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 5 6 #ifndef mozilla_image_DecoderFlags_h 7 #define mozilla_image_DecoderFlags_h 8 9 #include "mozilla/TypedEnumBits.h" 10 11 namespace mozilla { 12 namespace image { 13 14 /** 15 * Flags that influence decoder behavior. Note that these flags *don't* 16 * influence the logical content of the surfaces that the decoder generates, so 17 * they're not in a factor in SurfaceCache lookups and the like. These flags 18 * instead either influence which surfaces are generated at all or the tune the 19 * decoder's behavior for a particular scenario. 20 */ 21 enum class DecoderFlags : uint8_t { 22 FIRST_FRAME_ONLY = 1 << 0, 23 IS_REDECODE = 1 << 1, 24 IMAGE_IS_TRANSIENT = 1 << 2, 25 ASYNC_NOTIFY = 1 << 3, 26 27 /** 28 * By default, a surface is considered substitutable. That means callers are 29 * willing to accept a less than ideal match to display. If a caller requires 30 * a specific size and won't accept alternatives, then this flag should be 31 * set. 32 */ 33 CANNOT_SUBSTITUTE = 1 << 4, 34 35 #ifdef MOZ_AV1 36 // The flags below are stored in RasterImage to allow a decoded image to 37 // remain consistent in whether it is animated or not. 38 39 // Set according to the "image.avif.sequence.enabled" preference. 40 AVIF_SEQUENCES_ENABLED = 1 << 5, 41 // Set according to the 42 // "image.avif.sequence.animate_avif_major_branded_images" preference. 43 AVIF_ANIMATE_AVIF_MAJOR = 1 << 6, 44 #endif 45 46 /** 47 * By default, we don't count how many animated frames there are in an image, 48 * as that would require us to iterate over the entire buffer for some image 49 * formats. If the caller requires a full accounting of how many frames there 50 * are. 51 */ 52 COUNT_FRAMES = 1 << 7, 53 }; 54 MOZ_MAKE_ENUM_CLASS_BITWISE_OPERATORS(DecoderFlags) 55 56 /** 57 * @return the default set of decode flags. 58 */ 59 inline DecoderFlags DefaultDecoderFlags() { return DecoderFlags(); } 60 61 } // namespace image 62 } // namespace mozilla 63 64 #endif // mozilla_image_DecoderFlags_h