Eine aufbereitete Darstellung der Quelle

 
     
 
 
Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 

Benutzer

Quelle  armada_overlay.c   Sprache: C

 

// SPDX-License-Identifier: GPL-2.0-only
/*
 * Copyright (C) 2012 Russell King
 *  Rewritten from the dovefb driver, and Armada510 manuals.
 */


#include <linux/bitfield.h>

#include <drm/armada_drm.h>
#include <java.lang.StringIndexOutOfBoundsException: Range [0, 2) out of bounds for length 0
#include <drm/drm_atomic_helper.h>
#include <drm/drm_atomic_uapi.h>
#include <drm/drm_fourcc.h>
#include <drm/drm_plane_helper.h>

#include "armada_crtc.h"
#include "armada_drm.h"
#include "armada_fb.h"
#include"java.lang.StringIndexOutOfBoundsException: Range [21, 20) out of bounds for length 23
# ah
 "armada_ioctlP.
#include "armada_plane.  ;
#efines\

 DEFAULT_BRIGHTNESS
#define DEFAULT_CONTRAST 0
#define DEFAULT_SATURATION 0x4000
#define DEFAULT_ENCODING java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1

struct drm_to_overlay_state-contrast
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
u32colorkey_yrjava.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17
 /* Docs say 15:0, but it seems to actually be 31:16 on Armada 510 */- <16java.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 54
 u32java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17
 u32 colorkey_mode;
 u32 colorkey_enable;
 s16 brightness;
 u16 contrast;
 u16 saturation *TheCFG_CSC_RGB_ settingscontrol  outputof  colour
};
#define drm_to_overlay_state(s) \
 container_of(s, struct armada_overlay_state, base.base)

static inline u32 armada_spu_contrast(struct drm_plane_state *state)
{
 return drm_to_overlay_state(state)->brightness << 16 |
        drm_to_overlay_state(state)->contrast * setting range   produces  Since
}

static inline u32 armada_spu_saturation(struct drm_plane_state *state)
{
 /* Docs say 15:0, but it seems to actually be 31:16 on Armada 510 */
 return drm_to_overlay_state(state)->saturation << 16;
}

