মোশন ফটো ফরম্যাট 1.0

মোশন ফটোগুলি হল একক ফাইল যাতে একটি স্থির ফটোগ্রাফিক ছবি এবং একটি ছোট ভিডিও থাকে, যার মধ্যে অডিও রেকর্ডিং অন্তর্ভুক্ত থাকে। এই ধরনের মিডিয়া একজন ব্যবহারকারীকে একটি উচ্চ রেজোলিউশনের স্থির চিত্র দেখতে এবং সেই সাথে ভিডিও এবং শব্দের অনুভূতি এবং পরিবেশকে ক্যাপচার করার অনুমতি দেয় যেখানে ছবিটি তোলা হয়েছিল।

নির্ভরতা

নিম্নলিখিত এই স্পেসিফিকেশন জন্য আদর্শ উল্লেখ আছে:

ভূমিকা

"অবশ্যই", "অবশ্যই নয়", "প্রয়োজনীয়", "উচিত", "উচিত নয়", "প্রস্তাবিত", "মেয়", এবং "ঐচ্ছিক" এর ব্যবহার RFC2119- এ সংজ্ঞায়িত IETF মান অনুসারে।

মোশন ফটো ফরম্যাট

মোশন ফটো ফাইলগুলিতে একটি প্রাথমিক স্থির চিত্র ফাইল, JPEG , HEIC বা AVIF এর সাথে একটি মাধ্যমিক ভিডিও ফাইল যুক্ত থাকে। প্রাথমিক চিত্রটিতে ক্যামেরা XMP মেটাডেটা রয়েছে যা বর্ণনা করে যে কীভাবে স্থির চিত্র ফাইল এবং ভিডিও ফাইল সামগ্রীগুলি প্রদর্শন করা যায় এবং ধারক XMP মেটাডেটা বর্ণনা করে যে ভিডিও ফাইলের বিষয়বস্তুগুলি কীভাবে সনাক্ত করা যায়।

চিত্র ফাইলের একটি গেইনম্যাপ থাকতে পারে, যেমনটি আল্ট্রা এইচডিআর জেপিইজি- এর ক্ষেত্রে।

ফাইলের নাম প্যাটার্ন

লেখকদের নিম্নলিখিত রেগুলার এক্সপ্রেশনের সাথে মেলে এমন একটি ফাইলের নাম ব্যবহার করা উচিত:

^([^\\s\\/\\\\][^\\/\\\\]*MP)\\.(JPG|jpg|JPEG|jpeg|HEIC|heic|AVIF|avif)

প্যাটার্ন অনুসরণ না করা হলে পাঠকরা XMP মেটাডেটা, সংযুক্ত ভিডিও ফাইল বা ভিডিও বিষয়বস্তু উপেক্ষা করতে পারে।

মিডিয়া ডেটা এনকোডিং

প্রাথমিক চিত্রটিতে একটি ধারক উপাদান XMP মেটাডেটা ডিরেক্টরি রয়েছে যা ফাইল কন্টেইনারে পরবর্তী মিডিয়া ফাইলের ক্রম এবং বৈশিষ্ট্যগুলিকে সংজ্ঞায়িত করে। কন্টেইনারের প্রতিটি ফাইলের ডিরেক্টরিতে একটি সংশ্লিষ্ট মিডিয়া আইটেম রয়েছে। মিডিয়া আইটেম ফাইল কন্টেইনারে অবস্থান এবং প্রতিটি সংযুক্ত ফাইলের মৌলিক বৈশিষ্ট্য বর্ণনা করে।

XMP গুণাবলী

মোশন ফটো ফরম্যাটের জন্য অতিরিক্ত শব্দার্থিক তথ্য সংজ্ঞায়িত করতে XMP মেটাডেটার দুটি সেট ব্যবহার করা হয়। মেটাডেটা যেকোনো ক্রমে প্রদর্শিত হতে পারে।

ক্যামেরা মেটাডেটা

