aboutsummaryrefslogtreecommitdiff
path: root/src/image_type_recognition/image_type_recognition_lite.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/image_type_recognition/image_type_recognition_lite.cc')
-rw-r--r--src/image_type_recognition/image_type_recognition_lite.cc21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/image_type_recognition/image_type_recognition_lite.cc b/src/image_type_recognition/image_type_recognition_lite.cc
index c56c1c0..cb32e1c 100644
--- a/src/image_type_recognition/image_type_recognition_lite.cc
+++ b/src/image_type_recognition/image_type_recognition_lite.cc
@@ -201,6 +201,25 @@ class ArwTypeChecker : public TypeChecker {
}
};
+// Canon RAW (CR3 extension).
+class Cr3TypeChecker : public TypeChecker {
+ public:
+ static constexpr size_t kSignatureOffset = 4;
+ static constexpr const char* kSignature = "ftypcrx ";
+
+ virtual RawImageTypes Type() const { return kCr3Image; }
+
+ virtual size_t RequestedSize() const {
+ return kSignatureOffset + strlen(kSignature);
+ }
+
+ // Checks for the ftyp box w/ brand 'crx '.
+ virtual bool IsMyType(const RangeCheckedBytePtr& source) const {
+ RangeCheckedBytePtr limited_source = LimitSource(source);
+ return IsSignatureMatched(limited_source, kSignatureOffset, kSignature);
+ }
+};
+
// Canon RAW (CR2 extension).
class Cr2TypeChecker : public TypeChecker {
public:
@@ -749,6 +768,7 @@ class TypeCheckerList {
TypeCheckerList() {
// Add all supported RAW type checkers here.
checkers_.push_back(new ArwTypeChecker());
+ checkers_.push_back(new Cr3TypeChecker());
checkers_.push_back(new Cr2TypeChecker());
checkers_.push_back(new CrwTypeChecker());
checkers_.push_back(new DcrTypeChecker());
@@ -841,6 +861,7 @@ bool IsRaw(const RawImageTypes type) {
// Raw image types
case kArwImage:
+ case kCr3Image:
case kCr2Image:
case kCrwImage:
case kDcrImage: