RoI বাস্তবায়নের জন্য OEM নির্দেশিকা

Android 15 এন্ড্রয়েড ভিডিও এনকোডিং ফ্রেমওয়ার্কের মধ্যে আগ্রহের অঞ্চল (RoI) ব্যবহারকারী কনফিগারেশনকে একীভূত করার জন্য একটি প্রমিত প্রক্রিয়া প্রবর্তন করে। এই বৈশিষ্ট্যটি ভিডিও এনকোডারে ব্যবহারকারীর কনফিগারেশনগুলিকে একীভূত করতে এবং বিশ্লেষণ করার জন্য সর্বজনীন APIগুলি অফার করে RoIs-এর জন্য আরও ভাল কম্প্রেশন গুণমান সক্ষম করে৷

বাস্তবায়ন

SoC বিক্রেতা এবং OEMs FEATURE_Roi পতাকার সাথে ভিডিও এনকোডিংয়ের জন্য RoI সমর্থন নিয়ন্ত্রণ করতে পারে। যদি FEATURE_Roi সক্ষম না থাকে, তাহলে ভিডিও এনকোডার আচরণে কোনো পরিবর্তন নেই৷

ভিডিও ফ্রেমওয়ার্ক পরিবর্তন

এই বিভাগে এই বৈশিষ্ট্যটি বাস্তবায়নের জন্য প্রয়োজনীয় ভিডিও কাঠামোর পরিবর্তনের বিবরণ রয়েছে৷

কোডেক2-এ কী

অ্যান্ড্রয়েড 15-এ, কোয়ান্টাইজেশন প্যারামিটার ম্যাপ ( QP_map ) এবং আয়তক্ষেত্রাকার কনফিগারেশন ( rect ) কে RoI কনফিগারেশন প্রকার হিসাবে সংজ্ঞায়িত করা হয়েছে। অতিরিক্তভাবে, এই নতুন ধরনের সমর্থন করার জন্য কোডেক2 (C2) এ দুটি কী চালু করা হয়েছে। উভয় কী-এর ব্যবহার পাবলিক API-এর মতোই। এনকোডারের ফ্রেম লুপের মধ্যে, ইনপুট বাফার সারিবদ্ধ হওয়ার আগে, চলমান পর্যায়ে কনফিগারেশনটি গতিশীলভাবে সামঞ্জস্য করা হয়, যা নিম্নরূপ বর্ণনা করা হয়েছে:

  • একটি স্টিকি পরিস্থিতিতে, যদি বর্তমান ফ্রেমের জন্য কোন RoI কনফিগারেশন প্রদান করা না হয়, এনকোডারটি আগের ফ্রেমের মতো একই কনফিগারেশন ব্যবহার করে।

  • একটি গতিশীল পরিস্থিতিতে, RoI কনফিগারেশন প্রকারগুলি গতিশীলভাবে পরিবর্তিত হতে পারে।

C2-এর নতুন কীগুলি নিম্নলিখিত বিভাগে বর্ণনা করা হয়েছে।

kParamIndexQpOffsetMapBuffer

kParamIndexQpOffsetMapBuffer কী একটি ফ্রেমের জন্য qp-offset মানচিত্রকে সংকেত দেয়। এর মান setParameters থেকে ইনপুট প্যারামিটার PARAMETER_KEY_QP_OFFSET_MAP ব্যবহার করে সেট করা হয়েছে।

kParamIndexQpOffsetMapBuffer হল C2InfoBuffer এ একটি বাইট অ্যারে, নিম্নলিখিত বৈশিষ্ট্য সহ:

  • দৈর্ঘ্য: একটি ফ্রেমে 16x16 ব্লকের সংখ্যা।

  • মান: অ্যারের প্রতিটি মান হল -51~51 অঞ্চলে একটি 16x16 ব্লকের QP অফসেট। লক্ষ্য বৃহত্তম কোডিং ইউনিট (LCU) এর QP এনকোডার রেট কন্ট্রোল প্লাস অফসেট দ্বারা গণনা করা হয়। যদি গণনা করা ফলাফল 0~51 অঞ্চল অতিক্রম করে, তাহলে মানটি 0~51-এ কাটা হবে।

    • যদি 0: কোন QP অফসেট না হয়, QP মূল হার নিয়ন্ত্রণ দ্বারা নির্ধারিত হয়।
    • যদি অশূন্য: QP হল আসল হার নিয়ন্ত্রণ প্লাস অফসেট।
    • নেতিবাচক হলে: লক্ষ্য LCU-এ ভিডিওর গুণমান বৃদ্ধি পায়।
    • ইতিবাচক হলে: লক্ষ্য এলসিইউতে ভিডিওর গুণমান কমে যায়।
  • ব্যবহার: ব্যবহারকারীকে এই কীটি 16x16 ব্লক হিসাবে কনফিগার করতে হবে। এনকোডার এলসিইউতে 16x16 ব্লকের মান গড় করে আসল LCU আকারে কনফিগারেশন সামঞ্জস্য করে।

C2_PARAMKEY_QP_OFFSET_RECTS