ক্যামেরা মেটাডেটা মোশন ফটোর প্রাথমিক চিত্র এবং ভিডিও অংশগুলি কীভাবে উপস্থাপন করতে হয় সে সম্পর্কে তথ্য এনকোড করে।

  • নামস্থান URI হল http://ns.google.com/photos/1.0/camera/
  • ডিফল্ট নেমস্পেস প্রিফিক্স হল Camera

স্থির চিত্র ফাইল XMP মেটাডেটাতে নিম্নলিখিত বৈশিষ্ট্যগুলি উপস্থিত হতে পারে:

নাম

টাইপ

বর্ণনা

Camera:MicroVideo

Camera:MicroVideoVersion

Camera:MicroVideoOffset

Camera:MicroVideoPresentation
TimestampUs

এই বৈশিষ্ট্যগুলি মাইক্রোভিডিও V1 স্পেসিফিকেশনের অংশ ছিল। সেগুলি এই স্পেসিফিকেশনে মুছে ফেলা হয়েছে এবং উপস্থিত থাকলে অবশ্যই উপেক্ষা করা উচিত৷

বিশেষ করে, ফাইলে ভিডিও ডেটা সনাক্ত করার জন্য MicroVideoOffset বৈশিষ্ট্যটি GContainer:ItemLength মান দ্বারা প্রতিস্থাপিত হয়।

Camera:MotionPhoto

Integer

0: নির্দেশ করে যে ফাইলটিকে একটি মোশন ফটো হিসাবে বিবেচনা করা উচিত নয়৷

1: নির্দেশ করে যে ফাইলটিকে একটি মোশন ফটো হিসাবে বিবেচনা করা উচিত।

অন্যান্য সমস্ত মান অনির্ধারিত এবং 0 এর সমতুল্য হিসাবে বিবেচিত হয়।

যদি মানটি শূন্য বা ঋণাত্মক হয়, তাহলে ফাইলটিকে সর্বদা একটি নন-মোশন ফটো হিসাবে বিবেচনা করা হয়, এমনকি যদি একটি ভিডিও ফাইলের সাথে যুক্ত থাকে।

যেহেতু XMP সবচেয়ে ভাল আচরণ করা সম্পাদকদের দ্বারা পরিচালিত হয়, স্থির চিত্র ফাইলগুলির এখনও এই ক্ষেত্রের জন্য 1 এর অবশিষ্ট মান থাকতে পারে যদিও সংযুক্ত ভিডিওটি ছিনতাই করা হয়েছে। এই ক্ষেত্রটি তাই নির্দিষ্ট নয় এবং পাঠকদের সর্বদা নিশ্চিত করতে হবে যে একটি ভিডিও উপস্থিত রয়েছে৷

Camera:MotionPhotoVersion

Integer

মোশন ফটোর ফাইল ফরম্যাট সংস্করণ নির্দেশ করে। এই স্পেসিফিকেশন সংস্করণ "1" সংজ্ঞায়িত করে।

Camera:MotionPhotoPresentationTimestampUs

Long

স্থির চিত্রের সাথে সম্পর্কিত ভিডিও ফ্রেমের উপস্থাপনা টাইমস্ট্যাম্প (মাইক্রোসেকেন্ডে) উপস্থাপন করে দীর্ঘ মান। আনসেট/অনির্দিষ্ট বোঝাতে মান -1 হতে পারে।

উপস্থাপনা আচরণ

Camera:MotionPhotoPresentationTimestampUs এক্সএমপি প্যাকেটে উপস্থিত না থাকলে, পাঠকদের ভিডিও ট্র্যাকের মাঝখানের টাইমস্ট্যাম্পের ঠিক আগে একটি উপস্থাপনা টাইমস্ট্যাম্প ব্যবহার করা উচিত, অর্থাৎ, ভিডিও ট্র্যাকের সময়কাল 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

ডিরেক্টরিতে শুধুমাত্র একটি প্রাথমিক চিত্র আইটেম থাকতে পারে এবং এটি অবশ্যই ডিরেক্টরির প্রথম আইটেম হতে হবে।

উপাদানের নাম

টাইপ

