r 8FC1ͬͯͳʹʁ
r ̎छྨͷѹॖϞʔυ
r J04ͰͲ͜·Ͱ͑Δʁ
r σʔλߏʹ͍ͭͯ
r ϔομΛಡΉ
r খ͞ͳ࣮Ͱʮ8FC1ը૾ʯΛ࡞Δ
r ·ͱΊͱ࣍ͷεςοϓ
0VUMJOF
࣍
Slide 9
Slide 9 text
8FC1ͬͯͳʹʁ
Slide 10
Slide 10 text
r 8FCαΠτͰར༻͢Δը૾ͷͨΊʹ࡞ΒΕͨը૾ѹॖܗࣜ
r ಉ͡ݟͨͰϑΝΠϧ͕খ͘͞ͳΓ͍͢ͷͰωοτϫʔΫΛ௨ͨ͡৴ʹద͍ͯ͠Δ
r എܠͷಁաΛαϙʔτ
‣ ΞΠίϯϩΰʹར༻͍͢͠
r ΞχϝʔγϣϯΛαϙʔτ
r छྨͷѹॖϞʔυ
‣ -PTTZʢඇՄٯѹॖʣʜࡉ෦ͷ࣭Θ͔ͣʹࣦΘΕΔ͕ඇৗʹαΠζ͕খ͘͞ͳΔ
‣ -PTTMFTTʢՄٯѹॖʣʜݩͷըૉΛશʹ෮ݩͰ͖Δ
8FC1ͬͯͳʹʁ
Slide 11
Slide 11 text
r -PTTZʢඇՄٯѹॖʣ
r ࡉ෦ͷ࣭Θ͔ͣʹࣦΘΕΔ͕ඇৗʹαΠζ͕খ͘͞ͳΔ
r ࣸਅͳͲओʹ+1&(͕ΘΕ͍ͯͨը૾ʹରͯ͠ޮՌ͕ߴ͍
r -PTTMFTTʢՄٯѹॖʣ
r ݩͷըૉΛશʹ෮ݩͰ͖Δ
r ΞΠίϯΠϥετͳͲ1/(ͷସͱͯ͑͠ɺΑΓখ͘͞ͳΓ͍͢
8FC1ͬͯͳʹʁ
̎छྨͷѹॖϞʔυ
Slide 12
Slide 12 text
8FC1ͬͯͳʹʁ
̎छྨͷѹॖϞʔυ
r -PTTZʢඇՄٯѹॖʣ
r ࡉ෦ͷ࣭Θ͔ͣʹࣦΘΕΔ͕ඇৗʹαΠζ͕খ͘͞ͳΔ
r ࣸਅͳͲओʹ+1&(͕ΘΕ͍ͯͨը૾ʹରͯ͠ޮՌ͕ߴ͍
r ར༻͕ଟ͍ɺπʔϧͷσϑΥϧτͷઃఆ-PTTZ͕΄ͱΜͲ
r -PTTMFTTʢՄٯѹॖʣ
r ݩͷըૉΛશʹ෮ݩͰ͖Δ
r ΞΠίϯΠϥετͳͲ1/(ͷସͱͯ͑͠ɺΑΓখ͘͞ͳΓ͍͢
Slide 13
Slide 13 text
8FC1ͬͯͳʹʁ
r 8FCαΠτͰར༻͢Δը૾ͷͨΊʹ࡞ΒΕͨը૾ѹॖܗࣜ
r ಉ͡ݟͨͰϑΝΠϧ͕খ͘͞ͳΓ͍͢ͷͰωοτϫʔΫΛ௨ͨ͡৴ʹద͍ͯ͠Δ
r എܠͷಁաΛαϙʔτ
‣ ΞΠίϯϩΰʹར༻͍͢͠
r ΞχϝʔγϣϯΛαϙʔτ
r छྨͷѹॖϞʔυ
‣ -PTTZʢඇՄٯѹॖʣʜࡉ෦ͷ࣭Θ͔ͣʹࣦΘΕΔ͕ඇৗʹαΠζ͕খ͘͞ͳΔ
‣ -PTTMFTTʢՄٯѹॖʣʜݩͷըૉΛશʹ෮ݩͰ͖Δ
Slide 14
Slide 14 text
x
J04ͰͲ͜·Ͱ͑Δʁ
Slide 15
Slide 15 text
r J04
‣ 4BGBSJ8,8FC7JFXJ04
IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOTBGBSJSFMFBTFOPUFTTBGBSJSFMFBTFOPUFT.FEJB
‣ *NBHF*0ʢ$(*NBHF4PVSDFʣ
‣ 6**NBHF EBUB
r Τϯίʔυʢ8FC1ը૾Λ࡞͢Δʣະαϙʔτ
J04ͰͲ͜·Ͱ͑Δʁ
#JU3FBEFS
4BNQMF$PEF
struct BitReader {
var bits: UInt32 = 0 // Buffered bits (LSB-first).
var nBits: UInt32 = 0 // Number of valid bits currently in `bits`.
var reader: ByteReader
init(data: Data) {
self.reader = ByteReader(data)
}
mutating func read(_ n: UInt32) throws -> UInt32 {
precondition((1...32).contains(n), "n must be in 1…32")
// Refill until we have enough bits.
while nBits < n {
guard let byte = try reader.read() else {
throw BitStreamError.unexpectedEOF
}
// Append the byte at the current high position.
bits |= UInt32(byte) << nBits
nBits += 8
}
// Mask out the requested bits.
let result = bits & ((1 << n) &- 1) // (&- avoids overflow trap when n == 32)
// Shift away the bits we've consumed.
bits >>= n
nBits -= n
return result
}
}
Slide 44
Slide 44 text
ը૾ͷαΠζ
Slide 45
Slide 45 text
ը૾ͷαΠζ
Slide 46
Slide 46 text
ը૾ͷαΠζ
Slide 47
Slide 47 text
ը૾ͷαΠζ
Slide 48
Slide 48 text
৭ม
Color Indexing
Subtract Green
Cross Color
Color Cache
Predictor
LZ77
τʔΫϯԽ
খ͞ͳ࣮ͰʮѹॖσʔλʯΛ࡞ͬͯΈΔ
)VGGNBO$PEJOH
)VGGNBO$PEJOH
Slide 49
Slide 49 text
খ͞ͳ࣮ͰʮѹॖσʔλʯΛ࡞ͬͯΈΔ
)VGGNBO%FDPEJOH
)VGGNBO%FDPEJOH
Color Cache
LZ77
τʔΫϯ෮ݩ
όοΫϦϑΝϨϯεղܾ
Color Indexing
Subtract Green
Cross Color
Predictor
ٯτϥϯεϑΥʔϜ
Slide 50
Slide 50 text
খ͞ͳ࣮ͰʮѹॖσʔλʯΛ࡞ͬͯΈΔ
Color Cache
LZ77
τʔΫϯ෮ݩ
όοΫϦϑΝϨϯεղܾ
Color Indexing
Subtract Green
Cross Color
Predictor
ٯτϥϯεϑΥʔϜ
)VGGNBO%FDPEJOH
)VGGNBO%FDPEJOH
ϋϑϚϯූ߸Խͷखॱ
ϋϑϚϯΛ࡞Δ
r ͯ͢γϯϘϧΛʮॏΈʹग़ݱසʯͷ༿ϊʔυͱͯ͠༻ҙ͢Δ
r ࠷খසͷϊʔυΛऔΓग़͠ɺϊʔυʢॏΈʹͭͷʣΛ࡞Δ
r ϊʔυΛू߹ʹՃ͑Δ
r ্هΛϊʔυʹͳΔ·Ͱ܁Γฦ͢
Slide 59
Slide 59 text
ϋϑϚϯූ߸Խ
ྫ#00,,&&1&3
B P
γϯϘϧ & 0 , 3 # 1
ग़ݱස
O K R
E
Slide 60
Slide 60 text
ϋϑϚϯූ߸Խ
ྫ#00,,&&1&3
B P
γϯϘϧ & 0 , 3 # 1
ग़ݱස
O K R
E
Slide 61
Slide 61 text
ϋϑϚϯූ߸Խ
ྫ#00,,&&1&3
B P
γϯϘϧ & 0 , 3 # 1
ग़ݱස
O K R
E
Slide 62
Slide 62 text
ϋϑϚϯූ߸Խ
ྫ#00,,&&1&3
B P
γϯϘϧ & 0 , 3 # 1
ग़ݱස
O K R
E
Slide 63
Slide 63 text
ϋϑϚϯූ߸Խ
ྫ#00,,&&1&3
B P
γϯϘϧ & 0 , 3 # 1
ग़ݱස
O K R
E
2
Slide 64
Slide 64 text
ϋϑϚϯූ߸Խ
ྫ#00,,&&1&3
B P
O
K R
E
Slide 65
Slide 65 text
ϋϑϚϯූ߸Խ
ྫ#00,,&&1&3
B P
O
K R
E
Slide 66
Slide 66 text
ϋϑϚϯූ߸Խ
ྫ#00,,&&1&3
B P
O
K R
E
Slide 67
Slide 67 text
ϋϑϚϯූ߸Խ
ྫ#00,,&&1&3
B P
O
K R
E
Slide 68
Slide 68 text
ϋϑϚϯූ߸Խ
ྫ#00,,&&1&3
B P
O
K R
E
Slide 69
Slide 69 text
ϋϑϚϯූ߸Խ
ྫ#00,,&&1&3
B P
O
K R
E
Slide 70
Slide 70 text
B P
O
K R
E
γϯϘϧ & 0 , 3 # 1
ग़ݱස
ූ߸
0
0 1 0 1
1
1
0
1
0
Slide 71
Slide 71 text
B P
O
K R
E
γϯϘϧ & 0 , 3 # 1
ग़ݱස
ූ߸ 00
0
0 1 0 1
1
1
0
1
0
Slide 72
Slide 72 text
γϯϘϧ & 0 , 3 # 1
ग़ݱස
ූ߸ 00 10
B P
O
K R
E
2
0
0 1 0 1
1
1
0
1
0
Slide 73
Slide 73 text
B P
O
K R
E
γϯϘϧ & 0 , 3 # 1
ग़ݱස
ූ߸ 00 10 010
0
0 1 0 1
1
1
0
1
0
Slide 74
Slide 74 text
γϯϘϧ & 0 , 3 # 1
ग़ݱස
ූ߸ 00 10 010 011 110 111
B P
O
K R
E
0
0 1 0 1
1
1
0
1
0
Slide 75
Slide 75 text
ϋϑϚϯූ߸Խ
ྫ#00,,&&1&3
γϯϘϧ & 0 , 3 # 1
ग़ݱස
ූ߸ 00 10 010 011 110 111
B O O K K E E P E R
100 101 101 01 01 00 00 110 00 111
Slide 76
Slide 76 text
B P
O
K R
E
γϯϘϧ & 0 , 3 # 1
ग़ݱස
ූ߸ 00 10 010 011 110 111
Slide 77
Slide 77 text
r ͍ූ߸ͷάϧʔϓ͔Βॱʹʢ͍ˠ͍ͷॱͰ༩ʣ
r ಉ͡ූ߸ͷதͰɺܾΊͨγϯϘϧॱʹैͬͯූ߸ͷࣙॻॱʢϏοτͷঢ
ॱʣͰ࿈൪ΛৼΔ
r ֤ූ߸ͷ࠷ॳͷίʔυɺલͷ͞ͷʮ࣍ͷʯΛϏοτࠨʹͣΒͯ͠։࢝
$BOPOJDBM)VGGNBO$PEJOH
ਖ਼४ʢਖ਼نԽʣϋϑϚϯූ߸Խ
Slide 78
Slide 78 text
ූ߸
CJU
CJU
B P
O
K R
E
$BOPOJDBM)VGGNBO$PEJOH
ਖ਼४ʢਖ਼نԽʣϋϑϚϯූ߸Խ
CJU
Slide 79
Slide 79 text
ූ߸
CJU
CJU
P R
O
B K
E
$BOPOJDBM)VGGNBO$PEJOH
ਖ਼४ʢਖ਼نԽʣϋϑϚϯූ߸Խ
CJU
Slide 80
Slide 80 text
ූ߸
CJU
CJU
P R
O
B K
E
$BOPOJDBM)VGGNBO$PEJOH
ਖ਼४ʢਖ਼نԽʣϋϑϚϯූ߸Խ
CJU
00 01
Slide 81
Slide 81 text
ූ߸
CJU
CJU
P R
O
B K
E
$BOPOJDBM)VGGNBO$PEJOH
ਖ਼४ʢਖ਼نԽʣϋϑϚϯූ߸Խ
CJU
00 01
100 101 110 111
Slide 82
Slide 82 text
B O O K K E E P E R
100 01 01 101 101 00 00 110 00 111
$BOPOJDBM)VGGNBO$PEJOH
ਖ਼४ʢਖ਼نԽʣϋϑϚϯූ߸Խ
[A:0, B:3, C:0, D:0, E:2, F:0, G:0, H:0, I:0, J:0,
K:3, L:0, M:0, N:0, O:2, P:3, Q:0, R:3, S:0, T:0,
U:0, V:0, W:0, X:0, Y:0, Z:0]
Slide 83
Slide 83 text
B O O K K E E P E R
100 01 01 101 101 00 00 110 00 111
$BOPOJDBM)VGGNBO$PEJOH
ਖ਼४ʢਖ਼نԽʣϋϑϚϯූ߸Խ
[0,3,0,0,2,0,0,0,0,0,3,0,0,0,2,3,0,3,0,0,0,0,0,0,0,0]
r ग़ݱ͢Δසͷߴ͍σʔλʹ͍ූ߸ΛׂΓͯΔ
r 8FC1ͰΘΕΔͷΧϊχΧϧϋϑϚϯූ߸Խ
r ΧϊχΧϧϋϑϚϯූ߸Խͷ෮߸ූ߸͕Θ͔Ε͍͍
r ූ߸ͷྻϋϑϚϯූ߸ԽͷѹॖޮՌ͕ߴ͍
r ࣮ࡍʹ8FC1Ͱූ߸ͷྻϋϑϚϯූ߸ԽͰѹॖ͞ΕΔ
ϋϑϚϯූ߸Խͷ·ͱΊ
8FC1ͷσʔλ࠷ऴతʹϋϑϚϯූ߸Խ͞ΕΔ
Slide 86
Slide 86 text
r ग़ݱ͢Δසͷߴ͍σʔλʹ͍ූ߸ΛׂΓͯΔ
r 8FC1ͰΘΕΔͷΧϊχΧϧϋϑϚϯූ߸Խ
r ΧϊχΧϧϋϑϚϯූ߸Խͷ෮߸ූ߸͕Θ͔Ε͍͍
r ූ߸ͷྻϋϑϚϯූ߸ԽͷѹॖޮՌ͕ߴ͍
r ࣮ࡍʹ8FC1Ͱූ߸ͷྻϋϑϚϯූ߸ԽͰѹॖ͞ΕΔ
ϋϑϚϯූ߸Խͷ·ͱΊ
8FC1ͷσʔλ࠷ऴతʹϋϑϚϯූ߸Խ͞ΕΔ
Slide 87
Slide 87 text
r ग़ݱ͢Δසͷߴ͍σʔλʹ͍ූ߸ΛׂΓͯΔ
r 8FC1ͰΘΕΔͷΧϊχΧϧϋϑϚϯූ߸Խ
r ΧϊχΧϧϋϑϚϯූ߸Խͷ෮߸ූ߸͕Θ͔Ε͍͍
r ූ߸ͷྻϋϑϚϯූ߸ԽͷѹॖޮՌ͕ߴ͍
r ࣮ࡍʹ8FC1Ͱූ߸ͷྻϋϑϚϯූ߸ԽͰѹॖ͞ΕΔ
r 8FC1ͷఔϋϑϚϯූ߸ԽͷޮՌΛ࠷େʹ͢ΔͨΊͷલॲཧ
ϋϑϚϯූ߸Խͷ·ͱΊ
8FC1ͷσʔλ࠷ऴతʹϋϑϚϯූ߸Խ͞ΕΔ
r ը૾σʔλଟ͘ͷະ༻γϯϘϧͱภΓ͕͋Δ
r 8FC1ͷ֤ఔϋϑϚϯූ߸ԽͷޮՌΛ࠷େʹ͢ΔͨΊʹ͋Δ
r ϋϑϚϯූ߸ԽΛਖ਼࣮͘͢͠Εΰʔϧ͙ͦ͢͜
ϋϑϚϯූ߸Խͷ·ͱΊ
8FC1ͷσʔλ࠷ऴతʹϋϑϚϯූ߸Խ͞ΕΔ
Slide 95
Slide 95 text
৭ม
Color Indexing
Subtract Green
Cross Color
Color Cache
Predictor
LZ77
τʔΫϯԽ
)VGGNBO$PEJOH
)VGGNBO$PEJOH
3FRVJSFE
0QUJPOBM
Slide 96
Slide 96 text
4VCUSBDU(SFFO
Λج४ʹϜμΛҾ͘
Slide 97
Slide 97 text
4VCUSBDU(SFFO
Τϯίʔυ
func applySubtractGreenTransform(pixels: inout [NRGBA]) {
for i in pixels.indices {
pixels[i].r = pixels[i].r &- pixels[i].g
pixels[i].b = pixels[i].b &- pixels[i].g
}
}
Slide 98
Slide 98 text
4VCUSBDU(SFFO
σίʔυʢٯมʣ
func inverseSubtractGreen(_ pixel: [UInt8]) -> [UInt8] {
var out = pixel
var i = 0
while p < out.count {
let g = out[i + 1] // green
out[i + 0] &+= g // red += green
out[i + 2] &+= g // blue += green
I += 4
}
return out
}
r ը૾ΛλΠϧʹ͚ɺλΠϧ͝ͱʹΛܾΊΔ
r 3(#ͦΕͧΕʹΛֻ͚ͨΛͬͯ3ͱ#Λඍௐ͢Δ
r ਓഽࣳੜͳͲɺ৭͕গࠞ͟͠Γ͕ͪͳॴͰޮՌ͕͋Δ
r 4VCUSBDU(SFFOͱͷ૬͕ؔͩͱ੨ͷؒͷӨڹิਖ਼Ͱ͖Δ
$SPTT$PMPS
Τϯίʔυ
Slide 113
Slide 113 text
$PMPS*OEFYJOH
Α͘͏৭ʹ൪߸ΛৼΔ
Slide 114
Slide 114 text
r ΘΕ͍ͯΔ৭ͷ͕৭ҎԼ
r ৭ʹ൪߸ΛৼΔ
r ൪߸ͱ৭ͷରԠʢύϨοτʣΛૹΓɺ৭൪߸Ͱஔ͖͑Δ
r ϋϑϚϯූ߸ԽͰѻ͏ه߸ͷछྨ͕ҰؾʹݮΔͷͰѹॖ͕ޮ͘
$PMPS*OEFYJOH
Τϯίʔυ
Slide 115
Slide 115 text
$PMPS$BDIF
લͷ৭ΛΩϟογϡ͢Δ
Slide 116
Slide 116 text
r ग़ྗͨ͠ϐΫηϧΛΩϟογϡʹೖΕΔ
r ͦͷ͋ͱͰಡΜͩϐΫηϧ͕Ωϟογϡʹ͋ΕΠϯσοΫε͚ͩΛૹΔ
$PMPS$BDIF
Τϯίʔυ
Slide 117
Slide 117 text
r σίʔυͨ͠ϐΫηϧΛΩϟογϡʹೖΕΔ
r ͦͷ͋ͱͰσίʔυͨ͠ϐΫηϧ͕Ωϟογϡʹ͋ΕΠϯσοΫε͔Βσ
ίʔυ͢Δ
$PMPS$BDIF
σίʔυ
Slide 118
Slide 118 text
8SBQ6Q
r 8FC1ͷఔϋϑϚϯූ߸ԽΛ࠷େݶޮՌతʹൃشͤ͞ΔͨΊͷલॲཧ
r ϋϑϚϯූ߸ԽଟஈͰద༻͞Ε͍ͯͯ໎͍͍͢ͷͰΈͷཧղ͕ॏཁ
r ͻͱͭͻͱͭͷఔҙ֎ͱγϯϓϧ
r ϋϑϚϯූ߸Խ͚ͩΛద༻ͨ͠8FC1ը૾ଘࡏ͠ͳ͍ͷͰ࡞Δ
r ϋϑϚϯූ߸Խ͚ͩద༻ͨ͠ը૾͕͋ΕΓͷॲཧҰͭͣͭ࡞͍͚ͬͯΔ
Slide 119
Slide 119 text
3FGFSFODFT
r 4BNQMF$PEF
IUUQTHJUIVCDPNLJTIJLBXBLBUTVNJXFCQFYFSDJTFT
r "OJNBHFGPSNBUGPSUIF8FC c 8FC1 c (PPHMFGPS%FWFMPQFST
IUUQTEFWFMPQFSTHPPHMFDPNTQFFEXFCQ
r MJCXFCQ
IUUQTDISPNJVNHPPHMFTPVSDFDPNXFCNMJCXFCQ
r MJCXFCQUFTUEBUB
IUUQTDISPNJVNHPPHMFTPVSDFDPNXFCNMJCXFCQUFTUEBUB