รูปภาพเคลื่อนไหวเป็นไฟล์เดี่ยวที่มีภาพนิ่งและ วิดีโอสั้นๆ ซึ่งมีไฟล์บันทึกเสียง สื่อประเภทนี้ช่วยให้ผู้ใช้ ดูภาพนิ่งความละเอียดสูง รวมถึงวิดีโอและเสียงเพื่อบันทึก ความรู้สึกและบรรยากาศที่ถ่ายภาพ
การขึ้นต่อกัน
ต่อไปนี้เป็นการอ้างอิงเชิงบรรทัดฐานสำหรับข้อกำหนดนี้
- คีย์เวิร์ดที่ใช้ใน RFCs เพื่อระบุระดับความต้องการ
- T.81 (09/92) การบีบอัดดิจิทัลและการเขียนโค้ดโทนสีต่อเนื่อง รูปภาพ (JPEG)
- ISO/IEC 23008-12:2022 การเขียนโค้ดและการส่งสื่อประสิทธิภาพสูงใน สภาพแวดล้อมที่แตกต่างกัน ส่วนที่ 12: รูปแบบไฟล์ภาพ (HEIC)
- รูปแบบไฟล์ภาพ AV1 (AVIF) (AVIF)
- รูปแบบรูปภาพ HDR พิเศษ เวอร์ชัน 1.0 | นักพัฒนาแอป Android (Ultra HDR)
- ข้อกำหนดเกี่ยวกับ ISO 16684-1:2011(E) XMP ส่วนที่ 1 (XMP)
- ข้อกําหนดของ Adobe XMP ส่วนที่ 3 พื้นที่เก็บข้อมูลในไฟล์ (XMP)
- ISO/IEC 14496-10:2022 การเขียนโค้ดวัตถุภาพและเสียง ส่วนที่ 10: ขั้นสูง การเขียนโค้ดวิดีโอ (AVC)
- ISO/IEC 23008-2:2023 การเขียนโค้ดและการส่งสื่อประสิทธิภาพสูงใน สภาพแวดล้อมที่แตกต่างกัน ส่วนที่ 2: วิดีโอประสิทธิภาพสูง การเขียนโค้ด (HEVC)
- AV1 Bitstream และ ข้อกำหนดของกระบวนการถอดรหัส (AV1)
- ISO/IEC 14496-1:2010 การเขียนโค้ดของออบเจ็กต์ภาพและเสียง - ระบบ
- รูปแบบไฟล์สื่อ ISO/IEC 14496-12:2015 (ISOBMFF)
- ISO/IEC 14496-14:2020 การเขียนโค้ดวัตถุภาพและเสียง ส่วนที่ 14: ไฟล์ MP4 รูปแบบ (MP4)
- รูปแบบไฟล์ Apple QuickTime (MOV)
ข้อมูลเบื้องต้น
การใช้คำว่า "ต้อง" "ต้องไม่" "ต้องระบุ" "ควร" "ไม่ควร" "แนะนำ" "อาจ" และ "ไม่บังคับ" เป็นไปตามมาตรฐาน IETF ที่กำหนดไว้ใน RFC2119
รูปแบบรูปภาพเคลื่อนไหว
ไฟล์ Motion Photo จะประกอบด้วยไฟล์ภาพนิ่งหลัก JPEG, HEIC หรือ AVIF พร้อม ไฟล์วิดีโอรองมาต่อท้าย รูปภาพหลักมีกล้อง XMP ข้อมูลเมตาที่อธิบายวิธีแสดงเนื้อหาของไฟล์ภาพนิ่งและไฟล์วิดีโอ และข้อมูลเมตาของคอนเทนเนอร์ XMP ที่อธิบายวิธีค้นหาเนื้อหาไฟล์วิดีโอ
ไฟล์ภาพอาจมี Yieldmap ดังเช่นกรณีที่มี Ultra HDR JPEG
รูปแบบของชื่อไฟล์
ผู้เขียนควรใช้ชื่อไฟล์ที่ตรงกับนิพจน์ทั่วไปต่อไปนี้
^([^\\s\\/\\\\][^\\/\\\\]*MP)\\.(JPG|jpg|JPEG|jpeg|HEIC|heic|AVIF|avif)
ผู้อ่านอาจไม่สนใจข้อมูลเมตาของ XMP, ไฟล์วิดีโอที่ต่อท้าย หรือวิดีโอ ถ้าไม่มีการติดตามรูปแบบ
การเข้ารหัสข้อมูลสื่อ
อิมเมจหลักมีองค์ประกอบคอนเทนเนอร์ XMP ไดเรกทอรีข้อมูลเมตาที่กำหนดลำดับและคุณสมบัติของสื่อต่อมา ในคอนเทนเนอร์ของไฟล์ แต่ละไฟล์ในคอนเทนเนอร์มีสื่อที่สอดคล้องกัน รายการในไดเรกทอรี รายการสื่อจะอธิบายตำแหน่งในไฟล์ และคุณสมบัติพื้นฐานของไฟล์ที่เชื่อมต่อกันแต่ละไฟล์
แอตทริบิวต์ XMP
มีการใช้ข้อมูลเมตา XMP 2 ชุดเพื่อระบุข้อมูลความหมายเพิ่มเติมสำหรับ รูปแบบรูปภาพเคลื่อนไหว ข้อมูลเมตาอาจปรากฏโดยเรียงลำดับอย่างไรก็ได้
ข้อมูลเมตาของกล้อง
ข้อมูลเมตาของกล้องเข้ารหัสข้อมูลเกี่ยวกับวิธีนำเสนอรูปภาพหลักและ ส่วนที่เป็นวิดีโอของรูปภาพเคลื่อนไหว
- URI ของเนมสเปซคือ
http://ns.google.com/photos/1.0/camera/
- คำนำหน้าเนมสเปซเริ่มต้นคือ
Camera
แอตทริบิวต์ต่อไปนี้อาจปรากฏในข้อมูลเมตา XMP ของไฟล์ภาพนิ่ง:
ชื่อ |
ประเภท |
คำอธิบาย |
|
พร็อพเพอร์ตี้เหล่านี้เป็นส่วนหนึ่งของข้อกำหนด Microvideo V1 ค่าเหล่านี้จะถูกลบในข้อกำหนดเฉพาะนี้ และระบบจะไม่นำมาพิจารณาหากมี กล่าวอย่างเจาะจงคือ ระบบจะแทนที่แอตทริบิวต์ |
|
|
|
0: ระบุว่าไม่ควรถือว่าไฟล์เป็นรูปภาพเคลื่อนไหว 1: ระบุว่าควรถือว่าไฟล์เป็นรูปภาพเคลื่อนไหว ค่าอื่นๆ ทั้งหมดจะไม่มีการระบุและจะถือว่าเทียบเท่ากับ 0 ถ้าค่าเป็น 0 หรือค่าลบ จะถือว่าไฟล์เป็น ไม่ใช่รูปภาพเคลื่อนไหว แม้ว่าในความเป็นจริงจะมีวิดีโอต่อท้ายไฟล์แล้วก็ตาม เนื่องจาก XMP จะมีบรรณาธิการที่ทำหน้าที่ดีส่วนใหญ่ ไฟล์ภาพนิ่ง อาจยังคงมีค่าเหลืออยู่เป็น 1 สําหรับช่องนี้ แม้ว่าส่วนต่อท้าย วิดีโอถูกตัด ดังนั้นฟิลด์นี้จึงไม่ใช่ค่าที่แน่นอน และผู้อ่าน ต้องยืนยันทุกครั้งว่ามีวิดีโอ |
|
|
ระบุเวอร์ชันรูปแบบไฟล์ของรูปภาพเคลื่อนไหว ข้อกำหนดนี้ระบุเวอร์ชัน "1" |
|
|
ค่ายาวที่แสดงการประทับเวลาการนำเสนอ (เป็นไมโครวินาที) ของเฟรมวิดีโอที่สอดคล้องกับภาพนิ่งของรูปภาพ ค่าอาจเป็น -1 เพื่อแสดงถึงไม่ได้ตั้งค่า/ไม่ระบุ |
ลักษณะการทำงานของงานนำเสนอ
หากไม่มี Camera:MotionPhotoPresentationTimestampUs
ในแพ็กเก็ต XMP
ผู้อ่านควรใช้การประทับเวลาการนำเสนอที่อยู่ก่อนการประทับเวลาทันที
ที่อยู่ใกล้กับช่วงกลางของแทร็กวิดีโอมากที่สุด ซึ่งก็คือระยะเวลาของแทร็กวิดีโอ
หารด้วย 2
หากมี Camera:MotionPhotoPresentationTimestampUs
ในแพ็กเก็ต XMP และ
มี "application/motionphoto-image-meta"
อยู่ในวิดีโอ
ต้องปรากฏใน primaryImageFrameScoreDescr
presentationTimestampUs
ของแทร็กนั้น หาก Camera:MotionPhotoPresentationTimestampUs
ไม่ใช่
อยู่ในแพ็กเก็ต XMP และมีแทร็กข้อมูลเมตาอยู่ จากนั้นค่าใน
แทร็กข้อมูลเมตาต้องเป็น -1
องค์ประกอบคอนเทนเนอร์
องค์ประกอบคอนเทนเนอร์จะเข้ารหัสเป็นข้อมูลเมตา XMP ของรูปภาพหลัก และ กำหนดไดเรกทอรีของรายการสื่อในคอนเทนเนอร์ รายการสื่อต้องเป็น ที่อยู่ในไฟล์คอนเทนเนอร์ในลำดับเดียวกับองค์ประกอบรายการสื่อใน ไดเรกทอรีและต้องมีการบีบอัดไว้แน่น
- URI ของเนมสเปซคือ
http://ns.google.com/photos/1.0/container/
- คำนำหน้าเนมสเปซเริ่มต้นคือ
Container
ไดเรกทอรีอาจมีรายการรูปภาพหลักได้เพียงรายการเดียวและต้องเป็นรายการแรก รายการในไดเรกทอรี
ชื่อองค์ประกอบ |
ประเภท |
คำอธิบาย |
|
อาร์เรย์ตามลำดับของโครงสร้าง |
อาร์เรย์ของโครงสร้าง |
องค์ประกอบรายการ
องค์ประกอบรายการสื่อจะอธิบายว่าแอปพลิเคชันควรใช้แต่ละรายการอย่างไร
- URI ของเนมสเปซคือ
http://ns.google.com/photos/1.0/container/item/
- คำนำหน้าเนมสเปซเริ่มต้นคือ
Item
สื่อรายการแรกต้องเป็นรูปภาพหลัก ต้องมี Mime
ที่ระบุหนึ่งในประเภท MIME ของรูปภาพที่แสดงอยู่ในประเภท MIME ของรายการ
ค่า ความยาวของรายการหลักอาจกำหนดได้ด้วยการแยกวิเคราะห์รายการหลัก
ตามประเภท MIME ของรูปภาพ โดยเริ่มจากจุดเริ่มต้นของที่เก็บไฟล์
สื่อรายการแรกอาจมีแอตทริบิวต์ Padding
ที่ระบุรายการเพิ่มเติม
ระยะห่างจากขอบระหว่างจุดสิ้นสุดของรูปภาพหลักที่เข้ารหัสและส่วนเริ่มต้นของ
รายการสื่อถัดไป เฉพาะสื่อรายการแรกเท่านั้นที่มีแอตทริบิวต์ Padding
สื่อแต่ละรายการต้องมีแอตทริบิวต์ Mime
รายการสื่อรองจะต้อง
ก็มีแอตทริบิวต์ความยาวด้วย
รายการสื่อตามลำดับอาจแชร์ข้อมูลทรัพยากรภายในคอนเทนเนอร์ไฟล์
โดยรายการสื่อรายการแรกจะเป็นตัวกำหนดตำแหน่งของทรัพยากรในคอนเทนเนอร์ไฟล์
และรายการสื่อที่แชร์ถัดไปมีการตั้งค่า Length
เป็น 0 ในกรณีที่
ข้อมูลทรัพยากร
ก็คือคอนเทนเนอร์
ตำแหน่งของทรัพยากรรายการสื่อในคอนเทนเนอร์จะพิจารณาจากการสรุป
ค่า Length
ของทรัพยากรรายการรองก่อนหน้าจนถึงความยาวของ
การเข้ารหัสรูปภาพหลักบวก Padding
หากระบุ
ชื่อแอตทริบิวต์ |
ประเภท |
คำอธิบาย |
|
|
(ต้องระบุ) สตริงแบบง่ายที่ระบุประเภท MIME ของรายการสื่อในคอนเทนเนอร์ |
|
|
(ต้องระบุ) สตริงง่ายๆ ที่ระบุความหมายเฉพาะแอปพลิเคชันของรายการสื่อ ดูคำจำกัดความของส่วนค่าความหมายของรายการ |
|
|
ต้องระบุสำหรับรายการสื่อรอง รวมถึงคอนเทนเนอร์วิดีโอ ความยาวจำนวนเต็มบวกในหน่วยไบต์ของรายการ รายการสื่อต้องอยู่ในรูปแบบเดิมโดยไม่ใช้การเข้ารหัส ค่าความยาวคือความยาวจริงของไบต์ในไฟล์ ความยาว 0 ในรายการสื่อรองบ่งบอกว่ามีการแชร์ทรัพยากรของรายการสื่อกับรายการสื่อก่อนหน้า ความยาวควรเป็น 0 ในรายการสื่อหลัก |
|
|
[รูปภาพเคลื่อนไหวแบบ JPEG] ไม่บังคับสำหรับรายการสื่อหลัก สตริงทั่วไปที่มีความยาวจำนวนเต็มบวกในหน่วยไบต์ของ ระยะห่างจากขอบระหว่างจุดสิ้นสุดของรูปภาพหลักที่เข้ารหัสและส่วนเริ่มต้นของ รายการสื่อถัดไป [รูปภาพเคลื่อนไหวที่ใช้ HEIC/AVIF] ต้องระบุสำหรับรายการสื่อหลัก ต้องมีค่าเท่ากับ 8 และ ความยาวส่วนหัวของรูปภาพเคลื่อนไหว กล่องข้อมูลวิดีโอ ("mpvd") |
รายการ:ค่าประเภท Mime
แอตทริบิวต์ Item:Mime
กำหนดประเภท MIME ของรายการสื่อแต่ละรายการ
ค่า |
คำอธิบาย |
|
รูปภาพ JPEG |
|
รูปภาพ HEIC |
|
รูปภาพ AVIF |
|
คอนเทนเนอร์ MP4 |
|
คอนเทนเนอร์ MOV |
รายการ:ค่าความหมาย
แอตทริบิวต์ Item:Semantic
กำหนดความหมายเฉพาะแอปพลิเคชันของแต่ละ
รายการสื่อในไดเรกทอรีคอนเทนเนอร์
|
คำอธิบาย |
|
บ่งบอกว่ารายการสื่อเป็นอิมเมจหลักที่พร้อมให้รับชมในคอนเทนเนอร์ รูปภาพเคลื่อนไหวต้องมี 1 รายการเท่านั้นในรายการที่มีความหมายนี้ |
|
บ่งบอกว่ารายการสื่อเป็นคอนเทนเนอร์วิดีโอ รูปภาพเคลื่อนไหวต้องมี 1 รายการเท่านั้นในรายการที่มีความหมายนี้ ตำแหน่งของรายการสื่อนี้ต้องอยู่ที่ส่วนท้ายของไฟล์ ห้ามวางไบต์อื่นๆ หลังจากสิ้นสุดไบต์ของรายการสื่อนี้ |
ภาพเคลื่อนไหวที่เป็นรูปภาพ Ultra HDR หลัก
ตามกฎมูลค่าเชิงความหมายของรายการที่ระบุไว้ในข้อกำหนดนี้และใน
ข้อกำหนดของรูปภาพ Ultra HDR
รูปภาพเคลื่อนไหวที่มีรูปภาพ Ultra HDR หลักต้องมีรายการสื่อที่มี
ความหมายของรายการ "GainMap"
นอกจากนี้ ผู้เขียนที่เข้ารหัสรูปภาพเคลื่อนไหวจะต้องวาง
เอลิเมนต์รายการ Getmap ก่อนองค์ประกอบรายการวิดีโอ
ลักษณะการทำงานที่เจาะจงรูปภาพ ISOBMFF
รูปภาพเคลื่อนไหว แบบ ISOBMFF รูปภาพ (เช่น รูปภาพ HEIC และ AVIF) ต้องมีโครงสร้างตามนั้น บางส่วนของไฟล์จะสิ้นสุดโดยมี "ข้อมูลวิดีโอ Motion Photo Video" ระดับบนสุด กล่อง ได้อธิบายโดยใช้ความหมายของภาษาคำอธิบายไวยากรณ์ที่ระบุไว้ใน ISO/IEC 14496-1:2010(E) ข้อ 8
// Box as defined in ISO/IEC 14496-12:2015: 4.2
aligned(8) class MotionPhotoVideoData extends Box('mpvd') {
bit(8) data[];
}
โดยที่ "ข้อมูล" จะมีไบต์ของวิดีโอทั้งหมด ค่าพิเศษของ "0" ไม่อนุญาตให้ใช้กับขนาดของกล่องข้อมูลวิดีโอ Motion Photo Video (โปรดดู ISO/IEC 14496-12:2015: 4.2 สำหรับคำจำกัดความของขนาดคลาสที่ ขยายในกล่อง)
XMP ของรูปภาพ ISOBMFF ต้องกำหนด Padding ของรายการสื่อหลักด้วย เท่ากับขนาดเป็นไบต์ของวิดีโอ Motion Photo Video ส่วนหัวของกล่องข้อมูล ซึ่งก็คือส่วนหัวขนาดและชื่อ
โปรดดูรูปที่ 1 ที่แสดงโครงสร้างกล่องนี้สำหรับตัวอย่างการเคลื่อนที่ที่ใช้ HEIC รูปภาพ:
รูปที่ 1 ภาพกล่องระดับบนสุดของตัวอย่างรูปภาพ HEIC ภายใน ไฟล์รูปภาพเคลื่อนไหว HEIC ไฟล์เดียวได้ โปรดทราบว่าส่วนใหญ่ คำสั่งซื้อกล่องมีไว้เพื่อ ภาพประกอบเท่านั้น (โปรดดูมาตรฐานที่เกี่ยวข้องในการสร้าง ไฟล์ HEIF หรือวิดีโอ อย่างไรก็ตาม "mpvd" กล่องต้องอยู่หลัง HEIC ทั้งหมด ของไฟล์ภาพ
เนื้อหาคอนเทนเนอร์วิดีโอ
ไฟล์คอนเทนเนอร์วิดีโอที่ต่อท้ายรูปภาพหลักต้องมีแอตทริบิวต์ต่อไปนี้ แทร็กวิดีโอหลักอย่างน้อย 1 แทร็ก แทร็กนี้ต้องใช้และมีวิดีโอที่เข้ารหัส ใน AVC HEVC หรือ AV1 ไม่ได้ระบุความละเอียดของเฟรมวิดีโอหลัก พื้นที่สีวิดีโอ โอน และความลึกของบิตอาจแตกต่างกันไป เช่น วิดีโอ SDR อาจมีบิตแบบ 8 บิต ความลึก พื้นที่สี BT.709 พร้อมฟังก์ชันการถ่ายโอน sRGB หรือวิดีโอ HDR อาจมีลักษณะดังนี้ มีความลึกของบิต 10 บิต พื้นที่สี BT.2100 และการถ่ายโอน HLG หรือ PQ พร้อมกับข้อมูลเมตา HDR และแทร็กข้อมูลเมตา
ไฟล์คอนเทนเนอร์วิดีโออาจมีความละเอียดสำรองที่สูงกว่า 1 รายการ (ไม่บังคับ) แทร็กวิดีโอ ผู้อ่านควรใช้เนื้อหาเพื่อแสดงข้อความทดแทนสำหรับ ภาพนิ่งหลักที่เข้ารหัสในรูปแบบ JPEG หรือ HEIC แทร็กนี้อาจประกอบด้วย วิดีโอที่มีอัตราเฟรมต่ำลงซึ่งเข้ารหัสเป็น AVC, HEVC หรือ AV1 เฟรมวิดีโอรอง ไม่ได้กำหนดความละเอียด
คาดว่าเฟรมทั้งหมดในแทร็กวิดีโอรองจะมี เฟรมที่เกี่ยวข้องในแทร็กวิดีโอหลัก แต่ละคู่ของ เฟรมในแทร็กวิดีโอหลักและรองควรมีการนำเสนอแบบเดียวกัน ของคุณ หากมีเฟรมแทร็กรองที่ไม่มีเฟรมหลักที่เกี่ยวข้อง เฟรมแทร็กหลัก ผู้ดูสามารถลองเลือกเฟรมหลักที่มี การจับคู่การประทับเวลาการนำเสนอเป็นภาพขนาดย่อที่ใช้เป็นตัวแทนสำหรับสิ่งนั้น แทร็กวิดีโอรอง
ไฟล์คอนเทนเนอร์วิดีโออาจมีเสียงแบบโมโนหรือสเตอริโอ 16 บิต 1 ชุด ติดตามที่ 44kHz, 48 kHz หรือ 96 kHz แบบเข้ารหัส AAC ผู้อ่านควรนำเสนอข้อมูลนี้ แทร็กเสียงเมื่อแสดงแทร็กวิดีโอหลัก
หากมีแทร็กวิดีโอรอง ควรอยู่หลังแทร็กหลักเสมอ แทร็กวิดีโอ ไม่มีข้อจำกัดในการจัดลำดับอื่นๆ เกี่ยวกับแทร็กอื่นๆ แทร็กวิดีโอหลักต้องมีดัชนีแทร็กต่ำกว่าของแทร็กวิดีโอรอง แทร็กวิดีโอ กล่าวคือ หากแทร็กวิดีโอหลักมีแทร็กหมายเลข 2 จะมี แทร็กวิดีโอรองต้องมีหมายเลขแทร็กมากกว่าหรือเท่ากับ 3
การติดตามข้อมูลเมตาของวิดีโอด้วยการให้คะแนนของแมชชีนเลิร์นนิงอัจฉริยะ
ผู้เขียนอาจเพิ่มแทร็กข้อมูลเมตาลงในไฟล์คอนเทนเนอร์วิดีโอด้วย พิมพ์ "meta" แทร็กข้อมูลเมตาควรมีตัวอย่างเพียงรายการเดียวที่มี ไบต์สตรีมในรูปแบบที่อธิบายไว้ใน "ไวยากรณ์"
หากมีแทร็กข้อมูลเมตา จะมีรายการตารางคำอธิบายตัวอย่างสำหรับฟิลด์ (เช่น กล่อง "stsd" ที่ "mdia.minf.stbl.stsd" เมื่อเทียบกับ "แทร็ก" ) ต้องมีอะตอมเดี่ยวที่แสดงตัวอย่างข้อมูลเมตาข้อความ รายการ - (เช่น ช่อง "Mett") "Mett" ต้องมีสตริงประเภท MIME เท่ากับ ไปที่ "application/motionphoto-image-meta"
วากยสัมพันธ์
หากมีการกำหนดแทร็กข้อมูลเมตานี้ เนื้อหาจะต้องประกอบด้วยไบต์สตรีม
เพื่อให้เป็นไปตามข้อกำหนด MotionPhotoMetadataDescriptor
นี้ ตามที่อธิบาย
ในที่นี้โดยใช้ความหมายของภาษาคำอธิบายไวยากรณ์ที่ระบุไว้ใน
ISO/IEC 14496-1:2010(E) ข้อ 8
// BaseDescriptor as defined in ISO/IEC 14496-1:2010(E): 7.2.2.2
abstract aligned(8) expandable((1<<28) - 1) class BaseDescriptor
: bit(8) tag=0 {
// Empty. To be filled by classes extending this class.
}
// Score data for a frame.
class MotionPhotoFrameScoreDescriptor extends BaseDescriptor
: bit(8) tag=MotionPhotoFrameScoreDescrTag {
// The frame's score in the range [0, 1].
float(32) score;
// The frame's presentation timestamp in microseconds.
int(64) presentationTimestampUs;
}
// Score data for a track.
class MotionPhotoTrackScoreDescriptor extends BaseDescriptor
: bit(8) tag=MotionPhotoTrackScoreDescrTag {
// The number of scored frames in the track.
unsigned int(32) numScoredFrames;
// The track's frames' score data. They must be in ascending order with
// respect to the presentation timestamp.
MotionPhotoFrameScoreDescriptor trackFrameScoreDescr[numScoredHighResFrames];
}
// Score data for a motion photo.
class MotionPhotoScoreDescriptor extends BaseDescriptor
: bit(8) tag=MotionPhotoScoreDescrTag {
// Machine-intelligence model version used to calculate the scores. Writers
// using a scoring model should set this field to 1 or greater. Writers not
// using any scoring model should set this field to 0.
unsigned int(32) modelVersion;
// The primary image's frame score data.
MotionPhotoFrameScoreDescriptor primaryImageFrameScoreDescr;
// The high-resolution motion photo frames' score data.
MotionPhotoTrackScoreDescriptor highResTrackScoreDescr;
}
// Flag data for a track.
class MotionPhotoTrackFlagsDescriptor extends BaseDescriptor
: bit(8) tag=MotionPhotoTrackFlagDescrTag {
// Set to true to indicate the video frames have been stabilized and don't
// require readers of the track to apply any further stabilization.
bit(1) isStabilized;
}
// Flags for a motion photo.
class MotionPhotoFlagsDescriptor extends BaseDescriptor
: bit(8) tag=MotionPhotoFlagDescrTag {
// The low-resolution motion photo track's flag data.
MotionPhotoTrackFlagDescriptor lowResTrackFlagsDescr;
// The high-resolution motion photo track's flag data.
MotionPhotoTrackFlagDescriptor highResTrackFlagsDescr;
}
// Container for motion photo metadata, like stabilization indicators and
// quality scoring.
class MotionPhotoMetadataDescriptor extends BaseDescriptor
: bit(8) tag=MotionPhotoMetadataDescrTag {
// Scoring data for the still and high-res frames.
MotionPhotoScoreDescriptor motionPhotoScoreDescr;
// Flags for the low-res and high-res frames.
MotionPhotoFlagDescriptor motionPhotoFlagDescr;
}
// Class tags for MotionPhotoData using the "User Private" tag space 0xC0-0xFE
// for descriptors defined in ISO/IEC 14496-1:2010(E): 7.2.2.1, Table 1.
// 0xC0 MotionPhotoMetadataDescrTag
// 0xC1 MotionPhotoScoreDescrTag
// 0xC2 MotionPhotoTrackScoreDescrTag
// 0xC3 MotionPhotoFrameScoreDescrTag
// 0xC4 MotionPhotoFlagsDescrTag
// 0xC5 MotionPhotoTrackFlagDescrTag