বর্ণনা

Directory

স্ট্রাকচারের অর্ডার করা অ্যারে

Container:Item স্ট্রাকচার যা কনটেইনারের লেআউট এবং বিষয়বস্তু নির্ধারণ করে।

আইটেম উপাদান

মিডিয়া আইটেম উপাদানগুলি অ্যাপ্লিকেশন দ্বারা প্রতিটি আইটেম কিভাবে ব্যবহার করা উচিত তা বর্ণনা করে।

  • নামস্থান URI হল http://ns.google.com/photos/1.0/container/item/
  • ডিফল্ট নামস্থান উপসর্গ হল Item

প্রথম মিডিয়া আইটেম প্রাথমিক ইমেজ হতে হবে. আইটেম MIME প্রকারের মানগুলিতে তালিকাভুক্ত MIME প্রকারগুলির একটিকে নির্দিষ্ট করে এটিতে অবশ্যই একটি Mime বৈশিষ্ট্য থাকতে হবে৷ প্রাথমিক আইটেমের দৈর্ঘ্য ফাইল কন্টেইনারের শুরুতে শুরু হওয়া MIME প্রকারের উপর ভিত্তি করে প্রাথমিক চিত্র পার্স করে নির্ধারণ করা যেতে পারে।

প্রথম মিডিয়া আইটেমটিতে একটি Padding বৈশিষ্ট্য থাকতে পারে যা এনকোড করা প্রাথমিক চিত্রের শেষ এবং পরবর্তী মিডিয়া আইটেমের শুরুর মধ্যে অতিরিক্ত প্যাডিং নির্দিষ্ট করে৷ শুধুমাত্র প্রথম মিডিয়া আইটেমে একটি Padding বৈশিষ্ট্য থাকতে পারে।

প্রতিটি মিডিয়া আইটেমে একটি Mime বৈশিষ্ট্য থাকতে হবে। সেকেন্ডারি মিডিয়া আইটেমগুলিতে অবশ্যই দৈর্ঘ্যের বৈশিষ্ট্য থাকতে হবে।

অনুক্রমিক মিডিয়া আইটেম ফাইল ধারক মধ্যে সম্পদ তথ্য ভাগ করতে পারে. প্রথম মিডিয়া আইটেম ফাইল কন্টেইনারে রিসোর্সের অবস্থান নির্ধারণ করে এবং পরবর্তী শেয়ার করা মিডিয়া আইটেমগুলির Length 0 এ সেট করা থাকে যে ক্ষেত্রে রিসোর্স ডেটা নিজেই একটি ধারক।

কন্টেইনারে মিডিয়া আইটেম সংস্থানগুলির অবস্থান পূর্ববর্তী সেকেন্ডারি আইটেম সংস্থানগুলির Length মানগুলিকে প্রাইমারি ইমেজ এনকোডিং প্লাস Padding দৈর্ঘ্যের সাথে যোগ করে নির্দিষ্ট করা হয়।

নাম গুন

টাইপ

বর্ণনা

Mime

String

প্রয়োজন। পাত্রে মিডিয়া আইটেমের MIME প্রকার নির্দেশ করে সরল স্ট্রিং৷

Semantic

String

প্রয়োজন। মিডিয়া আইটেমের অ্যাপ্লিকেশন নির্দিষ্ট অর্থ নির্দেশ করে সরল স্ট্রিং। সংজ্ঞার জন্য আইটেম শব্দার্থিক মান বিভাগ দেখুন।

Length

Integer

ভিডিও কন্টেইনার সহ সেকেন্ডারি মিডিয়া আইটেমগুলির জন্য প্রয়োজনীয়৷ আইটেমের বাইটে ধনাত্মক পূর্ণসংখ্যার দৈর্ঘ্য। মিডিয়া আইটেমগুলি তাদের আসল আকারে থাকবে বলে আশা করা হচ্ছে, কোন এনকোডিং প্রয়োগ করা হয়নি৷ দৈর্ঘ্যের মান হল ফাইলের বাইটের প্রকৃত দৈর্ঘ্য।