C2_PARAMKEY_QP_OFFSET_RECTS কী ( coding.qp-offset-rects এ সেট করা RoI কে QpOffset-Rects হিসাবে সেট করে। এর মান সেট setParameters থেকে PARAMETER_KEY_QP_OFFSET_RECTS ইনপুট প্যারামিটার ব্যবহার করে সেট করা হয়।

এই কী সমর্থন করার জন্য, নিম্নলিখিত কাঠামো C2QpOffsetRectStruct চালু করা হয়েছে:

struct C2QpOffsetRectStruct : C2Rect {
  int32_t qpOffset;

  DEFINE_AND_DESCRIBE_C2STRUCT(QpOffsetRect)
  C2FIELD(width, "width")
  C2FIELD(height, "height")
  C2FIELD(left, "left")
  C2FIELD(top, "top")
  C2FIELD(qpOffset, "qp-offset")
}

কোথায়:

  • top এবং left : একটি আয়তক্ষেত্রাকার আকারে RoI এর স্থানাঙ্ক। LCU সীমানার সাথে সারিবদ্ধ করার জন্য RoI প্রসারিত হয়। মান প্রতিটি পিক্সেলের উপরের-বাম কোণে প্রতিনিধিত্ব করে, যেমন ((0,0), (16, 16)) একটি সম্পূর্ণ 16x16 ব্লক সংজ্ঞায়িত করে।

  • qpOffset : অ্যারের প্রতিটি মান টার্গেট rect এলাকার QP অফসেটকে প্রতিনিধিত্ব করে। এর সংজ্ঞা এবং ব্যবহার kParamIndexQpOffsetMapBuffer মানের মতই।

ম্যাপিং অ্যালগরিদম

নিম্নলিখিত টেবিলটি পাবলিক কী থেকে ভিডিও ফ্রেমওয়ার্কে ম্যাপিং দেখায়:

পাবলিক কী বা API ভিডিও ফ্রেমওয়ার্কে ম্যাপিং
PARAMETER_KEY_QP_OFFSET_MAP একটি C2InfoBuffer উদাহরণ হিসাবে kParamIndexQpOffsetMapBuffer এ মান পাস করা হয়।
PARAMETER_KEY_QP_OFFSET_RECTS মান String থেকে Struct C2QpOffsetRectStruct এ রূপান্তরিত হয় এবং C2_PARAMKEY_QP_OFFSET_RECTS এ পাস হয়।

ত্রুটি হ্যান্ডলিং

OEM বাস্তবায়ন নিম্নলিখিত ত্রুটির ক্ষেত্রে পরিচালনা করতে হবে:

ত্রুটি মামলা উদাহরণ হ্যান্ডলিং
বিক্রেতা কী এবং প্রমিত কী উভয়ই RoI চালু করতে ব্যবহৃত হয়। ব্যবহারকারী setFeatureEnabled(FEATURE_ROI) এবং RoI চালু করতে ভেন্ডর কী উভয়কেই কল করে। RoI চালু করতে হবে।
QP অফসেট সীমার মধ্যে কিন্তু SoC বিক্রেতাদের দ্বারা সমর্থিত নয়। ব্যবহারকারী QP অফসেট 12 হিসাবে সেট করে, কিন্তু SoC শুধুমাত্র 10 পর্যন্ত QP অফসেট সমর্থন করে। সমর্থিত QP অফসেট পরিসর সর্বোত্তম প্রচেষ্টা হিসাবে রেখে দেওয়া হয়েছে। মানটি SoC-এর সমর্থিত পরিসরে আটকে আছে।
একাধিক RoI কনফিগারেশন (একটি প্রমিত কী বা একটি বিক্রেতা-নির্দিষ্ট কী) একটি একক ফ্রেমে সেট করা আছে। ব্যবহারকারী ফ্রেম 1 এর জন্য প্রমিত কী এবং বিক্রেতা কী উভয়ই ব্যবহার করে। যদি উপলব্ধ হয়, ফ্রেমওয়ার্কটি প্রথম প্রমিত rect কনফিগারেশন, প্রথম প্রমিত QP_map কনফিগারেশন বা উভয়ই ধরে রাখে। প্রতিটি বিভাগে, ফ্রেমওয়ার্ক SoC-তে শুধুমাত্র একটি প্রমিত কনফিগারেশন পাঠায় এবং যদি প্রমিত কনফিগারেশন উপলব্ধ থাকে, তাহলে SoC বাস্তবায়নকে অবশ্যই বিক্রেতা কনফিগারেশন উপেক্ষা করতে হবে। যদি একাধিক কনফিগারেশন SoC-তে পাঠানো হয়, তাহলে SoC বিক্রেতাকে শুধুমাত্র একটি RoI কনফিগারেশন বজায় রাখতে হবে এবং বাকি কনফিগারেশনগুলিকে উপেক্ষা করতে হবে।

কনফিগারেশনগুলি এই অগ্রাধিকার ক্রমে বজায় রাখা হয়:

  1. মানসম্মত rect
  2. প্রমিত QP_map
  3. বিক্রেতা rect
  4. বিক্রেতা QP_map