লুক-আপ টেবিলের সাথে রঙ সঠিক (LUTs)

অ্যান্ড্রয়েড ডিভাইসগুলোতে HDR সক্ষমতার ভিন্নতার কারণে HDR ডিসপ্লে আউটপুট খণ্ডিত হতে পারে। এই অসামঞ্জস্যতা দূর করার জন্য ডিজাইন করা একটি নতুন কালার কারেকশন সমাধান হলো লুক-আপ টেবিল (LUT)। প্রতিটি ডিভাইসের জন্য একটি অনির্ধারিত কালার কারেকশন পদ্ধতির উপর নির্ভর না করে, কালার কারেকশনের একটি নির্দিষ্ট উপায় নির্ধারণ করার মাধ্যমে এই অসামঞ্জস্যতা সমাধান করা হয়।

এসডিকে পূর্বশর্ত

LUT প্রয়োগ করতে হলে আপনার SDK ভার্সন অবশ্যই 36 বা তার বেশি হতে হবে।

একটি LUT প্রয়োগ করুন

একটি SurfaceControl এ LUT প্রয়োগ করতে এই ধাপগুলো অনুসরণ করুন:

  1. একটি DisplayLuts ইনস্ট্যান্স তৈরি করুন।
  2. LUT ডেটা বাফার, LUT ডাইমেনশন এবং LUT-এর স্যাম্পলিং কী ব্যবহার করে DisplayLuts.Entry ইনস্ট্যান্স তৈরি করুন। আরও তথ্যের জন্য, LutProperties ডকুমেন্টেশন দেখুন।
  3. LUT এন্ট্রি সেট করতে DisplayLuts#set(DisplayLuts.Entry luts) অথবা DisplayLuts#set(DisplayLuts.Entry first, DisplayLuts.Entry second) কল করুন। ফ্রেমওয়ার্কটি 1D LUT, 3D LUT, অথবা 1D এবং 3D LUT-এর সংমিশ্রণ সমর্থন করে।
  4. লেয়ারটিতে LUT-গুলো প্রয়োগ করতে SurfaceControl.Transaction#setLuts কল করুন।

কোটলিন

val sc = SurfaceControl.Builder().build()
val luts = DisplayLuts()
val entry = DisplayLuts.Entry(
    floatArrayOf(0.5f, 0.5f, 0.5f, 0.5f),
    LutProperties.ONE_DIMENSION,
    LutProperties.SAMPLING_KEY_MAX_RGB
)
luts.set(entry)
SurfaceControl.Transaction().setLuts(sc, luts).apply()

জাভা

SurfaceControl sc = new SurfaceControl.Builder().build();
DisplayLuts luts = new DisplayLuts();
DisplayLuts.Entry entry = new DisplayLuts.Entry(
  new float[]{0.5f, 0.5f, 0.5f, 0.5f},
  LutProperties.ONE_DIMENSION,
  LutProperties.SAMPLING_KEY_MAX_RGB
);
luts.set(entry);
new SurfaceControl.Transaction().setLuts(sc, luts).apply();

আপনি ডিভাইসটির LUT প্রোপার্টিগুলো বুঝতে এবং হার্ডওয়্যার কম্পোজার নির্বাচিত LUT-টি হ্যান্ডেল করতে পারবে কিনা তা নির্ধারণ করতে OverlayProperties.getLutProperties() ব্যবহার করতে পারেন।