সেকেন্ডারি মিডিয়া আইটেমগুলির দৈর্ঘ্য 0 নির্দেশ করে যে মিডিয়া আইটেম সংস্থানটি পূর্ববর্তী মিডিয়া আইটেমের সাথে ভাগ করা হয়েছে। একটি প্রাথমিক মিডিয়া আইটেমে দৈর্ঘ্য 0 হবে বলে আশা করা হচ্ছে।

Padding

Integer

[JPEG-ভিত্তিক মোশন ফটো]

প্রাথমিক মিডিয়া আইটেম জন্য ঐচ্ছিক. এনকোড করা প্রাথমিক চিত্রের শেষ এবং পরবর্তী মিডিয়া আইটেমের শুরুর মধ্যে অতিরিক্ত প্যাডিংয়ের বাইটে একটি ধনাত্মক পূর্ণসংখ্যা দৈর্ঘ্য ধারণকারী সহজ স্ট্রিং।

[HEIC/AVIF-ভিত্তিক মোশন ফটো]

প্রাথমিক মিডিয়া আইটেম জন্য প্রয়োজন. মোশন ফটো ভিডিও ডেটা ("mpvd") বক্সের হেডার দৈর্ঘ্য 8 এর সমান একটি মান থাকতে হবে।

আইটেম:মাইম টাইপ মান

Item:Mime অ্যাট্রিবিউট প্রতিটি মিডিয়া আইটেমের MIME প্রকারকে সংজ্ঞায়িত করে।

মান

বর্ণনা

image/jpeg

JPEG ছবি

image/heic

HEIC চিত্র

image/avif

AVIF ছবি

video/mp4

MP4 ধারক

video/quicktime

MOV ধারক

আইটেম: শব্দার্থিক মান

Item:Semantic অ্যাট্রিবিউট কন্টেইনার ডিরেক্টরিতে প্রতিটি মিডিয়া আইটেমের অ্যাপ্লিকেশন নির্দিষ্ট অর্থ সংজ্ঞায়িত করে।

Value

বর্ণনা

Primary

নির্দেশ করে যে মিডিয়া আইটেমটি পাত্রে প্রাথমিক প্রদর্শনের জন্য প্রস্তুত চিত্র। একটি মোশন ফটোতে অবশ্যই এই শব্দার্থ সহ একটি এবং শুধুমাত্র একটি আইটেম অন্তর্ভুক্ত থাকতে হবে।

MotionPhoto

ইঙ্গিত করে যে মিডিয়া আইটেম হল ভিডিও ধারক। একটি মোশন ফটোতে অবশ্যই এই শব্দার্থ সহ একটি এবং শুধুমাত্র একটি আইটেম অন্তর্ভুক্ত থাকতে হবে। এই মিডিয়া আইটেমের অবস্থান ফাইলের শেষে হতে হবে। এই মিডিয়া আইটেমের বাইট বন্ধ হয়ে যাওয়ার পর অন্য কোনো বাইট রাখা যাবে না।

একটি প্রাথমিক আল্ট্রা HDR ইমেজ সহ মোশন ফটো

এই স্পেসিফিকেশনে এবং আল্ট্রা এইচডিআর ইমেজ স্পেসিফিকেশনে সংজ্ঞায়িত আইটেম শব্দার্থিক মানের নিয়ম অনুসারে, একটি প্রাথমিক আল্ট্রা এইচডিআর ইমেজ সহ মোশন ফটোতে অবশ্যই "GainMap" এর একটি আইটেম শব্দার্থ সহ একটি মিডিয়া আইটেম অন্তর্ভুক্ত করতে হবে। এছাড়াও, মোশন ফটো এনকোডিং লেখকদের অবশ্যই ভিডিও আইটেম উপাদানের আগে গেইনম্যাপ আইটেম উপাদান রাখতে হবে।

ISOBMFF-চিত্র-নির্দিষ্ট আচরণ