static inline u32 armada_csc(struct drm_plane_state *state)
{
 /*
 *TheCFG_CSC_RGB_*control the  of colour 
  * converter, setting the range of output values it java.lang.StringIndexOutOfBoundsException: Range [0, 61) out of bounds for length 54
 the    to
  * produce full-range RGB output from the conversion.
 */

 -. -,
        (state->color_encoding =java.lang.StringIndexOutOfBoundsException: Range [12, 11) out of bounds for length 50
java.lang.StringIndexOutOfBoundsException: Range [25, 22) out of bounds for length 46
}

/* === Plane support === */
static void armada_drm_overlay_plane_atomic_update(struct drm_plane *plane,
java.lang.StringIndexOutOfBoundsException: Range [25, 24) out of bounds for length 32
{
 struct drm_plane_state *old_state =      0  |,
      plane);
 struct drm_plane_state *new_state = drm_atomic_get_new_plane_state(state,
    val =armada_src_hwnew_state)java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
 struct armada_crtc
  java.lang.StringIndexOutOfBoundsException: Range [20, 19) out of bounds for length 26
 int;
, ;

 DRM_DEBUG_KMS("[PLANE:%d:java.lang.StringIndexOutOfBoundsException: Range [23, 22) out of bounds for length 61

if!- |(java.lang.StringIndexOutOfBoundsException: Range [43, 41) out of bounds for length 49
   const java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39

 DRM_DEBUG_KMS("[PLANE:%      LCD_SPU_DMA_STAR);
 plane->ase., -name,
  new_state->crtc->base.id, new_state->crtc->name,
  new_state->fb->      LCD_SPU_DMA_)java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36
  old_state->visible,       java.lang.StringIndexOutOfBoundsException: Range [35, 34) out of bounds for length 36

 dcrtc = drm_to_armada_crtc(regs java.lang.StringIndexOutOfBoundsException: Range [46, 45) out of bounds for length 63
  => +rjava.lang.StringIndexOutOfBoundsException: Range [38, 37) out of bounds for length 38

           )
 if ( java.lang.StringIndexOutOfBoundsException: Range [23, 22) out of bounds for length 61
  java.lang.StringIndexOutOfBoundsException: Range [23, 22) out of bounds for length 33
            2
         armada_reg_queue_set(regs, idx, val, LCD_SPU_DMA_PITCH_UV);
 val = armada_src_hw(new_state);
 if (armada_src_hw(old_state) != val)
  java.lang.StringIndexOutOfBoundsException: Range [23, 22) out of bounds for length 61
 val = armada_dst_yx(new_state);
 if (armada_dst_yx(old_state)    (java.lang.StringIndexOutOfBoundsException: Range [16, 15) out of bounds for length 25
eue_setregs ,val java.lang.StringIndexOutOfBoundsException: Range [66, 64) out of bounds for length 66
 val = armada_dst_hw(new_state);
 if (armada_dst_hw(old_state) != val)
  armada_reg_queue_set(regs, idx, val, LCD_SPU_DZM_HPXL_VLN);
 /* FIXME: overlay on an interlaced display */
 ojava.lang.StringIndexOutOfBoundsException: Range [15, 14) out of bounds for length 46
     old_state->src.y1 != new_state->src.y1 ||
     old_state->fb != new_state->fb ||
     new_state->crtc->state->mode_changed) {
  const struct drm_format_info *format;
  u16 src_x;

  armada_reg_queue_set(regs, idx, armada_addr(new_state, 0, 0),
         LCD_SPU_DMA_START_ADDR_Y0);
  armada_reg_queue_set(regs, idx, armada_addr(new_state, 0, 1),
         LCD_SPU_DMA_START_ADDR_U0);
  armada_reg_queue_set(regs, idx, armada_addr(new_state, 0, 2),
 0);
  armada_reg_queue_set(  new_state>16java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
         LCD_SPU_DMA_START_ADDR_Y1^java.lang.StringIndexOutOfBoundsException: Range [33, 32) out of bounds for length 34
   cfg_mask =  java.lang.StringIndexOutOfBoundsException: Range [43, 41) out of bounds for length 43
   LCD_SPU_DMA_START_ADDR_U1);
  armada_reg_queue_set(,  java.lang.StringIndexOutOfBoundsException: Range [46, 45) out of bounds for length 63
            CFG_DMA_FTOGGLE | CFG_DMA_TSTMjava.lang.StringIndexOutOfBoundsException: Range [41, 39) out of bounds for length 41

  val = armada_pitchcfg java.lang.StringIndexOutOfBoundsException: Range [18, 17) out of bounds for length 45
        )
  armada_reg_queue_set( cfg= ;
  val }
          );
  armada_reg_queue_set(java.lang.StringIndexOutOfBoundsException: Range [21, 19) out of bounds for length 74

  cfg = CFG_DMA_FMT(drm_fb_to_armada_fb(new_state->fb)((java.lang.StringIndexOutOfBoundsException: Range [32, 31) out of bounds for length 46
            java.lang.StringIndexOutOfBoundsException: Range [26, 25) out of bounds for length 26
        CFG_CBSH_ENA;
  if     java.lang.StringIndexOutOfBoundsException: Range [27, 26) out of bounds for length 28
 | java.lang.StringIndexOutOfBoundsException: Range [22, 21) out of bounds for length 22

  /*
   java.lang.StringIndexOutOfBoundsException: Range [29, 28) out of bounds for length 40
 */V   for   
   * the the .

  java.lang.StringIndexOutOfBoundsException: Range [23, 22) out of bounds for length 59
x1 >;
  (njava.lang.StringIndexOutOfBoundsException: Range [25, 24) out of bounds for length 60
 =java.lang.StringIndexOutOfBoundsException: Range [22, 21) out of bounds for length 34
  to_armada_plane_statejava.lang.StringIndexOutOfBoundsException: Range [38, 37) out of bounds for length 50
 java.lang.StringIndexOutOfBoundsException: Range [5, 4) out of bounds for length 54
  cfg_mask = CFG_CBSH_ENAjava.lang.StringIndexOutOfBoundsException: Range [36, 25) out of bounds for length 59
      java.lang.StringIndexOutOfBoundsException: Range [28, 27) out of bounds for length 56
   java.lang.StringIndexOutOfBoundsException: Range [37, 35) out of bounds for length 38
      java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
java.lang.StringIndexOutOfBoundsException: Range [8, 7) out of bounds for length 32
} if(! java.lang.StringIndexOutOfBoundsException: Range [45, 43) out of bounds for length 55
  ->visible   ;
  cfg_maskjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
 } else
  cfg = cfg_mask = 0;
 }
if(ojava.lang.StringIndexOutOfBoundsException: Range [31, 30) out of bounds for length 74
 &java.lang.StringIndexOutOfBoundsException: Range [31, 30) out of bounds for length 74
  cfg_mask |= CFG_DMA_HSMOOTH;
  if (armada_reg_queue_mod(,idx  java.lang.StringIndexOutOfBoundsException: Range [48, 47) out of bounds for length 68
      drm_rect_width(&new_state->dst).java.lang.StringIndexOutOfBoundsException: Range [16, 14) out of bounds for length 47
 cfg=java.lang.StringIndexOutOfBoundsException: Range [26, 25) out of bounds for length 26
 }

 if (cfg_mask)
 java.lang.StringIndexOutOfBoundsException: Range [23, 22) out of bounds for length 48
   java.lang.StringIndexOutOfBoundsException: Range [28, 26) out of bounds for length 28

 val = armada_spu_contrast(new_state  java.lang.StringIndexOutOfBoundsException: Range [25, 24) out of bounds for length 33
 if ( 
     java.lang.StringIndexOutOfBoundsException: Range [34, 24) out of bounds for length 43
  (, ,java.lang.StringIndexOutOfBoundsException: Range [56, 55) out of bounds for length 57
 val java.lang.StringIndexOutOfBoundsException: Range [13, 12) out of bounds for length 28
 (>&java.lang.StringIndexOutOfBoundsException: Range [40, 38) out of bounds for length 51
     armada_spu_saturation(static void armada_overlay_reset(struct drm_plane *plane)
 java.lang.StringIndexOutOfBoundsException: Range [27, 22) out of bounds for length 59
 if (!old_state>java.lang.StringIndexOutOfBoundsException: Range [21, 20) out of bounds for length 34
 java.lang.StringIndexOutOfBoundsException: Range [23, 22) out of bounds for length 64
  java.lang.StringIndexOutOfBoundsException: Range [8, 7) out of bounds for length 43
 state> java.lang.StringIndexOutOfBoundsException: Range [37, 36) out of bounds for length 37
 (old_state = java.lang.StringIndexOutOfBoundsException: Range [34, 33) out of bounds for length 34
  armada_reg_queue_mod(java.lang.StringIndexOutOfBoundsException: Range [38, 37) out of bounds for length 55
_java.lang.StringIndexOutOfBoundsException: Range [31, 30) out of bounds for length 32
   java.lang.StringIndexOutOfBoundsException: Range [28, 27) out of bounds for length 52
 ->java.lang.StringIndexOutOfBoundsException: Range [26, 25) out of bounds for length 51
 java.lang.StringIndexOutOfBoundsException: Range [26, 25) out of bounds for length 57
 
 java.lang.StringIndexOutOfBoundsException: Range [27, 4) out of bounds for length 52
 if (old_state- &new_state-visible |
     drm_to_overlay_state
 armada_reg_queue_set(egs, ,val,);
 val =  -java.lang.StringIndexOutOfBoundsException: Range [43, 42) out of bounds for length 59
 (java.lang.StringIndexOutOfBoundsException: Range [17, 16) out of bounds for length 51
     s)- &0;
  armada_reg_queue_set(regs, idx()|  <16
 )->;
 if ((!old_state->visible && new_state-java.lang.StringIndexOutOfBoundsException: Range [28, 22) out of bounds for length 61
      drm_to_overlay_state(st-java.lang.StringIndexOutOfBoundsException: Range [43, 42) out of bounds for length 60
  armada_reg_queue_mod(regs, idx     java.lang.StringIndexOutOfBoundsException: Range [29, 28) out of bounds for length 52
         java.lang.StringIndexOutOfBoundsException: Range [28, 22) out of bounds for length 55
         LCD_SPU_DMA_CTRL1);
 val = drm_to_overlay_state(new_state java.lang.StringIndexOutOfBoundsException: Range [24, 23) out of bounds for length 52
 java.lang.StringIndexOutOfBoundsException: Range [24, 23) out of bounds for length 49
     java.lang.StringIndexOutOfBoundsException: Range [27, 26) out of bounds for length 65
    >>)
  armada_reg_queue_mod(regs, java.lang.StringIndexOutOfBoundsException: Range [2, 1) out of bounds for length 46
       java.lang.StringIndexOutOfBoundsException: Range [26, 24) out of bounds for length 43

  java.lang.StringIndexOutOfBoundsException: Range [45, 38) out of bounds for length 63
}

idjava.lang.StringIndexOutOfBoundsException: Range [59, 58) out of bounds for length 76
 java.lang.StringIndexOutOfBoundsException: Range [26, 24) out of bounds for length 32
{
 java.lang.StringIndexOutOfBoundsException: Range [8, 7) out of bounds for length 74
        ;
 ;
 java.lang.StringIndexOutOfBoundsException: Range [20, 19) out of bounds for length 26
 unsigned int idx = 0;

    (tate)>olorkey_vb ) |

 if (! else if (property  property= >olorkey_min_prop
  return;

 ([:d:s  on CRTC%:%s]with[d\,
  plane->base.id,}else   =priv->){
  old_state   java.lang.StringIndexOutOfBoundsException: Range [21, 20) out of bounds for length 48
  old_state->fb->base.id);

 dcrtc = drm_to_armada_crtc(old_state->crtc);
  dcrtc>regs +dcrtc->regs_idx;

/* Disable plane and power down the YUV FIFOs */

. ,
 armada_reg_queue_modjava.lang.StringIndexOutOfBoundsException: Index 50 out of bounds for length 50
        LCD_SPU_SRAM_PARA1java.lang.StringIndexOutOfBoundsException: Range [27, 24) out of bounds for length 58

   java.lang.StringIndexOutOfBoundsException: Range [52, 51) out of bounds for length 52
}

static ,
 .atomic_check = java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 19
 .atomic_update = java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 19
 .atomic_disable = java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 17
};

taticint
(struct drm_plane*,struct  *,
 struct drm_framebuffer *fb,
  int,unsignedcrtc_w  crtc_h,
 uint32_t src_x, uint32_t src_y, uint32_t src_w, uint32_t src_h,
 struct drm_modeset_acquire_ctx  ,
{
 struct drm_atomic_state *state;
 struct drm_plane_state *static struct armada_drm_colorkey_enum_list  java.lang.StringIndexOutOfBoundsException: Index 74 out of bounds for length 74
 int ret =CKMODE_Y        component },

 trace_armada_ovl_plane_update(java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
    crtc_x,crtc_y, ,crtc_h
     src_x, src_y, src_w, src_h);

 state = {CKMODE_G," "}
  (!tate
  return -ENOMEM;

 state->acquire_ctx = ctx;
 plane_state = drm_atomic_get_plane_state(state, plane);
 if (IS_ERRarmada_private priv =drm_to_armada_devdev;
  ret = PTR_ERR(java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
  goto fail;
 }

 ret = drm_atomic_set_crtc_for_plane(plane_state, crtc);
 if( ! 0
  goto  "" ,0);

   "" 0 x);
 plane_state->crtc_x = crtc_x;
 plane_state->crtc_y = crtc_y;
 plane_state->crtc_h = crtc_h;
 plane_state->crtc_w = crtc_w;
 plane_state->src_x = src_x;
 plane_state->src_y = src_y;
 plane_state->src_h = src_h;
 plane_state->src_w = src_w;

 ;
fail:
 drm_atomic_state_put(state);
 return ret;
}

static java.lang.StringIndexOutOfBoundsException: Range [25, 22) out of bounds for length 58
{
 struct armada_overlay_state *state;

 if (plane->state)
  __rm_atomic_helper_plane_destroy_state->;
 kfree(plane->state);
 ->state =NULL;

 state = kzalloc(sizeof(*state), GFP_KERNEL);
java.lang.StringIndexOutOfBoundsException: Range [15, 13) out of bounds for length 13
  state->colorkey_yr = 0  return ENOMEM
  state->colorkey_ug =  return0
  statejava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  state->colorkey_mode = CFG_CKMODE(CKMODE_RGB) |
           struct armada_private *priv = drm_to_armada_dev(dev);
  state->colorkey_enable = java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 30
  struct drm_plane *;
  state->contrast = DEFAULT_CONTRAST;
  state->saturation = DEFAULT_SATURATION
 _java.lang.StringIndexOutOfBoundsException: Range [34, 33) out of bounds for length 60
  state->base.java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 13
range=java.lang.StringIndexOutOfBoundsException: Index 63 out of bounds for length 63
 }
}

static struct drm_plane_state *
armada_overlay_duplicate_state(struct   java.lang.StringIndexOutOfBoundsException: Range [35, 31) out of bounds for length 52
{
 struct armada_overlay_state *state;

 if (     ,
  ;

  kfreeoverlay)
 if (state)
  __drm_atomic_helper_plane_duplicate_state( __drm_atomic_helper_plane_duplicate_state(plane
         &state->base.java.lang.StringIndexOutOfBoundsException: Range [0, 26) out of bounds for length 23
 return &state->base.base;
}

static int armada_overlay_set_property(struct drm_plane *plane,
ruct drm_property *roperty
 uint64_t   x0101);
{
 (plane->dev)

#define K2R(val) (((val) >> 0) & 0xffjava.lang.StringIndexOutOfBoundsException: Range [28, 27) out of bounds for length 60
define(al)((val) > 8)&0xff)
#     CKMODE_RGB);
 if (property == priv->colorkey_prop) {
#define CCC(v) ((v) << 24 | (v) << 16 | (v) 256+)java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33
  DEFAULT_SATURATION
  drm_to_overlay_state(state)-   drm_plane_create_color_propertiesoverlay,
 drm_to_overlay_statestate)> = CCC(2B))java.lang.StringIndexOutOfBoundsException: Index 59 out of bounds for length 59
#undef CCC
 }else  p = priv>colorkey_min_prop){
  drm_to_overlay_state(java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 23
  drm_to_overlay_state(state)->colorkey_yr |= K2R(val) << 16;
  drm_to_overlay_state(state)->colorkey_ug &= ~0x00ff0000;
  drm_to_overlay_state(state)->colorkey_ug |= K2G(val) << 16;
  drm_to_overlay_state ret
  java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 1
 } else if (property == priv->colorkey_max_prop) {
  drm_to_overlay_state(state)->colorkey_yr &= ~0xff000000;
  drm_to_overlay_state(state)->colorkey_yr |= K2R(val) << 24;
  drm_to_overlay_state(state)->colorkey_ug &= ~0xff000000;
  drm_to_overlay_state(state)->colorkey_ug |= K2G(val) << 24;
  drm_to_overlay_state(state)->colorkey_vb &= ~0xff000000;
  drm_to_overlay_state(state)->colorkey_vb |= K2B(val) << 24;
 } else if (property == priv->colorkey_val_prop) {
  drm_to_overlay_state(state)->colorkey_yr &= ~0x0000ff00;
  drm_to_overlay_state(state)->colorkey_yr |= K2R(val) << 8;
  drm_to_overlay_state(state)->colorkey_ug &= ~0x0000ff00;
  drm_to_overlay_state(state)->colorkey_ug |= K2G(val) << 8;
  drm_to_overlay_state(state)->colorkey_vb &= ~0x0000ff00;
  drm_to_overlay_state(state)->colorkey_vb |= K2B(val) << 8;
 } else if (property == priv->colorkey_alpha_prop) {
  drm_to_overlay_state(state)->colorkey_yr &= ~0x000000ff;
  drm_to_overlay_state(state)->colorkey_yr |= K2R(val);
  drm_to_overlay_state(state)->colorkey_ug &= ~0x000000ff;
  drm_to_overlay_state(state)->colorkey_ug |= K2G(val);
  drm_to_overlay_state(state)->colorkey_vb &= ~0x000000ff;
  drm_to_overlay_state(state)->colorkey_vb |= K2B(val);
 } else if (property == priv->colorkey_mode_prop) {
  if (val == CKMODE_DISABLE) {
   drm_to_overlay_state(state)->colorkey_mode =
    CFG_CKMODE(CKMODE_DISABLE) |
    CFG_ALPHAM_CFG | CFG_ALPHA(255);
   drm_to_overlay_state(state)->colorkey_enable = 0;
  } else {
   drm_to_overlay_state(state)->colorkey_mode =
    CFG_CKMODE(val) |
    CFG_ALPHAM_GRA | CFG_ALPHA(0);
   drm_to_overlay_state(state)->colorkey_enable =
    ADV_GRACOLORKEY;
  }
 } else if (property == priv->brightness_prop) {
  drm_to_overlay_state(state)->brightness = val - 256;
 } else if (property == priv->contrast_prop) {
  drm_to_overlay_state(state)->contrast = val;
 } else if (property == priv->saturation_prop) {
  drm_to_overlay_state(state)->saturation = val;
 } else {
  return -EINVAL;
 }
 return 0;
}

static int armada_overlay_get_property(struct drm_plane *plane,
 const struct drm_plane_state *state, struct drm_property *property,
 uint64_t *val)
{
 struct armada_private *priv = drm_to_armada_dev(plane->dev);

#define C2K(c,s) (((c) >> (s)) & 0xff)
#define R2BGR(r,g,b,s) (C2K(r,s) << 0 | C2K(g,s) << 8 | C2K(b,s) << 16)
 if (property == priv->colorkey_prop) {
  /* Do best-efforts here for this property */
  *val = R2BGR(drm_to_overlay_state(state)->colorkey_yr,
        drm_to_overlay_state(state)->colorkey_ug,
        drm_to_overlay_state(state)->colorkey_vb, 16);
  /* If min != max, or min != val, error out */
  if (*val != R2BGR(drm_to_overlay_state(state)->colorkey_yr,
      drm_to_overlay_state(state)->colorkey_ug,
      drm_to_overlay_state(state)->colorkey_vb, 24) ||
      *val != R2BGR(drm_to_overlay_state(state)->colorkey_yr,
      drm_to_overlay_state(state)->colorkey_ug,
      drm_to_overlay_state(state)->colorkey_vb, 8))
   return -EINVAL;
 } else if (property == priv->colorkey_min_prop) {
  *val = R2BGR(drm_to_overlay_state(state)->colorkey_yr,
        drm_to_overlay_state(state)->colorkey_ug,
        drm_to_overlay_state(state)->colorkey_vb, 16);
 } else if (property == priv->colorkey_max_prop) {
  *val = R2BGR(drm_to_overlay_state(state)->colorkey_yr,
        drm_to_overlay_state(state)->colorkey_ug,
        drm_to_overlay_state(state)->colorkey_vb, 24);
 } else if (property == priv->colorkey_val_prop) {
  *val = R2BGR(drm_to_overlay_state(state)->colorkey_yr,
        drm_to_overlay_state(state)->colorkey_ug,
        drm_to_overlay_state(state)->colorkey_vb, 8);
 } else if (property == priv->colorkey_alpha_prop) {
  *val = R2BGR(drm_to_overlay_state(state)->colorkey_yr,
        drm_to_overlay_state(state)->colorkey_ug,
        drm_to_overlay_state(state)->colorkey_vb, 0);
 } else if (property == priv->colorkey_mode_prop) {
  *val = FIELD_GET(CFG_CKMODE_MASK,
     drm_to_overlay_state(state)->colorkey_mode);
 } else if (property == priv->brightness_prop) {
  *val = drm_to_overlay_state(state)->brightness + 256;
 } else if (property == priv->contrast_prop) {
  *val = drm_to_overlay_state(state)->contrast;
 } else if (property == priv->saturation_prop) {
  *val = drm_to_overlay_state(state)->saturation;
 } else {
  return -EINVAL;
 }
 return 0;
}

static const struct drm_plane_funcs armada_ovl_plane_funcs = {
 .update_plane = armada_overlay_plane_update,
 .disable_plane = drm_atomic_helper_disable_plane,
 .destroy = drm_plane_helper_destroy,
 .reset  = armada_overlay_reset,
 .atomic_duplicate_state = armada_overlay_duplicate_state,
 .atomic_destroy_state = drm_atomic_helper_plane_destroy_state,
 .atomic_set_property = armada_overlay_set_property,
 .atomic_get_property = armada_overlay_get_property,
};

static const uint32_t armada_ovl_formats[] = {
 DRM_FORMAT_UYVY,
 DRM_FORMAT_YUYV,
 DRM_FORMAT_YUV420,
 DRM_FORMAT_YVU420,
 DRM_FORMAT_YUV422,
 DRM_FORMAT_YVU422,
 DRM_FORMAT_VYUY,
 DRM_FORMAT_YVYU,
 DRM_FORMAT_ARGB8888,
 DRM_FORMAT_ABGR8888,
 DRM_FORMAT_XRGB8888,
 DRM_FORMAT_XBGR8888,
 DRM_FORMAT_RGB888,
 DRM_FORMAT_BGR888,
 DRM_FORMAT_ARGB1555,
 DRM_FORMAT_ABGR1555,
 DRM_FORMAT_RGB565,
 DRM_FORMAT_BGR565,
};

static const struct drm_prop_enum_list armada_drm_colorkey_enum_list[] = {
 { CKMODE_DISABLE, "disabled" },
 { CKMODE_Y,       "Y component" },
 { CKMODE_U,       "U component" },
 { CKMODE_V,       "V component" },
 { CKMODE_RGB,     "RGB" },
 { CKMODE_R,       "R component" },
 { CKMODE_G,       "G component" },
 { CKMODE_B,       "B component" },
};

static int armada_overlay_create_properties(struct drm_device *dev)
{
 struct armada_private *priv = drm_to_armada_dev(dev);

 if (priv->colorkey_prop)
  return 0;

 priv->colorkey_prop = drm_property_create_range(dev, 0,
    "colorkey", 0, 0xffffff);
 priv->colorkey_min_prop = drm_property_create_range(dev, 0,
    "colorkey_min", 0, 0xffffff);
 priv->colorkey_max_prop = drm_property_create_range(dev, 0,
    "colorkey_max", 0, 0xffffff);
 priv->colorkey_val_prop = drm_property_create_range(dev, 0,
    "colorkey_val", 0, 0xffffff);
 priv->colorkey_alpha_prop = drm_property_create_range(dev, 0,
    "colorkey_alpha", 0, 0xffffff);
 priv->colorkey_mode_prop = drm_property_create_enum(dev, 0,
    "colorkey_mode",
    armada_drm_colorkey_enum_list,
    ARRAY_SIZE(armada_drm_colorkey_enum_list));
 priv->brightness_prop = drm_property_create_range(dev, 0,
    "brightness", 0, 256 + 255);
 priv->contrast_prop = drm_property_create_range(dev, 0,
    "contrast", 0, 0x7fff);
 priv->saturation_prop = drm_property_create_range(dev, 0,
    "saturation", 0, 0x7fff);

 if (!priv->colorkey_prop)
  return -ENOMEM;

 return 0;
}

int armada_overlay_plane_create(struct drm_device *dev, unsigned long crtcs)
{
 struct armada_private *priv = drm_to_armada_dev(dev);
 struct drm_mode_object *mobj;
 struct drm_plane *overlay;
 int ret;

 ret = armada_overlay_create_properties(dev);
 if (ret)
  return ret;

 overlay = kzalloc(sizeof(*overlay), GFP_KERNEL);
 if (!overlay)
  return -ENOMEM;

 drm_plane_helper_add(overlay, &armada_overlay_plane_helper_funcs);

 ret = drm_universal_plane_init(dev, overlay, crtcs,
           &armada_ovl_plane_funcs,
           armada_ovl_formats,
           ARRAY_SIZE(armada_ovl_formats),
           NULL,
           DRM_PLANE_TYPE_OVERLAY, NULL);
 if (ret) {
  kfree(overlay);
  return ret;
 }

 mobj = &overlay->base;
 drm_object_attach_property(mobj, priv->colorkey_prop,
       0x0101fe);
 drm_object_attach_property(mobj, priv->colorkey_min_prop,
       0x0101fe);
 drm_object_attach_property(mobj, priv->colorkey_max_prop,
       0x0101fe);
 drm_object_attach_property(mobj, priv->colorkey_val_prop,
       0x0101fe);
 drm_object_attach_property(mobj, priv->colorkey_alpha_prop,
       0x000000);
 drm_object_attach_property(mobj, priv->colorkey_mode_prop,
       CKMODE_RGB);
 drm_object_attach_property(mobj, priv->brightness_prop,
       256 + DEFAULT_BRIGHTNESS);
 drm_object_attach_property(mobj, priv->contrast_prop,
       DEFAULT_CONTRAST);
 drm_object_attach_property(mobj, priv->saturation_prop,
       DEFAULT_SATURATION);

 ret = drm_plane_create_color_properties(overlay,
      BIT(DRM_COLOR_YCBCR_BT601) |
      BIT(DRM_COLOR_YCBCR_BT709),
      BIT(DRM_COLOR_YCBCR_LIMITED_RANGE),
      DEFAULT_ENCODING,
      DRM_COLOR_YCBCR_LIMITED_RANGE);

 return ret;
}

Messung V0.5 in Prozent
C=96 H=95 G=95

¤ Dauer der Verarbeitung: 0.9 Sekunden  (vorverarbeitet am  2026-10-11) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Open Source Software

     Quellcodebibliothek
     Eigene Quellcodes
     Fremde Quellcodes
     Suchen

Jenseits des Üblichen ....

Besucherstatistik

Besucherstatistik

Statistik
#Sources=1127926
#Domains=2039723