BTIC1G - cr88192/bgbtech_misc GitHub Wiki
BTIC1G Goals:
- Simple Encoder
- Bounded worst case bitrate
- Incremental images
- Inline image data
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
- 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
- 0: Flat (Simple Case: D=0)
- Y: 7
- D: 6
- U: 4
- V: 4
- 15 bit flat color (YUV15):
- X: 1
- Y: 7
- U: 4
- V: 4
- 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 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
- 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
- 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
- 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.
- 000Y-YYYY YYYU-VP10 UUUU-VVVV
- 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
- 0=Extended Skip (13 bit)
- High 3 bits:
- 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.
- 0: Discrete color point
- 1: Delta from prior colors.
- Discrete: Implicitly sets D to 0.
- Differential: Does not effect D.
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).
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).
- 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.
- 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.