ISOBMFF-ভিত্তিক ছবিগুলির (যেমন, HEIC এবং AVIF ছবি) সহ মোশন ফটোগুলির অবশ্যই একটি কাঠামো থাকতে হবে যাতে ফাইলের ছবির অংশটি একটি শীর্ষ-স্তরের "মোশন ফটো ভিডিও ডেটা" বক্সের সাথে সমাপ্ত হয়, যা সিনট্যাক্টিক বর্ণনা ভাষার শব্দার্থবিদ্যা ব্যবহার করে বর্ণিত হয়। 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" এর বিশেষ মান অনুমোদিত নয়৷ ( আইএসও/আইইসি 14496-12:2015 দেখুন: 4.2 বক্স প্রসারিত ক্লাসের আকারের সংজ্ঞার জন্য।)

ISOBMFF ইমেজের XMP-কে অবশ্যই প্রাথমিক মিডিয়া আইটেমের প্যাডিং অ্যাট্রিবিউট মানকে মোশন ফটো ভিডিও ডেটা বক্স হেডারের বাইটের আকারের সমান হিসাবে সংজ্ঞায়িত করতে হবে, সেটি হল আকার এবং নাম শিরোনাম।

একটি নমুনা HEIC-ভিত্তিক মোশন ফটোর জন্য এই বক্সের কাঠামোর চিত্র 1 দেখুন:

একটি HEIC মোশন ফাইলে উপাদানগুলির বিন্যাস প্রদর্শন করে লাইন ডায়াগ্রাম

চিত্র 1. একটি একক HEIC মোশন ফটো ফাইলের মধ্যে একটি নমুনা HEIC চিত্রের শীর্ষ-স্তরের বাক্সগুলির চিত্রণ৷ মনে রাখবেন যে বাক্সগুলির ক্রম বেশিরভাগই শুধুমাত্র চিত্রের জন্য (দয়া করে HEIF বা ভিডিও ফাইলগুলি কীভাবে তৈরি করতে হয় তার প্রাসঙ্গিক মান দেখুন); তবুও, সমস্ত HEIC ইমেজ ফাইলের বাক্সের পরে "mpvd" বক্সটি আসতে হবে৷

ভিডিও ধারক বিষয়বস্তু

ভিডিও কনটেইনার ফাইল যা প্রাথমিক চিত্রের সাথে সংযুক্ত করা হয়েছে অন্তত একটি প্রাথমিক ভিডিও ট্র্যাক অন্তর্ভুক্ত করতে হবে৷ এই ট্র্যাকটি প্রয়োজনীয় এবং এতে AVC , HEVC , বা AV1 তে এনকোড করা ভিডিও রয়েছে৷ প্রাথমিক ভিডিও ফ্রেম রেজোলিউশন অনির্ধারিত। ভিডিও রঙের স্থান, স্থানান্তর ফাংশন, এবং বিট-গভীরতা পরিবর্তিত হতে পারে। উদাহরণস্বরূপ, এসডিআর ভিডিওগুলিতে একটি 8-বিট বিট গভীরতা, BT.709 রঙের স্থান, একটি sRGB স্থানান্তর ফাংশন থাকতে পারে। অথবা, HDR ভিডিওতে 10-বিট বিট গভীরতা, BT.2100 কালার স্পেস এবং HDR মেটাডেটা এবং মেটাডেটা ট্র্যাক সহ HLG বা PQ ট্রান্সফার ফাংশন থাকতে পারে।

ভিডিও কন্টেইনার ফাইলে একটি ঐচ্ছিক উচ্চ রেজোলিউশনের সেকেন্ডারি ভিডিও ট্র্যাক থাকতে পারে। JPEG বা HEIC ছবিতে এনকোড করা প্রাথমিক স্থির চিত্রের প্রতিস্থাপন প্রদর্শন করতে পাঠকদের এর বিষয়বস্তু ব্যবহার করা উচিত। এই ট্র্যাকে AVC, HEVC, বা AV1-এ এনকোড করা কম ফ্রেম রেট ভিডিও থাকতে পারে। সেকেন্ডারি ভিডিও ফ্রেম রেজোলিউশন অনির্ধারিত।

