From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: DRM Atomic property for color-space conversion Date: Thu, 16 Mar 2017 19:36:56 +0200 Message-ID: <20170316173656.GI31595@intel.com> References: <20170131123329.GB24500@e106950-lin.cambridge.arm.com> <20170131151546.GT31595@intel.com> <20170131155541.GF11506@e106950-lin.cambridge.arm.com> <20170316140725.GF31595@intel.com> <0cff6bab-7593-d3d2-f3b5-71dc21669dab@intel.com> <20170316143059.GG31595@intel.com> <20170316143721.GN6268@e110455-lin.cambridge.arm.com> <20170316155501.GA25006@e106950-lin.cambridge.arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTPS id 473076EB72 for ; Thu, 16 Mar 2017 17:37:01 +0000 (UTC) Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: "Sharma, Shashank" Cc: Local user for Liviu Dudau , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, mihail.atanassov@arm.com, linux-media@vger.kernel.org List-Id: dri-devel@lists.freedesktop.org T24gVGh1LCBNYXIgMTYsIDIwMTcgYXQgMDc6MDU6MTJQTSArMDIwMCwgU2hhcm1hLCBTaGFzaGFu ayB3cm90ZToKPiBSZWdhcmRzCj4gCj4gU2hhc2hhbmsKPiAKPiAKPiBPbiAzLzE2LzIwMTcgNTo1 NSBQTSwgQnJpYW4gU3RhcmtleSB3cm90ZToKPiA+IEhpLAo+ID4KPiA+IE9uIFRodSwgTWFyIDE2 LCAyMDE3IGF0IDA1OjE0OjA3UE0gKzAyMDAsIFNoYXJtYSBTaGFzaGFuayB3cm90ZToKPiA+PiBS ZWdhcmRzCj4gPj4KPiA+PiBTaGFzaGFuawo+ID4+Cj4gPj4KPiA+PiBPbiAzLzE2LzIwMTcgNDoz NyBQTSwgTG9jYWwgdXNlciBmb3IgTGl2aXUgRHVkYXUgd3JvdGU6Cj4gPj4+IE9uIFRodSwgTWFy IDE2LCAyMDE3IGF0IDA0OjMwOjU5UE0gKzAyMDAsIFZpbGxlIFN5cmrDpGzDpCB3cm90ZToKPiA+ Pj4+IE9uIFRodSwgTWFyIDE2LCAyMDE3IGF0IDA0OjIwOjI5UE0gKzAyMDAsIFNoYXJtYSwgU2hh c2hhbmsgd3JvdGU6Cj4gPj4+Pj4gUmVnYXJkcwo+ID4+Pj4+Cj4gPj4+Pj4gU2hhc2hhbmsKPiA+ Pj4+Pgo+ID4+Pj4+Cj4gPj4+Pj4gT24gMy8xNi8yMDE3IDQ6MDcgUE0sIFZpbGxlIFN5cmrDpGzD pCB3cm90ZToKPiA+Pj4+Pj4gT24gVHVlLCBKYW4gMzEsIDIwMTcgYXQgMDM6NTU6NDFQTSArMDAw MCwgQnJpYW4gU3RhcmtleSB3cm90ZToKPiA+Pj4+Pj4+IE9uIFR1ZSwgSmFuIDMxLCAyMDE3IGF0 IDA1OjE1OjQ2UE0gKzAyMDAsIFZpbGxlIFN5cmrDpGzDpCB3cm90ZToKPiA+Pj4+Pj4+PiBPbiBU dWUsIEphbiAzMSwgMjAxNyBhdCAxMjozMzoyOVBNICswMDAwLCBCcmlhbiBTdGFya2V5IHdyb3Rl Ogo+ID4+Pj4+Pj4+PiBIaSwKPiA+Pj4+Pj4+Pj4KPiA+Pj4+Pj4+Pj4gT24gTW9uLCBKYW4gMzAs IDIwMTcgYXQgMDM6MzU6MTNQTSArMDIwMCwgVmlsbGUgU3lyasOkbMOkIHdyb3RlOgo+ID4+Pj4+ Pj4+Pj4gT24gRnJpLCBKYW4gMjcsIDIwMTcgYXQgMDU6MjM6MjRQTSArMDAwMCwgQnJpYW4gU3Rh cmtleSB3cm90ZToKPiA+Pj4+Pj4+Pj4+PiBIaSwKPiA+Pj4+Pj4+Pj4+Pgo+ID4+Pj4+Pj4+Pj4+ IFdlJ3JlIGxvb2tpbmcgdG8gZW5hYmxlIHRoZSBwZXItcGxhbmUgY29sb3IgbWFuYWdlbWVudCAK PiA+Pj4+Pj4+Pj4+PiBoYXJkd2FyZSBpbgo+ID4+Pj4+Pj4+Pj4+IE1hbGktRFAgd2l0aCBhdG9t aWMgcHJvcGVydGllcywgd2hpY2ggaGFzIHNwYXJrZWQgc29tZSAKPiA+Pj4+Pj4+Pj4+PiBjb252 ZXJzYXRpb24KPiA+Pj4+Pj4+Pj4+PiBhcm91bmQgaG93IHRvIGhhbmRsZSBZQ2JDciBmb3JtYXRz Lgo+ID4+Pj4+Pj4+Pj4+Cj4gPj4+Pj4+Pj4+Pj4gQXMgaXQgc3RhbmRzIHRvZGF5LCBpdCdzIGFz c3VtZWQgdGhhdCBhIGRyaXZlciB3aWxsIAo+ID4+Pj4+Pj4+Pj4+IGltcGxpY2l0bHkgImRvIHRo ZQo+ID4+Pj4+Pj4+Pj4+IHJpZ2h0IHRoaW5nIiB0byBkaXNwbGF5IGEgWUNiQ3IgYnVmZmVyLgo+ ID4+Pj4+Pj4+Pj4+Cj4gPj4+Pj4+Pj4+Pj4gWUNiQ3IgZGF0YSBvZnRlbiB1c2VzIGRpZmZlcmVu dCBnYW1tYSBjdXJ2ZXMgYW5kIHNpZ25hbCAKPiA+Pj4+Pj4+Pj4+PiByYW5nZXMgKGUuZy4KPiA+ Pj4+Pj4+Pj4+PiBCVC42MDksIEJULjcwMSwgQlQuMjAyMCwgc3R1ZGlvIHJhbmdlLCBmdWxsLXJh bmdlKSwgc28gaXRzIAo+ID4+Pj4+Pj4+Pj4+IGRlc2lyYWJsZQo+ID4+Pj4+Pj4+Pj4+IHRvIGJl IGFibGUgdG8gZXhwbGljaXRseSBjb250cm9sIHRoZSBZQ2JDciB0byBSR0IgY29udmVyc2lvbiAK PiA+Pj4+Pj4+Pj4+PiBwcm9jZXNzCj4gPj4+Pj4+Pj4+Pj4gZnJvbSB1c2Vyc3BhY2UuCj4gPj4+ Pj4+Pj4+Pj4KPiA+Pj4+Pj4+Pj4+PiBXZSdyZSBwcm9wb3NpbmcgYWRkaW5nIGEgIkNTQyIgKGNv bG9yLXNwYWNlIGNvbnZlcnNpb24pIAo+ID4+Pj4+Pj4+Pj4+IHByb3BlcnR5IHRvCj4gPj4+Pj4+ Pj4+Pj4gY29udHJvbCB0aGlzIC0gcHJpbWFyaWx5IHBlci1wbGFuZSBmb3IgZnJhbWVidWZmZXIt PnBpcGVsaW5lIAo+ID4+Pj4+Pj4+Pj4+IENTQywgYnV0Cj4gPj4+Pj4+Pj4+Pj4gcGVyaGFwcyBv bmUgcGVyIENSVEMgdG9vIGZvciBkZXZpY2VzIHdoaWNoIGhhdmUgYW4gUkdCIAo+ID4+Pj4+Pj4+ Pj4+IHBpcGVsaW5lIGFuZAo+ID4+Pj4+Pj4+Pj4+IHdhbnQgdG8gb3V0cHV0IGluIFlVViB0byB0 aGUgZGlzcGxheToKPiA+Pj4+Pj4+Pj4+Pgo+ID4+Pj4+Pj4+Pj4+IE5hbWU6ICJDU0MiCj4gPj4+ Pj4+Pj4+Pj4gVHlwZTogRU5VTSB8IEFUT01JQzsKPiA+Pj4+Pj4+Pj4+PiBFbnVtIHZhbHVlcyAo cmVwcmVzZW50YXRpdmUpOgo+ID4+Pj4+Pj4+Pj4+ICJkZWZhdWx0IjoKPiA+Pj4+Pj4+Pj4+PiAg ICAgU2FtZSBiZWhhdmlvdXIgYXMgbm93LiAiU29tZSBraW5kIiBvZiBZQ2JDci0+UkdCIGNvbnZl cnNpb24KPiA+Pj4+Pj4+Pj4+PiAgICAgZm9yIFlDYkNyIGJ1ZmZlcnMsIGJ5cGFzcyBmb3IgUkdC IGJ1ZmZlcnMKPiA+Pj4+Pj4+Pj4+PiAiZGlzYWJsZSI6Cj4gPj4+Pj4+Pj4+Pj4gICAgIEV4cGxp Y2l0bHkgZGlzYWJsZSBhbGwgY29sb3JzcGFjZSBjb252ZXJzaW9uIChpLmUuIHVzZSBhbgo+ID4+ Pj4+Pj4+Pj4+ICAgICBpZGVudGl0eSBtYXRyaXgpLgo+ID4+Pj4+Pj4+Pj4+ICJZQ2JDciB0byBS R0I6IEJULjcwOSI6Cj4gPj4+Pj4+Pj4+Pj4gICAgIE9ubHkgdmFsaWQgZm9yIFlDYkNyIGZvcm1h dHMuIENTQyBpbiBhY2NvcmRhbmNlIHdpdGggQlQuNzA5Cj4gPj4+Pj4+Pj4+Pj4gICAgIHVzaW5n IFsxNi4uMjM1XSBmb3IgKDgtYml0KSBsdW1hIHZhbHVlcywgYW5kIFsxNi4uMjQwXSBmb3IKPiA+ Pj4+Pj4+Pj4+PiAgICAgOC1iaXQgY2hyb21hIHZhbHVlcy4gRm9yIDEwLWJpdCBmb3JtYXRzLCB0 aGUgcmFuZ2UgCj4gPj4+Pj4+Pj4+Pj4gbGltaXRzIGFyZQo+ID4+Pj4+Pj4+Pj4+ICAgICBtdWx0 aXBsaWVkIGJ5IDQuCj4gPj4+Pj4+Pj4+Pj4gIllDYkNyIHRvIFJHQjogQlQuNzA5IGZ1bGwtc3dp bmciOgo+ID4+Pj4+Pj4+Pj4+ICAgICBPbmx5IHZhbGlkIGZvciBZQ2JDciBmb3JtYXRzLiBDU0Mg aW4gYWNjb3JkYW5jZSB3aXRoIAo+ID4+Pj4+Pj4+Pj4+IEJULjcwOSwKPiA+Pj4+Pj4+Pj4+PiAg ICAgYnV0IHVzaW5nIHRoZSBmdWxsIHJhbmdlIG9mIGVhY2ggY2hhbm5lbC4KPiA+Pj4+Pj4+Pj4+ PiAiWUNiQ3IgdG8gUkdCOiBVc2UgQ1RNIjoqCj4gPj4+Pj4+Pj4+Pj4gICAgIE9ubHkgdmFsaWQg Zm9yIFlDYkNyIGZvcm1hdHMuIFVzZSB0aGUgbWF0cml4IGFwcGxpZWQgdmlhIAo+ID4+Pj4+Pj4+ Pj4+IHRoZQo+ID4+Pj4+Pj4+Pj4+ICAgICBwbGFuZSdzIENUTSBwcm9wZXJ0eQo+ID4+Pj4+Pj4+ Pj4+ICJSR0IgdG8gUkdCOiBVc2UgQ1RNIjoqCj4gPj4+Pj4+Pj4+Pj4gICAgIE9ubHkgdmFsaWQg Zm9yIFJHQiBmb3JtYXRzLiBVc2UgdGhlIG1hdHJpeCBhcHBsaWVkIHZpYSB0aGUKPiA+Pj4+Pj4+ Pj4+PiAgICAgcGxhbmUncyBDVE0gcHJvcGVydHkKPiA+Pj4+Pj4+Pj4+PiAiVXNlIENUTSI6Kgo+ ID4+Pj4+Pj4+Pj4+ICAgICBWYWxpZCBmb3IgYW55IGZvcm1hdC4gVXNlIHRoZSBtYXRyaXggYXBw bGllZCB2aWEgdGhlIAo+ID4+Pj4+Pj4+Pj4+IHBsYW5lJ3MKPiA+Pj4+Pj4+Pj4+PiAgICAgQ1RN IHByb3BlcnR5Cj4gPj4+Pj4+Pj4+Pj4gLi4uIGFueSBvdGhlciB2YWx1ZXMgZm9yIEJULjYwMSwg QlQuMjAyMCwgUkdCIHRvIFlDYkNyIGV0Yy4gCj4gPj4+Pj4+Pj4+Pj4gZXRjLiBhcwo+ID4+Pj4+ Pj4+Pj4+IHRoZXkgYXJlIHJlcXVpcmVkLgo+ID4+Pj4+Pj4+Pj4gSGF2aW5nIHNvbWUgUkdCMlJH QiBhbmQgWUNCQ1IyUkdCIHRoaW5ncyBpbiB0aGUgc2FtZSBwcm9wZXJ0eSAKPiA+Pj4+Pj4+Pj4+ IHNlZW1zCj4gPj4+Pj4+Pj4+PiB3ZWlyZC4gSSB3b3VsZCBqdXN0IGdvIHdpdGggc29tZXRoaW5n IHZlcnkgc2ltcGxlIGxpa2U6Cj4gPj4+Pj4+Pj4+Pgo+ID4+Pj4+Pj4+Pj4gWUNCQ1JfVE9fUkdC X0NTQzoKPiA+Pj4+Pj4+Pj4+ICogQlQuNjAxCj4gPj4+Pj4+Pj4+PiAqIEJULjcwOQo+ID4+Pj4+ Pj4+Pj4gKiBjdXN0b20gbWF0cml4Cj4gPj4+Pj4+Pj4+Pgo+ID4+Pj4+Pj4+PiBJIHRoaW5rIHdl J3ZlIGFncmVlZCBpbiAjZHJpLWRldmVsIHRoYXQgdGhpcyBDU0MgcHJvcGVydHkKPiA+Pj4+Pj4+ Pj4gY2FuJ3Qvc2hvdWxkbid0IGJlIG1hcHBlZCBvbi10byB0aGUgZXhpc3RpbmcgKGhhcmR3YXJl IAo+ID4+Pj4+Pj4+PiBpbXBsZW1lbnRpbmcKPiA+Pj4+Pj4+Pj4gdGhlKSBDVE0gcHJvcGVydHkg LSBldmVuIGluIHRoZSBjYXNlIG9mIHBlci1wbGFuZSBjb2xvciAKPiA+Pj4+Pj4+Pj4gbWFuYWdl bWVudCAtCj4gPj4+Pj4+Pj4+IGJlY2F1c2UgQ1NDIG5lZWRzIHRvIGJlIGRvbmUgYmVmb3JlIERF R0FNTUEuCj4gPj4+Pj4+Pj4+Cj4gPj4+Pj4+Pj4+IFNvLCBJJ20gaW4gZmF2b3VyIG9mIGdvaW5n IHdpdGggd2hhdCB5b3Ugc3VnZ2VzdGVkIGluIHRoZSAKPiA+Pj4+Pj4+Pj4gZmlyc3QgcGxhY2U6 Cj4gPj4+Pj4+Pj4+Cj4gPj4+Pj4+Pj4+IEEgbmV3IFlDQkNSX1RPX1JHQl9DU0MgcHJvcGVydHks IGVudW0gdHlwZSwgd2l0aCBhIGxpc3Qgb2YgZml4ZWQKPiA+Pj4+Pj4+Pj4gY29udmVyc2lvbnMu IEknZCBkcm9wIHRoZSBjdXN0b20gbWF0cml4IGZvciBub3csIGFzIHdlJ2QgbmVlZCAKPiA+Pj4+ Pj4+Pj4gdG8gYWRkCj4gPj4+Pj4+Pj4+IGFub3RoZXIgcHJvcGVydHkgdG8gYXR0YWNoIHRoZSBj dXN0b20gbWF0cml4IGJsb2IgdG9vLgo+ID4+Pj4+Pj4+Pgo+ID4+Pj4+Pj4+PiBJIHN0aWxsIHRo aW5rIHdlIG5lZWQgYSB3YXkgdG8gc3BlY2lmeSB3aGV0aGVyIHRoZSBzb3VyY2UgZGF0YSAKPiA+ Pj4+Pj4+Pj4gcmFuZ2UKPiA+Pj4+Pj4+Pj4gaXMgYnJvYWRjYXN0L2Z1bGwtcmFuZ2UsIHNvIHBl cmhhcHMgdGhlIGVudW0gbGlzdCBzaG91bGQgYmUgCj4gPj4+Pj4+Pj4+IGV4cGFuZGVkCj4gPj4+ Pj4+Pj4+IHRvIGFsbCBjb21iaW5hdGlvbnMgb2YgQlQuNjAxL0JULjcwOSArIGJyb2FkY2FzdC9m dWxsLXJhbmdlLgo+ID4+Pj4+Pj4+IFNvdW5kcyByZWFzb25hYmxlLiBOb3QgdGhhdCBtdWNoIGZ1 bGwgcmFuZ2UgWUNiQ3Igc3R1ZmYgb3V0IHRoZXJlCj4gPj4+Pj4+Pj4gcGVyaGFwcy4gV2VsbCwg YXBhcnQgZnJvbSBqcGVncyBJIHN1cHBvc2UuIEJ1dCBubyBoYXJtIGluIGJlaW5nIAo+ID4+Pj4+ Pj4+IGFibGUKPiA+Pj4+Pj4+PiB0byBkZWFsIHdpdGggaXQuCj4gPj4+Pj4+Pj4KPiA+Pj4+Pj4+ Pj4gKEknbSBub3Qgc3VyZSB3aGF0IHRoZSBjYW5vbmljYWwgbmFtaW5nIGZvciAKPiA+Pj4+Pj4+ Pj4gYnJvYWRjYXN0L2Z1bGwtcmFuZ2UgaXMsCj4gPj4+Pj4+Pj4+IHdlIGNhbGwgdGhlbSBuYXJy b3cgYW5kIHdpZGUpCj4gPj4+Pj4+Pj4gV2UgdGVuZCB0byBjYWxsIHRoZW0gZnVsbCB2cy4gbGlt aXRlZCByYW5nZS4gVGhhdCdzIGhvdyBvdXIKPiA+Pj4+Pj4+PiAiQnJvYWRjYXN0IFJHQiIgcHJv cGVydHkgaXMgZGVmaW5lZCBhcyB3ZWxsLgo+ID4+Pj4+Pj4+Cj4gPj4+Pj4+PiBPSywgdXNpbmcg dGhlIHNhbWUgb25lcyBzb3VuZHMgc2Vuc2libGUuCj4gPj4+Pj4+Pgo+ID4+Pj4+Pj4+Pj4gQW5k IHRyeWluZyB0byB1c2UgdGhlIHNhbWUgdGhpbmcgZm9yIHRoZSBjcnRjIHN0dWZmIGlzIAo+ID4+ Pj4+Pj4+Pj4gcHJvYmFibHkgbm90Cj4gPj4+Pj4+Pj4+PiBnb2luZyB0byBlbmQgd2VsbC4gTGlr ZSBEYW5pZWwgc2FpZCB3ZSBhbHJlYWR5IGhhdmUgdGhlCj4gPj4+Pj4+Pj4+PiAnQnJvYWRjYXN0 IFJHQicgcHJvcGVydHkgbXVkZHlpbmcgdGhlIHdhdGVycyB0aGVyZSwgYW5kIHRoYXQgCj4gPj4+ Pj4+Pj4+PiBzdHVmZgo+ID4+Pj4+Pj4+Pj4gYWxzbyB0aWVzIGluIHdpdGggd2hhdCBjb2xvcnNw YWNlIHdlIHNpZ25hbCB0byB0aGUgc2luayB2aWEKPiA+Pj4+Pj4+Pj4+IGluZm9mcmFtZXMvd2hh dGV2ZXIgdGhlIERQIHRoaW5nIHdhcyBjYWxsZWQuIFNvIG15IGd1dCAKPiA+Pj4+Pj4+Pj4+IGZl ZWxpbmcgaXMKPiA+Pj4+Pj4+Pj4+IHRoYXQgdHJ5aW5nIHRvIHVzZSB0aGUgc2FtZSBwcm9wZXJ0 eSBldmVyeXdoZXJlIHdpbGwganVzdCBlbmQgdXAKPiA+Pj4+Pj4+Pj4+IG1lc3N5Lgo+ID4+Pj4+ Pj4+PiBZZWFoLCBhZ3JlZWQuIElmL3doZW4gc29tZW9uZSB3YW50cyB0byBhZGQgQ1NDIG9uIHRo ZSBvdXRwdXQgCj4gPj4+Pj4+Pj4+IG9mIGEgQ1JUQwo+ID4+Pj4+Pj4+PiAoYWZ0ZXIgR0FNTUEp LCB3ZSBjYW4gYWRkIGEgbmV3IHByb3BlcnR5Lgo+ID4+Pj4+Pj4+Pgo+ID4+Pj4+Pj4+PiBUaGF0 IG1ha2VzIG1lIHdvbmRlciBhYm91dCBjYWxsaW5nIHRoaXMgb25lIAo+ID4+Pj4+Pj4+PiBTT1VS Q0VfWUNCQ1JfVE9fUkdCX0NTQyB0bwo+ID4+Pj4+Pj4+PiBiZSBleHBsaWNpdCB0aGF0IGl0IGRl c2NyaWJlcyB0aGUgc291cmNlIGRhdGEuIFRoZW4gd2UgY2FuIAo+ID4+Pj4+Pj4+PiBsYXRlciBh ZGQKPiA+Pj4+Pj4+Pj4gU0lOS19SR0JfVE9fWUNCQ1JfQ1NDLCBhbmQgaXQgd2lsbCBiZSByZWFz b25hYmx5IG9idmlvdXMgdGhhdCBpdHMKPiA+Pj4+Pj4+Pj4gdmFsdWUgZGVzY3JpYmVzIHRoZSBv dXRwdXQgZGF0YSByYXRoZXIgdGhhbiB0aGUgaW5wdXQgZGF0YS4KPiA+Pj4+Pj4+PiBTb3VyY2Ug YW5kIHNpbmsgaGF2ZSBhIHNsaWdodCBjb25ub3RhdGlvbiBpbiBteSBtaW5kIHdydC4gdGhlIAo+ ID4+Pj4+Pj4+IGJveCB0aGF0Cj4gPj4+Pj4+Pj4gcHJvZHVjZXMgdGhlIGRpc3BsYXkgc2lnbmFs IGFuZCB0aGUgYm94IHRoYXQgZWF0cyB0aGUgc2lnbmFsLiAKPiA+Pj4+Pj4+PiBTbyB0cnlpbmcK PiA+Pj4+Pj4+PiB0byB1c2UgdGhlIHNhbWUgdGVybXMgdG8gZGVzY3JpYmUgdGhlIGludGVybmFs cyBvZiB0aGUgcGlwZWxpbmUgCj4gPj4+Pj4+Pj4gaW5zaWRlCj4gPj4+Pj4+Pj4gdGhlICJzb3Vy Y2UgYm94IiBtaWd0aCBsZWFkIHRvIHNvbWUgY29uZnVzaW9uLiBCdXQgd2UgZG8gCj4gPj4+Pj4+ Pj4gcHJvYmFibHkgbmVlZAo+ID4+Pj4+Pj4+IHNvbWUgZGVjZW50IG5hbWVzIGZvciB0aGVzZSB0 byBtYWtlIHRoZSBsYXlvdXQgb2YgdGhlIHBpcGVsaW5lIAo+ID4+Pj4+Pj4+IGNsZWFyLgo+ID4+ Pj4+Pj4+IElucHV0L291dHB1dCBhcmUgdGhlIG90aGVyIG5hbWVzIHRoYXQgcG9wcGVkIHRvIG15 IG1pbmQgYnV0IAo+ID4+Pj4+Pj4+IHRob3NlIGFyZW4ndAo+ID4+Pj4+Pj4+IG5lY2Vzc2FyaWx5 IGFueSBiZXR0ZXIuIEJ1dCBpbiB0aGUgZW5kIEkgdGhpbmsgSSBjb3VsZCBsaXZlIAo+ID4+Pj4+ Pj4+IHdpdGggd2hhdGV2ZXIKPiA+Pj4+Pj4+PiBuYW1lcyB3ZSBoYXBwZW4gdG8gcGljaywgYXMg bG9uZyBhcyB3ZSBkb2N1bWVudCB0aGUgcGlwZWxpbmUgCj4gPj4+Pj4+Pj4gY2xlYXJseS4KPiA+ Pj4+Pj4+Pgo+ID4+Pj4+Pj4+IExvbmcgYWdvIEkgZGlkIHdvbmRlciBpZiB3ZSBzaG91bGQganVz dCBzdGFydCBpbmRleGluZyB0aGVzZSAKPiA+Pj4+Pj4+PiB0aGluZ3MKPiA+Pj4+Pj4+PiBzb21l aG93LCBhbmQgdGhlbiBqdXN0IGxvb2tpbmcgYXQgdGhlIGluZGV4IHNob3VsZCB0ZWxsIHlvdSB0 aGUgCj4gPj4+Pj4+Pj4gb3JkZXIKPiA+Pj4+Pj4+PiBvZiB0aGUgb3BlcmF0aW9ucy4gQnV0IHdl IGFscmVhZHkgaGF2ZSB0aGUgY3RtL2dhbW1hIHcvbyBhbnkgCj4gPj4+Pj4+Pj4gaW5kZXhlcyBz bwo+ID4+Pj4+Pj4+IHRoYXQgaWRlYSBwcm9iYWJseSBpc24ndCBzbyBncmVhdCBhbnltb3JlLgo+ ID4+Pj4+Pj4+Cj4gPj4+Pj4+Pj4+IEkgd2FudCB0byBhdm9pZCBjb25mdXNpb24gY2F1c2VkIGJ5 IGVuZGluZyB1cCB3aXRoIHR3bwo+ID4+Pj4+Pj4+PiB7Q1N9X1RPX3tDU31fQ1NDIHByb3BlcnRp ZXMsIHdoZXJlIG9uZSBpcyBkZXNjcmliaW5nIHRoZSBkYXRhIAo+ID4+Pj4+Pj4+PiB0byB0aGUK PiA+Pj4+Pj4+Pj4gbGVmdCBvZiBpdCwgYW5kIHRoZSBvdGhlciBkZXNjcmliaW5nIHRoZSBkYXRh IHRvIHRoZSByaWdodCBvZiAKPiA+Pj4+Pj4+Pj4gaXQsIHdpdGgKPiA+Pj4+Pj4+Pj4gbm8gcmVh bCB3YXkgb2YgdGVsbGluZyB3aGljaCB3YXkgYXJvdW5kIGl0IGlzLgo+ID4+Pj4+Pj4+IE5vdCBy ZWFsbHkgc3VyZSB3aGF0IHlvdSBtZWFuLiBJdCBzaG91bGQgYWx3YXlzIGJlCj4gPj4+Pj4+Pj4g PGxlZnQ+X3RvXzxyaWdodD5fY3NjLgo+ID4+Pj4+Pj4gQWdyZWVkLCBsZWZ0LXRvLXJpZ2h0LiBC dXQgZm9yIGluc3RhbmNlIG9uIGEgQ1NDIHByb3BlcnR5IAo+ID4+Pj4+Pj4gcmVwcmVzZW50aW5n Cj4gPj4+Pj4+PiBhIENSVEMgb3V0cHV0IENTQyAoanVzdCBiZWZvcmUgaGl0dGluZyB0aGUgY29u bmVjdG9yKSwgd2hpY2ggCj4gPj4+Pj4+PiBoYXBwZW5zCj4gPj4+Pj4+PiB0byBiZSBjb252ZXJ0 aW5nIFJHQiB0byBZQ2JDcjoKPiA+Pj4+Pj4+Cj4gPj4+Pj4+PiBDUlRDIC0+IEdBTU1BIC0+IFJH Ql9UT19ZQ0JDUl9DU0MKPiA+Pj4+Pj4+Cj4gPj4+Pj4+PiAuLi50aGUgZW51bSB2YWx1ZSAiQlQu NjAxIExpbWl0ZWQiIG1lYW5zIHRoYXQgdGhlIGRhdGEgb24gdGhlIAo+ID4+Pj4+Pj4gKnJpZ2h0 Kgo+ID4+Pj4+Pj4gb2YgUkdCX1RPX1lDQkNSX0NTQyBpcyAiQlQuNjAxIExpbWl0ZWQiCj4gPj4+ Pj4+Pgo+ID4+Pj4+Pj4gT24gdGhlIG90aGVyIGhhbmQgZm9yIGEgQ1NDIG9uIHRoZSBpbnB1dCBv ZiBhIHBsYW5lLCB3aGljaCAKPiA+Pj4+Pj4+IGhhcHBlbnMgdG8KPiA+Pj4+Pj4+IGJlIGNvbnZl cnRpbmcgWUNiQ3IgdG8gUkdCOgo+ID4+Pj4+Pj4KPiA+Pj4+Pj4+IFJBTSAtPiBZQ0JDUl9UT19S R0JfQ1NDIC0+IERFR0FNTUEKPiA+Pj4+Pj4+Cj4gPj4+Pj4+PiAuLi50aGUgZW51bSB2YWx1ZSAi QlQuNjAxIExpbWl0ZWQiIG1lYW5zIHRoYXQgdGhlIGRhdGEgb24gdGhlIAo+ID4+Pj4+Pj4gKmxl ZnQqCj4gPj4+Pj4+PiBvZiBZQ0JDUl9UT19SR0JfQ1NDIGlzICJCVC42MDEgTGltaXRlZCIuCj4g Pj4+Pj4+Pgo+ID4+Pj4+Pj4gSW5kaWNhdGluZyBpbiB0aGUgcHJvcGVydHkgbmFtZSB3aGV0aGVy IGl0cyB2YWx1ZSBpcyBkZXNjcmliaW5nIHRoZQo+ID4+Pj4+Pj4gZGF0YSBvbiB0aGUgbGVmdCBv ciB0aGUgcmlnaHQgaXMgbmVlZGVkIChhbmQgSSBkb24ndCB0aGluayAKPiA+Pj4+Pj4+IGluZmVy cmluZwo+ID4+Pj4+Pj4gdGhhdCAiaXQncyBhbHdheXMgdGhlIFlDQkNSIG9uZSIgaXMgdGhlIGNv cnJlY3QgYXBwcm9hY2gpLgo+ID4+Pj4+Pj4KPiA+Pj4+Pj4+IEluIG15IGV4YW1wbGUgYWJvdmUs ICJTT1VSQ0VfeHh4IiB3b3VsZCBtZWFuIHRoZSBlbnVtIHZhbHVlIGlzCj4gPj4+Pj4+PiBkZXNj cmliaW5nIHRoZSAic291cmNlIiBkYXRhIChpLmUuIHRoZSBkYXRhIG9uIHRoZSBsZWZ0KSBhbmQK PiA+Pj4+Pj4+ICJTSU5LX3h4eCIgd291bGQgbWVhbiB0aGUgZW51bSB2YWx1ZSBpcyBkZXNjcmli aW5nIHRoZSAic2luayIgZGF0YQo+ID4+Pj4+Pj4gKGkuZS4gdGhlIGRhdGEgb24gdGhlIHJpZ2h0 KS4gVGhpcyBkb2Vzbid0IG5lY2Vzc2FyaWx5IG5lZWQgdG8gCj4gPj4+Pj4+PiBpbmZlciBhCj4g Pj4+Pj4+PiBwYXJ0aWN1bGFyIHBvaW50IGluIHRoZSBwaXBlbGluZS4KPiA+Pj4+Pj4gUmlnaHQs IHNvIEkgZ3Vlc3MgeW91IHdhbnQgdGhlIHZhbHVlcyB0byBiZSBuYW1lZCAiPGE+IHRvIDxiPiIg YXMgCj4gPj4+Pj4+IHdlbGw/Cj4gPj4+Pj4+IFllcywgSSB0aGluayB3ZSdsbCBiZSB3YW50aW5n IHRoYXQgYXMgd2VsbC4KPiA+Pj4+Pj4KPiA+Pj4+Pj4gU28gd2hhdCB3ZSBtaWdodCBuZWVkIGlz IHNvbWV0aGluZyBsaWtlOgo+ID4+Pj4+PiBlbnVtIFlDQkNSX1RPX1JHQl9DU0MKPiA+Pj4+Pj4g ICAqIFlDYkNyIEJULjYwMSBsaW1pdGVkIHRvIFJHQiBCVC43MDkgZnVsbAo+ID4+Pj4+PiAgICog WUNiQ3IgQlQuNzA5IGxpbWl0ZWQgdG8gUkdCIEJULjcwOSBmdWxsIDx0aGlzIHdvdWxkIGJlIHRo ZSAKPiA+Pj4+Pj4gbGlrZWx5IGRlZmF1bHQgdmFsdWUgSU1PPgo+ID4+Pj4+PiAgICogWUNiQ3Ig QlQuNjAxIGxpbWl0ZWQgdG8gUkdCIEJULjIwMjAgZnVsbAo+ID4+Pj4+PiAgICogWUNiQ3IgQlQu NzA5IGxpbWl0ZWQgdG8gUkdCIEJULjIwMjAgZnVsbAo+ID4+Pj4+PiAgICogWUNiQ3IgQlQuMjAy MCBsaW1pdGVkIHRvIFJHQiBCVC4yMDIwIGZ1bGwKPiA+Pj4+Pj4KPiA+Pj4+Pj4gQW5kIHRoYW5r cyB0byBCVC4yMDIwIHdlJ2xsIG5lZWQgYSBSR0ItPlJHQiBDU0MgcHJvcGVydHkgYXMgd2VsbC4g Cj4gPj4+Pj4+IEVnOgo+ID4+Pj4+PiBlbnVtIFJHQl9UT19SR0JfQ1NDCj4gPj4+Pj4+ICAgKiBi eXBhc3MgKG9yIHNlcGFyYXRlIDcwOS0+NzA5LCAyMDIwLT4yMDIwPykgPHRoaXMgd291bGQgYmUg dGhlIAo+ID4+Pj4+PiBkZWZhdWx0Pgo+ID4+Pj4+PiAgICogUkdCIEJULjcwOSBmdWxsIHRvIFJH QiBCVC4yMDIwIGZ1bGwKPiA+Cj4gPiBJIGxpa2UgdGhpcyBhcHByb2FjaCwgZnJvbSBhIHBvaW50 IG9mIHZpZXcgb2YgYmVpbmcgZXhwbGljaXQgYW5kCj4gPiBkaXNjb3ZlcmFibGUgYnkgdXNlcnNw YWNlLiBJdCBhbHNvIGhhcHBlbnMgdG8gbWFwIHF1aXRlIG5pY2VseSB0byBvdXIKPiA+IGhhcmR3 YXJlLi4uIHdlIGhhdmUgYSBtYXRyaXggYmVmb3JlIGRlZ2FtbWEsIHNvIHdlIGNvdWxkIGRvIGEK PiA+IENTQyArIEdhbXV0IGNvbnZlcnNpb24gdGhlcmUgaW4gb25lIGdvLCB3aGljaCBpcyBhcHBh cmVudGx5IG5vdCAxMDAlCj4gPiBtYXRoZW1hdGljYWxseSBjb3JyZWN0LCBidXQgaW4gZ2VuZXJh bCBpcyBnb29kIGVub3VnaC4KPiA+Cj4gPiAuLi4gaG93ZXZlciBoYXZpbmcgdGFsa2VkIHRoaXMg b3ZlciBhIGJpdCB3aXRoIHNvbWVvbmUgd2hvIHVuZGVyc3RhbmRzCj4gPiB0aGUgZGV0YWlsIGEg bG90IGJldHRlciB0aGFuIG1lLCBpdCBzb3VuZHMgbGlrZSB0aGUgImNvcnJlY3QiIHRoaW5nIHRv Cj4gPiBkbyBhcyBwZXIgdGhlIHNwZWMgaXM6Cj4gPgo+ID4gQ1NDIC0+IERFR0FNTUEgLT4gR0FN VVQKPiA+Cj4gPiBlLmcuCj4gPgo+ID4gWUNiQ3IgYnQuNjAxIGxpbWl0ZWQgdG8gUkdCIGJ0LjYw MSBmdWxsIC0+IGRlZ2FtbWEgLT4KPiA+ICAgICBSR0IgYnQuNjAxIGZ1bGwgdG8gUkdCIGJ0Ljcw OSBmdWxsCj4gPgo+ID4gU28gdGhhdCBzb3VuZHMgbGlrZSB3aGF0IHdlIG5lZWQgdG8gc3VwcG9y dCBpbiB0aGUgQVBJLCBhbmQgYWxzbwo+ID4gc291bmRzIG1vcmUgbGlrZSB0aGUgInNlcGFyYXRl IHByb3BlcnRpZXMiIGFwcHJvYWNoLgo+IEkgYWdyZWUuCj4gPgo+ID4+Pj4+Pgo+ID4+Pj4+PiBB bHRlcm5hdGl2ZXMgd291bGQgaW52b2x2ZSB0d28gcHJvcGVydGllcyB0byBkZWZpbmUgdGhlIGlu cHV0IGFuZCAKPiA+Pj4+Pj4gb3V0cHV0Cj4gPj4+Pj4+IGZyb20gdGhlIENTQyBzZXBhcmF0ZWx5 LCBidXQgdGhlbiB5b3UgbG9zZSB0aGUgY2FwYWJpbGl0eSB0byBzZWUgCj4gPj4+Pj4+IHdoaWNo Cj4gPj4+Pj4+IGNvbWJpbmF0aW9ucyBhcmUgYWN0dWFsbHkgc3Vwb29ydGVkLgo+ID4+Pj4+IEkg d2FzIHRoaW5raW5nIGFib3V0IHRoaXMgdG9vLCBvciB3b3VsZCBpdCBtYWtlIG1vcmUgc2Vuc2Ug dG8gCj4gPj4+Pj4gY3JlYXRlIHR3bwo+ID4+Pj4+IHByb3BlcnRpZXM6Cj4gPj4+Pj4gLSBvbmUg Zm9yIGdhbXV0IG1hcHBpbmcgKGNhc2VzIGxpa2UgUkdCNzA5LT5SR0IyMDIwKQo+ID4+Pj4+IC0g b3RoZXIgb25lIGZvciBDb2xvciBzcGFjZSBjb252ZXJzaW9uIChjYXNlcyBsaWxlIFlVViA3MDkg LT4gUkdCIAo+ID4+Pj4+IDcwOSkKPiA+Pj4+Pgo+ID4+Pj4+IEdhbXV0IG1hcHBpbmcgY2FuIHJl cHJlc2VudCBhbnkgb2YgdGhlIGZpeCBmdW5jdGlvbiBtYXBwaW5nLCAKPiA+Pj4+PiB3ZXJlYXMg Q1NDCj4gPj4+Pj4gY2FuIGJyaW5nIHVwIGFueSBwcm9ncmFtbWFibGUgbWF0cml4Cj4gPj4+Pj4K PiA+Pj4+PiBJbnRlcm5hbGx5IHRoZXNlIHByb3BlcnRpZXMgY2FuIHVzZSB0aGUgc2FtZSBIVyB1 bml0IG9yIGV2ZW4gc2FtZSAKPiA+Pj4+PiBmdW5jdGlvbi4KPiA+Pj4+PiBEb2VzIGl0IHNvdW5k IGFueSBnb29kID8KPiA+Cj4gPiBJdCBzZWVtcyB0byBtZSB0aGF0IGFjdHVhbGx5IHRoZSB0d28g YXBwcm9hY2hlcyBjYW4gYmUgY29tYmluZWQgaW50bwo+ID4gdGhlIHNhbWUgdGhpbmc6Cj4gPiAg KiBXZSBkZWZpbml0ZWx5IG5lZWQgYSBZQ2JDci10by1SR0IgY29udmVyc2lvbiBiZWZvcmUgZGVn YW1tYQo+ID4gICAgKGZvciBjb252ZXJ0aW5nIFlVViBkYXRhIHRvIFJHQiwgaW4gc29tZSBmbGF2 b3VyKQo+ID4gICogV2UgZGVmaW5pdGVseSBuZWVkIGFuIFJHQi10by1SR0IgY29udmVyc2lvbiBh ZnRlciBnYW1tYSB0byBoYW5kbGUKPiA+ICAgIDcwOSBsYXllcnMgYmxlbmRlZCB3aXRoIFJlYy4y MDIwLgo+ID4gVGhlIGV4YWN0IGNvbnZlcnNpb24gZWFjaCBvZiB0aG9zZSBwcm9wZXJ0aWVzIHJl cHJlc2VudHMgKENTQyArIGdhbXV0LAo+ID4gQ1NDIG9ubHksIGdhbXV0IG9ubHkpIGNhbiBiZSBp bXBsaWNpdCBpbiB0aGUgZW51bSBuYW1lLgo+ID4KPiA+IEZvciBoYXJkd2FyZSB3aGljaCBoYXMg YSBmaXhlZC1mdW5jdGlvbiBDU0MgYmVmb3JlIERFR0FNTUEgd2l0aCBhCj4gPiBtYXRyaXggYWZ0 ZXIgREVHQU1NQSwgSSdkIGV4cGVjdCB0byBzZWUgc29tZXRoaW5nIGxpa2UgYmVsb3cuIE5vbmUg b2YKPiA+IHRoZSBZQ0JDUl9UT19SR0JfQ1NDIHZhbHVlcyBpbmNsdWRlIGEgZ2FtdXQgY29udmVy c2lvbiwgYmVjYXVzZSB0aGF0Cj4gPiBpcyBpbnN0ZWFkIGV4cG9zZWQgd2l0aCB0aGUgUkdCX1RP X1JHQl9DU0MgcHJvcGVydHkgKHdoaWNoIHJlcHJlc2VudHMKPiA+IHRoZSBoYXJkd2FyZSBtYXRy aXgpCj4gPgo+ID4gWUNCQ1JfVE9fUkdCX0NTQyAoYmVmb3JlIERFR0FNTUEpOgo+ID4gICAgIFlD YkNyIEJULjYwMSBsaW1pdGVkIHRvIFJHQiBCVC42MDEgZnVsbAo+ID4gICAgIFlDYkNyIEJULjcw OSBsaW1pdGVkIHRvIFJHQiBCVC43MDkgZnVsbAo+ID4gICAgIFlDYkNyIEJULjIwMjAgbGltaXRl ZCB0byBSR0IgQlQuMjAyMCBmdWxsCj4gPgo+ID4gUkdCX1RPX1JHQl9DU0MgKGFmdGVyIERFR0FN TUEpOgo+ID4gICAgIFJHQiBCVC42MDEgZnVsbCB0byBSR0IgQlQuNzA5IGZ1bGwKPiA+ICAgICBS R0IgQlQuNzA5IGZ1bGwgdG8gUkdCIEJULjIwMjAgZnVsbAo+ID4KPiA+Cj4gPiBPbiB0aGUgb3Ro ZXIgaGFuZCwgb24gaGFyZHdhcmUgd2hpY2ggZG9lcyBhIENTQyArIEdhbXV0IGNvbnZlcnNpb24g aW4KPiA+IG9uZSBnbywgYmVmb3JlIERFR0FNTUEgKGxpa2Ugb3VycyksIHlvdSBtaWdodCBoYXZl Ogo+ID4KPiA+IFlDQkNSX1RPX1JHQl9DU0MgKGJlZm9yZSBERUdBTU1BKToKPiA+ICAgICBZQ2JD ciBCVC42MDEgbGltaXRlZCB0byBSR0IgQlQuNjAxIGZ1bGwKPiA+ICAgICBZQ2JDciBCVC42MDEg bGltaXRlZCB0byBSR0IgQlQuNzA5IGZ1bGwKPiA+ICAgICBZQ2JDciBCVC43MDkgbGltaXRlZCB0 byBSR0IgQlQuNzA5IGZ1bGwKPiA+ICAgICBZQ2JDciBCVC4yMDIwIGxpbWl0ZWQgdG8gUkdCIEJU LjIwMjAgZnVsbAo+ID4KPiA+IFJHQl9UT19SR0JfQ1NDIChhZnRlciBERUdBTU1BKToKPiA+ICAg ICBOb3Qgc3VwcG9ydGVkCj4gPgo+ID4gVXNlcnNwYWNlIGNhbiBwYXJzZSB0aGUgdHdvIHByb3Bl cnRpZXMgdG8gZmlndXJlIG91dCBpdHMgb3B0aW9ucyB0bwo+ID4gZ2V0IGZyb20gZGVzaXJlZCBp bnB1dCAtPiBkZXNpcmVkIG91dHB1dC4gSXQgaXMgcGVyaGFwcyBhIGxpdHRsZQo+ID4gdmVyYm9z ZSwgYnV0IGl0J3MgZGVzY3JpcHRpdmUgYW5kIGZsZXhpYmxlLgo+ID4KPiBTZWVtcyB0byBiZSBh IGdvb2QgaWRlYSwgVmlsbGUgPwoKTG9va3MgcHJldHR5IHNhbmUgdG8gbWUuCgpUaG91Z2ggaG93 IHdlJ2xsIGRvIHRoZSBkZWdhbW1hL2dhbW1hIGlzIHJhdGhlciB1bmNsZWFyIHN0aWxsLgoKSSB0 aGluayB3ZSBtaWdodCBiZSBsb29raW5nIGF0IHR3byB2YXJpYW50cyBvZiBoYXJkd2FyZToKLSBB IGZ1bGx5IHByb2dyYW1tYWJsZSBvbmUgd2l0aCBzZXBhcmF0ZSBzdGFnZXM6CiAgY3NjIC0+IGRl Z2FtbWEgLT4gZ2FtdXQgLT4gZ2FtbWEKLSBBIHRvdGFsbHkgZml4ZWQgb25lIHdpdGgganVzdCBh IGZldyBkaWZmZXJlbnQgdmFyaWFudHMKICBvZiB0aGUgcGlwZWxpbmUgYmFrZWQgaW50byB0aGUg aGFyZHdhcmUgCgpJZiB3ZSB3YW50IHRvIGV4cG9zZSB0aGUgZ2FtbWEvZGVnYW1tYSB0byB0aGUg dXNlciwgaG93IGV4YWN0bHkgYXJlIHdlCmdvaW5nIHRvIGRvIHRoYXQgd2l0aCB0aGUgbGF0dGVy IGZvcm0gb3IgaGFyZHdhcmUuIEkgZ3Vlc3Mgd2UgY291bGQKc3BlY2lmeSB0aGF0IGlmIHRoZSBk ZWdhbW1hIHByb3BlcnR5IGlzIG5vdCBleHBvc2VkLCB0aGVyZSB3aWxsIGJlIGFuCmltcGxpY2l0 IGRlZ2FtbWEgc3RhZ2UgYmV0d2VlbiB0aGUgdHdvIGNzYyBhbmQgZ2FtdXQuIEFuZCBpZiBpdCBp cwpleHBvc2VkIHRoZSBvdXRwdXQgZnJvbSB0aGUgZmlyc3QgY3NjIGlzIG5vbi1saW5lYXIgYW5k IHRodXMgbmVlZHMKdGhlIGRlZ2FtbWEgcHJvZ3JhbW1lZCB0byBtYWtlIGl0IHNvIGJlZm9yZSB0 aGUgZ2FtdXQgbWFwcGluZy4KCkFuZCBwZXJoYXBzIGEgc2ltaWxhciBydWxlIGNvdWxkIHdvcmsg Zm9yIHRoZSBnYW1tYTsgSWYgaXQncyBwcmVzZW50CnRoZSBvdXRwdXQgZnJvbSB0aGUgZ2FtdXQg bWFwcGluZyBpcyBleHBlY3RlZCB0byBiZSBsaW5lYXIsIGFuZApvdGhlcndpc2Ugbm9uLWxpbmVh ci4gTm90IHF1aXRlIHN1cmUgYWJvdXQgdGhpcy4gSW4gZmFjdCBJIGRvbid0IHlldAprbm93IHdo YXQgb3VyIGhhcmR3YXJlIHdvdWxkIG91dHB1dCBmcm9tIHRoZSBlbmQgb2YgdGhlIGZpeGVkIHBp cGVsaW5lLgoKPiAKPiAtIFNoYXNoYW5rCj4gPj4+PiBJdCdzIGNlcnRhaW5seSBwb3NzaWJsZS4g T25lIHByb2JsZW0gaXMgdGhhdCB3ZSBjYW4ndCBpbmZvcm0gdXNlcnNwYWNlCj4gPj4+PiB1cGZy b250IHdoaWNoIGNvbWJpbmF0aW9ucyBhcmUgc3VwcG9ydGVkLiBXaGV0aGVyIHRoYXQncyBhIHJl YWwgCj4gPj4+PiBwcm9ibGVtCj4gPj4+PiBJJ20gbm90IHN1cmUuIFdpdGggYXRvbWljIHVzZXJz cGFjZSBjYW4gb2YgY291cnNlIGNoZWNrIHVwZnJvbnQgaWYKPiA+Pj4+IHNvbWV0aGluZyBjYW4g YmUgZG9uZSBvciBub3QsIGJ1dCB0aGUgbWFpbiBwcm9ibGVtIGlzIHRoZW4gY29taW5nIHVwCj4g Pj4+PiB3aXRoIGEgZmFsbGJhY2sgc3RyYXRlZ3kgdGhhdCBkb2Vzbid0IHN1Y2sgdG9vIGJhZGx5 Lgo+ID4+Pj4KPiA+Cj4gPiBUaGUgYXBwcm9hY2ggYWJvdmUgaGVscHMgbGltaXQgdGhlIHNldCBl eHBvc2VkIHRvIHVzZXJzcGFjZSB0byBiZSBvbmx5Cj4gPiB0aG9zZSB3aGljaCBhcmUgc3VwcG9y dGVkIC0gYmVjYXVzZSBkZXZpY2VzIHdoaWNoIGRvbid0IGhhdmUgc2VwYXJhdGUKPiA+IGhhcmR3 YXJlIGZvciB0aGUgdHdvIHN0YWdlcyB3b24ndCBleHBvc2UgdmFsdWVzIGZvciBib3RoLgo+ID4K PiA+Pj4+IEFueXdheXMsIEkgZG9uJ3QgdGhpbmsgSSBoYXZlIGFueSBzdHJvbmcgZmF2b3JpdGVz IGhlcmUuIFdvdWxkIGJlIG5pY2UKPiA+Pj4+IHRvIGhlYXIgd2hhdCBldmVyeW9uZSBlbHNlIHRo aW5rcy4KPiA+Pj4gSSBjb25mZXNzIHRvIGEgbGFjayBvZiBleHBlcmllbmNlIGluIHRoZSBzdWJq ZWN0IGhlcmUsIGJ1dCB3aGF0IGlzIAo+ID4+PiB0aGUgbW9yZSBjb21tb24KPiA+Pj4gcmVxdWVz dCBjb21pbmcgZnJvbSB1c2Vyc3BhY2U6IGNvbnZlcnRpbmcgWVVWIDwtPiBSR0IgYnV0IGtlZXBp bmcgCj4gPj4+IHRoZSBnYW1tdXQgbWFwcGluZwo+ID4+PiBzZXBhcmF0ZSwgb3IgWVVWIChnYW1t dXQgeCkgPC0+IFJHQiAoZ2FtbXV0IHkpID8gSW4gb3RoZXIgd29yZHM6IEkgCj4gPj4+IGNhbiBz ZWUgdGhlIHVzZWZ1bG5lc3MKPiA+Pj4gb2YgaGF2aW5nIGFuIGV4cGxpY2l0IHdheSBvZiBkZWNv bXBvc2luZyB0aGUgY29sb3IgbWFwcGluZyBwcm9jZXNzIAo+ID4+PiBhbmQgY29udHJvbCB0aGUK PiA+Pj4gcGFyYW1ldGVycywgYnV0IGhvdyBvZnRlbiBkbyBhcHBzIG9yIGNvbXBvc2l0b3JzIGdv IHRocm91Z2ggdGhlIAo+ID4+PiB3aG9sZSBjaGFpbj8KPiA+PiBSaWdodCBub3csIG1vcmUgb3Ig bGVzcyB0aGUgaW50ZXJlc3QgaXMgb24gdGhlIFJHQi0+WVVWIGNvbnZlcnNpb24gCj4gPj4gc2lk ZSwgY296IHRpbGwgbm93IEJUIDIwMjAgZ2FtdXQgd2FzIG5vdCBpbgo+ID4+IHBpY3R1cmUuIFJF QyA2MDEgYW5kIDcwOSBoYXZlIHZlcnkgY2xvc2UgZ2FtdXRzLCBzbyBpdCB3YXMgb2sgdG8gCj4g Pj4gYmxlbmQgZnJhbWVzIG1vc3RseSB3aXRob3V0IGJvdGhlcmluZyBhYm91dAo+ID4+IGdhbXV0 LCBidXQgZ29pbmcgZndkLCBvbmVzIFJFQyAyMDIwIGNvbWVzIGludG8gcGljdHVyZSwgd2UgbmVl ZCB0byAKPiA+PiBib3RoZXIgYWJvdXQgbWFwcGluZyBnYW11dHMgdG9vLCBlbHNlCj4gPj4gYmxl bmRpbmcgUmVjNzA5IGJ1ZmZlcnMgYW5kIFJlYzIwMjAgYnVmZmVycyB0b2dldGhlciB3b3VsZCBj YXVzZSB2ZXJ5IAo+ID4+IHZpc2libGUgZ2FtdXQgbWlzbWF0Y2guCj4gPj4KPiA+PiBTbyBjb25z aWRlcmluZyBmdXR1cmlzdGljIGRldmVsb3BtZW50cywgaXQgbWlnaHQgYmUgb2sgdG8gY29uc2lk ZXIgCj4gPj4gYm90aC4gU3RpbGwsIGFzIFZpbGxlIG1lbnRpb25lZCwgaXQgd291bGQgYmUgZ29v ZAo+ID4+IHRvIGhlYXIgZnJvbSBvdGhlciB0b28uCj4gPj4KPiA+Cj4gPiBZZWFoIEkgYWdyZWUg dGhhdCB3ZSBkZWZpbml0ZWx5IG5lZWQgdG8gY29uc2lkZXIgYm90aCBmb3IgYW55dGhpbmcgd2UK PiA+IGNvbWUgdXAgd2l0aCBub3cuCj4gPgo+ID4gQ2hlZXJzLAo+ID4gQnJpYW4KPiA+Cj4gPj4g LSBTaGFzaGFuawo+ID4+Pgo+ID4+PiBCZXN0IHJlZ2FyZHMsCj4gPj4+IExpdml1Cj4gPj4+Cj4g Pj4+PiAtLSAKPiA+Pj4+IFZpbGxlIFN5cmrDpGzDpAo+ID4+Pj4gSW50ZWwgT1RDCj4gPj4KCi0t IApWaWxsZSBTeXJqw6Rsw6QKSW50ZWwgT1RDCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3Rz LmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2RyaS1kZXZlbAo= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from mga09.intel.com ([134.134.136.24]:15053 "EHLO mga09.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753108AbdCPRkH (ORCPT ); Thu, 16 Mar 2017 13:40:07 -0400 Date: Thu, 16 Mar 2017 19:36:56 +0200 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= To: "Sharma, Shashank" Cc: Brian Starkey , Local user for Liviu Dudau , dri-devel@lists.freedesktop.org, linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, mihail.atanassov@arm.com, "Cyr, Aric" , "Wentland, Harry" , Alex Deucher Subject: Re: DRM Atomic property for color-space conversion Message-ID: <20170316173656.GI31595@intel.com> References: <20170131123329.GB24500@e106950-lin.cambridge.arm.com> <20170131151546.GT31595@intel.com> <20170131155541.GF11506@e106950-lin.cambridge.arm.com> <20170316140725.GF31595@intel.com> <0cff6bab-7593-d3d2-f3b5-71dc21669dab@intel.com> <20170316143059.GG31595@intel.com> <20170316143721.GN6268@e110455-lin.cambridge.arm.com> <20170316155501.GA25006@e106950-lin.cambridge.arm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: Sender: linux-media-owner@vger.kernel.org List-ID: On Thu, Mar 16, 2017 at 07:05:12PM +0200, Sharma, Shashank wrote: > Regards > > Shashank > > > On 3/16/2017 5:55 PM, Brian Starkey wrote: > > Hi, > > > > On Thu, Mar 16, 2017 at 05:14:07PM +0200, Sharma Shashank wrote: > >> Regards > >> > >> Shashank > >> > >> > >> On 3/16/2017 4:37 PM, Local user for Liviu Dudau wrote: > >>> On Thu, Mar 16, 2017 at 04:30:59PM +0200, Ville Syrjälä wrote: > >>>> On Thu, Mar 16, 2017 at 04:20:29PM +0200, Sharma, Shashank wrote: > >>>>> Regards > >>>>> > >>>>> Shashank > >>>>> > >>>>> > >>>>> On 3/16/2017 4:07 PM, Ville Syrjälä wrote: > >>>>>> On Tue, Jan 31, 2017 at 03:55:41PM +0000, Brian Starkey wrote: > >>>>>>> On Tue, Jan 31, 2017 at 05:15:46PM +0200, Ville Syrjälä wrote: > >>>>>>>> On Tue, Jan 31, 2017 at 12:33:29PM +0000, Brian Starkey wrote: > >>>>>>>>> Hi, > >>>>>>>>> > >>>>>>>>> On Mon, Jan 30, 2017 at 03:35:13PM +0200, Ville Syrjälä wrote: > >>>>>>>>>> On Fri, Jan 27, 2017 at 05:23:24PM +0000, Brian Starkey wrote: > >>>>>>>>>>> Hi, > >>>>>>>>>>> > >>>>>>>>>>> We're looking to enable the per-plane color management > >>>>>>>>>>> hardware in > >>>>>>>>>>> Mali-DP with atomic properties, which has sparked some > >>>>>>>>>>> conversation > >>>>>>>>>>> around how to handle YCbCr formats. > >>>>>>>>>>> > >>>>>>>>>>> As it stands today, it's assumed that a driver will > >>>>>>>>>>> implicitly "do the > >>>>>>>>>>> right thing" to display a YCbCr buffer. > >>>>>>>>>>> > >>>>>>>>>>> YCbCr data often uses different gamma curves and signal > >>>>>>>>>>> ranges (e.g. > >>>>>>>>>>> BT.609, BT.701, BT.2020, studio range, full-range), so its > >>>>>>>>>>> desirable > >>>>>>>>>>> to be able to explicitly control the YCbCr to RGB conversion > >>>>>>>>>>> process > >>>>>>>>>>> from userspace. > >>>>>>>>>>> > >>>>>>>>>>> We're proposing adding a "CSC" (color-space conversion) > >>>>>>>>>>> property to > >>>>>>>>>>> control this - primarily per-plane for framebuffer->pipeline > >>>>>>>>>>> CSC, but > >>>>>>>>>>> perhaps one per CRTC too for devices which have an RGB > >>>>>>>>>>> pipeline and > >>>>>>>>>>> want to output in YUV to the display: > >>>>>>>>>>> > >>>>>>>>>>> Name: "CSC" > >>>>>>>>>>> Type: ENUM | ATOMIC; > >>>>>>>>>>> Enum values (representative): > >>>>>>>>>>> "default": > >>>>>>>>>>> Same behaviour as now. "Some kind" of YCbCr->RGB conversion > >>>>>>>>>>> for YCbCr buffers, bypass for RGB buffers > >>>>>>>>>>> "disable": > >>>>>>>>>>> Explicitly disable all colorspace conversion (i.e. use an > >>>>>>>>>>> identity matrix). > >>>>>>>>>>> "YCbCr to RGB: BT.709": > >>>>>>>>>>> Only valid for YCbCr formats. CSC in accordance with BT.709 > >>>>>>>>>>> using [16..235] for (8-bit) luma values, and [16..240] for > >>>>>>>>>>> 8-bit chroma values. For 10-bit formats, the range > >>>>>>>>>>> limits are > >>>>>>>>>>> multiplied by 4. > >>>>>>>>>>> "YCbCr to RGB: BT.709 full-swing": > >>>>>>>>>>> Only valid for YCbCr formats. CSC in accordance with > >>>>>>>>>>> BT.709, > >>>>>>>>>>> but using the full range of each channel. > >>>>>>>>>>> "YCbCr to RGB: Use CTM":* > >>>>>>>>>>> Only valid for YCbCr formats. Use the matrix applied via > >>>>>>>>>>> the > >>>>>>>>>>> plane's CTM property > >>>>>>>>>>> "RGB to RGB: Use CTM":* > >>>>>>>>>>> Only valid for RGB formats. Use the matrix applied via the > >>>>>>>>>>> plane's CTM property > >>>>>>>>>>> "Use CTM":* > >>>>>>>>>>> Valid for any format. Use the matrix applied via the > >>>>>>>>>>> plane's > >>>>>>>>>>> CTM property > >>>>>>>>>>> ... any other values for BT.601, BT.2020, RGB to YCbCr etc. > >>>>>>>>>>> etc. as > >>>>>>>>>>> they are required. > >>>>>>>>>> Having some RGB2RGB and YCBCR2RGB things in the same property > >>>>>>>>>> seems > >>>>>>>>>> weird. I would just go with something very simple like: > >>>>>>>>>> > >>>>>>>>>> YCBCR_TO_RGB_CSC: > >>>>>>>>>> * BT.601 > >>>>>>>>>> * BT.709 > >>>>>>>>>> * custom matrix > >>>>>>>>>> > >>>>>>>>> I think we've agreed in #dri-devel that this CSC property > >>>>>>>>> can't/shouldn't be mapped on-to the existing (hardware > >>>>>>>>> implementing > >>>>>>>>> the) CTM property - even in the case of per-plane color > >>>>>>>>> management - > >>>>>>>>> because CSC needs to be done before DEGAMMA. > >>>>>>>>> > >>>>>>>>> So, I'm in favour of going with what you suggested in the > >>>>>>>>> first place: > >>>>>>>>> > >>>>>>>>> A new YCBCR_TO_RGB_CSC property, enum type, with a list of fixed > >>>>>>>>> conversions. I'd drop the custom matrix for now, as we'd need > >>>>>>>>> to add > >>>>>>>>> another property to attach the custom matrix blob too. > >>>>>>>>> > >>>>>>>>> I still think we need a way to specify whether the source data > >>>>>>>>> range > >>>>>>>>> is broadcast/full-range, so perhaps the enum list should be > >>>>>>>>> expanded > >>>>>>>>> to all combinations of BT.601/BT.709 + broadcast/full-range. > >>>>>>>> Sounds reasonable. Not that much full range YCbCr stuff out there > >>>>>>>> perhaps. Well, apart from jpegs I suppose. But no harm in being > >>>>>>>> able > >>>>>>>> to deal with it. > >>>>>>>> > >>>>>>>>> (I'm not sure what the canonical naming for > >>>>>>>>> broadcast/full-range is, > >>>>>>>>> we call them narrow and wide) > >>>>>>>> We tend to call them full vs. limited range. That's how our > >>>>>>>> "Broadcast RGB" property is defined as well. > >>>>>>>> > >>>>>>> OK, using the same ones sounds sensible. > >>>>>>> > >>>>>>>>>> And trying to use the same thing for the crtc stuff is > >>>>>>>>>> probably not > >>>>>>>>>> going to end well. Like Daniel said we already have the > >>>>>>>>>> 'Broadcast RGB' property muddying the waters there, and that > >>>>>>>>>> stuff > >>>>>>>>>> also ties in with what colorspace we signal to the sink via > >>>>>>>>>> infoframes/whatever the DP thing was called. So my gut > >>>>>>>>>> feeling is > >>>>>>>>>> that trying to use the same property everywhere will just end up > >>>>>>>>>> messy. > >>>>>>>>> Yeah, agreed. If/when someone wants to add CSC on the output > >>>>>>>>> of a CRTC > >>>>>>>>> (after GAMMA), we can add a new property. > >>>>>>>>> > >>>>>>>>> That makes me wonder about calling this one > >>>>>>>>> SOURCE_YCBCR_TO_RGB_CSC to > >>>>>>>>> be explicit that it describes the source data. Then we can > >>>>>>>>> later add > >>>>>>>>> SINK_RGB_TO_YCBCR_CSC, and it will be reasonably obvious that its > >>>>>>>>> value describes the output data rather than the input data. > >>>>>>>> Source and sink have a slight connotation in my mind wrt. the > >>>>>>>> box that > >>>>>>>> produces the display signal and the box that eats the signal. > >>>>>>>> So trying > >>>>>>>> to use the same terms to describe the internals of the pipeline > >>>>>>>> inside > >>>>>>>> the "source box" migth lead to some confusion. But we do > >>>>>>>> probably need > >>>>>>>> some decent names for these to make the layout of the pipeline > >>>>>>>> clear. > >>>>>>>> Input/output are the other names that popped to my mind but > >>>>>>>> those aren't > >>>>>>>> necessarily any better. But in the end I think I could live > >>>>>>>> with whatever > >>>>>>>> names we happen to pick, as long as we document the pipeline > >>>>>>>> clearly. > >>>>>>>> > >>>>>>>> Long ago I did wonder if we should just start indexing these > >>>>>>>> things > >>>>>>>> somehow, and then just looking at the index should tell you the > >>>>>>>> order > >>>>>>>> of the operations. But we already have the ctm/gamma w/o any > >>>>>>>> indexes so > >>>>>>>> that idea probably isn't so great anymore. > >>>>>>>> > >>>>>>>>> I want to avoid confusion caused by ending up with two > >>>>>>>>> {CS}_TO_{CS}_CSC properties, where one is describing the data > >>>>>>>>> to the > >>>>>>>>> left of it, and the other describing the data to the right of > >>>>>>>>> it, with > >>>>>>>>> no real way of telling which way around it is. > >>>>>>>> Not really sure what you mean. It should always be > >>>>>>>> _to__csc. > >>>>>>> Agreed, left-to-right. But for instance on a CSC property > >>>>>>> representing > >>>>>>> a CRTC output CSC (just before hitting the connector), which > >>>>>>> happens > >>>>>>> to be converting RGB to YCbCr: > >>>>>>> > >>>>>>> CRTC -> GAMMA -> RGB_TO_YCBCR_CSC > >>>>>>> > >>>>>>> ...the enum value "BT.601 Limited" means that the data on the > >>>>>>> *right* > >>>>>>> of RGB_TO_YCBCR_CSC is "BT.601 Limited" > >>>>>>> > >>>>>>> On the other hand for a CSC on the input of a plane, which > >>>>>>> happens to > >>>>>>> be converting YCbCr to RGB: > >>>>>>> > >>>>>>> RAM -> YCBCR_TO_RGB_CSC -> DEGAMMA > >>>>>>> > >>>>>>> ...the enum value "BT.601 Limited" means that the data on the > >>>>>>> *left* > >>>>>>> of YCBCR_TO_RGB_CSC is "BT.601 Limited". > >>>>>>> > >>>>>>> Indicating in the property name whether its value is describing the > >>>>>>> data on the left or the right is needed (and I don't think > >>>>>>> inferring > >>>>>>> that "it's always the YCBCR one" is the correct approach). > >>>>>>> > >>>>>>> In my example above, "SOURCE_xxx" would mean the enum value is > >>>>>>> describing the "source" data (i.e. the data on the left) and > >>>>>>> "SINK_xxx" would mean the enum value is describing the "sink" data > >>>>>>> (i.e. the data on the right). This doesn't necessarily need to > >>>>>>> infer a > >>>>>>> particular point in the pipeline. > >>>>>> Right, so I guess you want the values to be named " to " as > >>>>>> well? > >>>>>> Yes, I think we'll be wanting that as well. > >>>>>> > >>>>>> So what we might need is something like: > >>>>>> enum YCBCR_TO_RGB_CSC > >>>>>> * YCbCr BT.601 limited to RGB BT.709 full > >>>>>> * YCbCr BT.709 limited to RGB BT.709 full >>>>>> likely default value IMO> > >>>>>> * YCbCr BT.601 limited to RGB BT.2020 full > >>>>>> * YCbCr BT.709 limited to RGB BT.2020 full > >>>>>> * YCbCr BT.2020 limited to RGB BT.2020 full > >>>>>> > >>>>>> And thanks to BT.2020 we'll need a RGB->RGB CSC property as well. > >>>>>> Eg: > >>>>>> enum RGB_TO_RGB_CSC > >>>>>> * bypass (or separate 709->709, 2020->2020?) >>>>>> default> > >>>>>> * RGB BT.709 full to RGB BT.2020 full > > > > I like this approach, from a point of view of being explicit and > > discoverable by userspace. It also happens to map quite nicely to our > > hardware... we have a matrix before degamma, so we could do a > > CSC + Gamut conversion there in one go, which is apparently not 100% > > mathematically correct, but in general is good enough. > > > > ... however having talked this over a bit with someone who understands > > the detail a lot better than me, it sounds like the "correct" thing to > > do as per the spec is: > > > > CSC -> DEGAMMA -> GAMUT > > > > e.g. > > > > YCbCr bt.601 limited to RGB bt.601 full -> degamma -> > > RGB bt.601 full to RGB bt.709 full > > > > So that sounds like what we need to support in the API, and also > > sounds more like the "separate properties" approach. > I agree. > > > >>>>>> > >>>>>> Alternatives would involve two properties to define the input and > >>>>>> output > >>>>>> from the CSC separately, but then you lose the capability to see > >>>>>> which > >>>>>> combinations are actually supoorted. > >>>>> I was thinking about this too, or would it make more sense to > >>>>> create two > >>>>> properties: > >>>>> - one for gamut mapping (cases like RGB709->RGB2020) > >>>>> - other one for Color space conversion (cases lile YUV 709 -> RGB > >>>>> 709) > >>>>> > >>>>> Gamut mapping can represent any of the fix function mapping, > >>>>> wereas CSC > >>>>> can bring up any programmable matrix > >>>>> > >>>>> Internally these properties can use the same HW unit or even same > >>>>> function. > >>>>> Does it sound any good ? > > > > It seems to me that actually the two approaches can be combined into > > the same thing: > > * We definitely need a YCbCr-to-RGB conversion before degamma > > (for converting YUV data to RGB, in some flavour) > > * We definitely need an RGB-to-RGB conversion after gamma to handle > > 709 layers blended with Rec.2020. > > The exact conversion each of those properties represents (CSC + gamut, > > CSC only, gamut only) can be implicit in the enum name. > > > > For hardware which has a fixed-function CSC before DEGAMMA with a > > matrix after DEGAMMA, I'd expect to see something like below. None of > > the YCBCR_TO_RGB_CSC values include a gamut conversion, because that > > is instead exposed with the RGB_TO_RGB_CSC property (which represents > > the hardware matrix) > > > > YCBCR_TO_RGB_CSC (before DEGAMMA): > > YCbCr BT.601 limited to RGB BT.601 full > > YCbCr BT.709 limited to RGB BT.709 full > > YCbCr BT.2020 limited to RGB BT.2020 full > > > > RGB_TO_RGB_CSC (after DEGAMMA): > > RGB BT.601 full to RGB BT.709 full > > RGB BT.709 full to RGB BT.2020 full > > > > > > On the other hand, on hardware which does a CSC + Gamut conversion in > > one go, before DEGAMMA (like ours), you might have: > > > > YCBCR_TO_RGB_CSC (before DEGAMMA): > > YCbCr BT.601 limited to RGB BT.601 full > > YCbCr BT.601 limited to RGB BT.709 full > > YCbCr BT.709 limited to RGB BT.709 full > > YCbCr BT.2020 limited to RGB BT.2020 full > > > > RGB_TO_RGB_CSC (after DEGAMMA): > > Not supported > > > > Userspace can parse the two properties to figure out its options to > > get from desired input -> desired output. It is perhaps a little > > verbose, but it's descriptive and flexible. > > > Seems to be a good idea, Ville ? Looks pretty sane to me. Though how we'll do the degamma/gamma is rather unclear still. I think we might be looking at two variants of hardware: - A fully programmable one with separate stages: csc -> degamma -> gamut -> gamma - A totally fixed one with just a few different variants of the pipeline baked into the hardware If we want to expose the gamma/degamma to the user, how exactly are we going to do that with the latter form or hardware. I guess we could specify that if the degamma property is not exposed, there will be an implicit degamma stage between the two csc and gamut. And if it is exposed the output from the first csc is non-linear and thus needs the degamma programmed to make it so before the gamut mapping. And perhaps a similar rule could work for the gamma; If it's present the output from the gamut mapping is expected to be linear, and otherwise non-linear. Not quite sure about this. In fact I don't yet know what our hardware would output from the end of the fixed pipeline. > > - Shashank > >>>> It's certainly possible. One problem is that we can't inform userspace > >>>> upfront which combinations are supported. Whether that's a real > >>>> problem > >>>> I'm not sure. With atomic userspace can of course check upfront if > >>>> something can be done or not, but the main problem is then coming up > >>>> with a fallback strategy that doesn't suck too badly. > >>>> > > > > The approach above helps limit the set exposed to userspace to be only > > those which are supported - because devices which don't have separate > > hardware for the two stages won't expose values for both. > > > >>>> Anyways, I don't think I have any strong favorites here. Would be nice > >>>> to hear what everyone else thinks. > >>> I confess to a lack of experience in the subject here, but what is > >>> the more common > >>> request coming from userspace: converting YUV <-> RGB but keeping > >>> the gammut mapping > >>> separate, or YUV (gammut x) <-> RGB (gammut y) ? In other words: I > >>> can see the usefulness > >>> of having an explicit way of decomposing the color mapping process > >>> and control the > >>> parameters, but how often do apps or compositors go through the > >>> whole chain? > >> Right now, more or less the interest is on the RGB->YUV conversion > >> side, coz till now BT 2020 gamut was not in > >> picture. REC 601 and 709 have very close gamuts, so it was ok to > >> blend frames mostly without bothering about > >> gamut, but going fwd, ones REC 2020 comes into picture, we need to > >> bother about mapping gamuts too, else > >> blending Rec709 buffers and Rec2020 buffers together would cause very > >> visible gamut mismatch. > >> > >> So considering futuristic developments, it might be ok to consider > >> both. Still, as Ville mentioned, it would be good > >> to hear from other too. > >> > > > > Yeah I agree that we definitely need to consider both for anything we > > come up with now. > > > > Cheers, > > Brian > > > >> - Shashank > >>> > >>> Best regards, > >>> Liviu > >>> > >>>> -- > >>>> Ville Syrjälä > >>>> Intel OTC > >> -- Ville Syrjälä Intel OTC