BTIC1G - cr88192/bgbtech_misc GitHub Wiki

BTIC1G Goals:

  • Simple Encoder
  • Bounded worst case bitrate
  • Incremental images
  • Inline image data
Will aim to have a lower average bitrate than 1C.

Colorspace:

  • Either YCbCr or a scaled RCT.
  • YCbCr:
    • Y=( 0.35R+0.50G+0.15B)
    • U=(-0.17R-0.33G+0.50B)+128
    • V=( 0.50R-0.42G-0.08B)+128
  • ScRCT
    • Y=(0.25R+0.50G+0.25B)
    • U=(0.50B-0.50G)+128
    • V=(0.50R-0.50G)+128
Block Color
  • 23 bit pair (YUV23A):
    • X: 1 (0)
    • Y: 7
    • D: 6
    • U: 5
    • V: 5
  • 22 bit pair (YUV22B):
    • X: 1 (0)
    • M: 2 (Mode)
      • 0: Flat (Simple Case: D=0)
        • Bits within D are used for special cases.
      • 1: 2x2x2
      • 2: 4x4x1
      • 3: 4x4x2
    • Y: 7
    • D: 6
    • U: 4
    • V: 4
  • 15 bit flat color (YUV15):
    • X: 1
    • Y: 7
    • U: 4
    • V: 4
YUV specifies the centroid color (RCT), and d=Ymax-Yavg.
  • Both Y and D will be linear.
  • Y and D are normally unpacked with high bits folded to low-bits to make 8-bit values.
UV Points:
  • UV points will follow curves.
  • 3-bit:
    • 0 56 96 120 128 136 160 200
  • 4-bit:
    • 0 30 56 78 96 110 120 126 128 130 136 146 160 178 200 226
  • 5-bit:
    • 0 15 30 43 56 67 78 87 96 103 110 115 120 123 126 127
    • 128 129 130 133 136 141 146 153 160 169 178 189 200 213 226 241
Extension: HF Color 0 (YUV22B Based):
    • X: 1 (0)
    • M=0: 2 (Mode, Escape)
    • Dx: 7 (Reserved)
    • M: 6
      • 0: Invalid
      • 1: 4x4x2
      • 2: 4x4x3
      • 16: HF-Flat
      • 17: 4x4x2 (Dyuv)
      • 18: 4x4x2Y+2x2U+2x2V
    • Y: 8
    • U: 8
    • V: 8
    • If(M!=16)
      • D: 8
    • If((M&16) && (M!=16))
      • Du: 8
      • Dv: 8
Pixel Data:
  • Xsz x Ysz x Bits
  • 1bpp
    • 0=Low Color
    • 1=High Color
  • 2bpp
    • 0=Low
    • 1=2/3 Low + 1/3 High
    • 2=1/3 Low + 2/3 High
    • 3=High
Commands:
  • 00-7F: Raw Block
    • / 23-bit color, 4x4x2bpp (if d!=0)
    • YUV22B, followed by pixel data.
    • Special Case: 16-bit Flat Block:
      • 000Y-YYYY YUUU-VVV1
    • Special Case 2: 24-bit Flat Block 2:
      • 000Y-YYYY YYYU-VP10 UUUU-VVVV
        • Y=8-bit, U/V=5+1 bit (P bit is shared between U and V).
        • The U/V bits located in the D field are least-significant bits.
  • 80-8F: Skip
  • 90-9F: Flat Color
    • Run of single flat color (YUV15)
  • A0-AF: Discrete Colors
    • Each block represented by a single color.
  • B0-BF: 2x2x2bpp
  • C0-CF: 4x4x1bpp
  • D0-DF: 4x4x2bpp
    • YUV23 color-point, followed by pixel data.
  • E0-FF: Extended Commands
    • E0: End Of Data
    • E1-E6: Reserved for markers.
    • E8: Skip+Translate
      • High 3 bits:
        • 0=Extended Skip (13 bit)
          • 000n-nnnn nnnn-nnnn
        • 1=Skip+Translate (5-bit), Y:4 (Bias=8), X:4 (Bias=8)
          • 001n-nnnn yyyy-xxxx
        • 2=Skip+Translate (9-bit), Y:6 (Bias=32), X:6 (Bias=32)
          • 010n-nnnn nnnn-yyyy yyxx-xxxx
    • E9: Set Controller
    • EA: Extended Block Commands
      • ooon-nnnn
      • 00-1F: Raw Blocks With Differential Coding
        • Each block is encoded as a raw block.
        • Color.X may be used for differential colors.
For blocks, Color.X indicates the use of differential colors:
  • 0: Discrete color point
  • 1: Delta from prior colors.
YUV15:
  • Discrete: Implicitly sets D to 0.
  • Differential: Does not effect D.
Differential values will be center-biased (Identity=128), operating on logical 8-bit values and will be 8-bit modular.

BTIC1G2 (Drop)

Possible bitstream coded version.

Bitstream will be encoded is MSB first order.

Superseded / Became: BTIC1H

AdRice:

  • Will have a unary prefix (Q) of 0+ 1 bits, terminated by a 0 bit.
  • This will be followed by a k bit suffix (j).
    • Value=(Q<<k)|j;
  • ></k)|j;
  • >0)k=k-1;
    • 1: k is unchanged.
    • 2+: k=k+log2(Q).
Here, AdRice contexts will start with an initial value of 2 unless specified otherwise.

Signed Rice values will have the sign folded into the LSB (0, -1, 1, -2, 2, ...).

Normal Colors are 7655, flat colors are 755.

  • Color points are encoded with a leading bit:
    • 0: Discrete Color, encoded as 7655 or 755.
    • 1: Diff Color, encoded as 3 or 4 AdRice coded deltas.
      • Each AdRice point has its own context.
  • 7655D: Will mean 7655 or Diff (4 value).
  • 755D: Will mean 755 or Diff (3 value).
Commands will start with a 3-bit tag:
  • 0: Raw Block
    • 2 Bit Mode Follows
    • M=0: Flat Color, 755D Color point follows.
    • M=1: 2x2x2bpp, Followed by 7655D and 2x2x2bpp.
    • M=2: 4x4x1bpp, Followed by 7655D and 4x4x1bpp.
    • M=3: 4x4x2bpp, Followed by 7655D and 4x4x2bpp.
  • 1: Skip
    • Length Follows
    • Translate bit follows:
      • 0: No Translate
      • 1: Translate
        • AdRice coded X/Y offsets follow.
  • 2: Flat Color
    • Length Follows
    • Followed by 755D point.
  • 3: Discrete Colors
    • Length Follows
    • Each block given as a 755D point.
  • 4: 2x2x2bpp
  • 5: 4x4x1bpp
  • 6: 4x4x2bpp
    • Length Follows
    • Each 7655D point follows.
    • Followed by pixel data for each block.
  • 7: Escape
    • Another 5 bits follows.
Possible could be to use 6-bit MTF+Rice for commands:
  • High 3: Command
  • Low 3: Depends on command
    • Raw: Mode (4-7=Reserved)
    • Skip, TCC
      • T=Translate
      • CC=Count, 0-2: 1-3 blocks, 3=Length follows
    • Pixel Blocks
      • Encodes a length, where 0-6=1-7 blocks, 7=Length follows.
    • Escape, Encodes op bits.
⚠️ **GitHub.com Fallback** ⚠️