এটি প্রত্যাশিত যে সেকেন্ডারি ভিডিও ট্র্যাকের সমস্ত ফ্রেমে প্রাথমিক ভিডিও ট্র্যাকের সাথে সম্পর্কিত ফ্রেম রয়েছে৷ প্রাইমারি এবং সেকেন্ডারি ভিডিও ট্র্যাকগুলিতে সংশ্লিষ্ট ফ্রেমের প্রতিটি জোড়া অভিন্ন উপস্থাপনা টাইমস্ট্যাম্প থাকা উচিত। প্রাইমারি ট্র্যাক ফ্রেম ছাড়াই যদি কোনও সেকেন্ডারি ট্র্যাক ফ্রেম থাকে, তাহলে দর্শকরা সেই সেকেন্ডারি ভিডিও ট্র্যাকের প্রতিনিধি থাম্বনেইল হিসাবে নিকটতম মিলিত উপস্থাপনা টাইমস্ট্যাম্প সহ একটি প্রাথমিক ট্র্যাক ফ্রেম নির্বাচন করার চেষ্টা করতে পারেন৷

ভিডিও কন্টেইনার ফাইলে একটি ঐচ্ছিক 16-বিট মনো বা স্টেরিও অডিও ট্র্যাক থাকতে পারে 44kHz, 48 kHz, বা AAC-তে এনকোড করা 96 kHz। প্রাথমিক ভিডিও ট্র্যাক প্রদর্শিত হলে পাঠকদের এই অডিও ট্র্যাকটি উপস্থাপন করা উচিত।

সেকেন্ডারি ভিডিও ট্র্যাক, যদি উপস্থিত থাকে, সর্বদা প্রাথমিক ভিডিও ট্র্যাকের পরে আসা উচিত৷ অন্যান্য ট্র্যাক সংক্রান্ত অন্য কোন আদেশ সীমাবদ্ধতা আছে. প্রাথমিক ভিডিও ট্র্যাকের একটি ট্র্যাক সূচক যেকোন সেকেন্ডারি ভিডিও ট্র্যাকের চেয়ে কম থাকতে হবে৷ অর্থাৎ, যদি প্রাইমারি ভিডিও ট্র্যাকের একটি ট্র্যাক নম্বর 2 থাকে, তাহলে যেকোনো সেকেন্ডারি ভিডিও ট্র্যাকের একটি ট্র্যাক নম্বর 3-এর থেকে বেশি বা সমান থাকতে হবে৷

মেশিন ইন্টেলিজেন্স স্কোরিং সহ ভিডিও মেটাডেটা ট্র্যাক

লেখকরা ঐচ্ছিকভাবে "মেটা" টাইপ সহ ভিডিও কন্টেইনার ফাইলে একটি মেটাডেটা ট্র্যাক যোগ করতে পারে। মেটাডেটা ট্র্যাকের ঠিক একটি নমুনা থাকা উচিত যাতে "সিনট্যাক্স"-এ বর্ণিত বিন্যাসে একটি বাইট স্ট্রীম থাকে।

যদি মেটাডেটা ট্র্যাকটি উপস্থিত থাকে, তাহলে ট্র্যাকের নমুনা বর্ণনা টেবিল এন্ট্রি (অর্থাৎ, "mdia.minf.stbl.stsd" এ অবস্থিত "stsd" বক্সটি "trak" বক্সের সাথে সম্পর্কিত) একটি একক পরমাণু থাকতে হবে যা নির্দেশ করে পাঠ্য মেটাডেটা নমুনা এন্ট্রি - (অর্থাৎ, একটি "মেট" বাক্স)। "mett" বাক্সে অবশ্যই "application/motionphoto-image-meta" এর সমান একটি MIME ধরনের স্ট্রিং থাকতে হবে।

বাক্য গঠন

যদি এই মেটাডেটা ট্র্যাকটি সংজ্ঞায়িত করা হয়, তাহলে এর বিষয়বস্তুতে অবশ্যই এই 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