Slide 1

Slide 1 text

#VJMEZPVSPXO8FC1DPEFDJO4XJGU LJTIJLBXBLBUTVNJ !LJTIJLBXBLBUTVNJ!IBDIZEFSNJP LJTIJLBXBLBUTVNJ ࡞ֶͬͯͿ8FC1ೖ໳

Slide 2

Slide 2 text

#VJMEZPVSPXO8FC1DPEFDJO4XJGU LJTIJLBXBLBUTVNJ !LJTIJLBXBLBUTVNJ!IBDIZEFSNJP LJTIJLBXBLBUTVNJ ࡞ֶͬͯͿ8FC1ೖ໳ $PEFS %FDPEFS

Slide 3

Slide 3 text

r 8FC1ʹֶ͍ͭͯͿࡍͷোนΛऔΓআ͘ ࡞ֶͬͯͿ8FC1ೖ໳ (PBM

Slide 4

Slide 4 text

r ن֨ॻ͕લఏ஌ࣝ͋Γ͖Ͱॻ͔Ε͍ͯΔ r ࢀߟ࣮૷͸΄΅$ݴޠͰॻ͔ΕͨMJCXFCQͷΈ r ࢓༷ΛಡΜͰ΋ίʔυΛಡΜͰ΋ཧղ͠ʹ͍͘ 8FC1ΛֶͿࡍͷোน લఏ஌͕ࣝඞਢ

Slide 5

Slide 5 text

r ͍ͭ͘΋ͷখ͞ͳ޻ఔΛॱʹॏͶͯɺ࠷ޙʹαΠζΛখ͍ͯ͘͞͠Δ r ్தͷσʔλ͸ɺਓ͕ݟͯ΋ҙຯΛऔΓʹ͍͘ܗʹ͕࢟มΘΔ r ݩʹ໭͢ͱ͖͸޻ఔΛٯ޲͖ʹͨͲΔͨΊɺ௚ײʹ߹͍ʹ͍͘ r Ͳͷ޻ఔͰԿ͕Ͳ͏มΘͬͨͷ͔͕Ұ໨Ͱ෼͔ΓͮΒ͍ 8FC1ΛֶͿࡍͷোน ͳͥ࢓૊Έ͕ཧղ͠ʹ͍͘ͷ͔

Slide 6

Slide 6 text

োนΛऔΓআ͘ ࠷খݶͷ࣮૷ͱςετσʔλ r খ͞ͳ8FC1Τϯίʔμʗσίʔμ r ςετσʔλ r ೖྗͱग़ྗ͕໌֬ r ֤޻ఔΛಠཱʹ֬ೝͰ͖Δ r σόοά͠΍͍͢

Slide 7

Slide 7 text

4BNQMF$PEF ➡IUUQTHJUIVCDPNLJTIJLBXBLBUTVNJXFCQFYFSDJTFT

Slide 8

Slide 8 text

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Ͱ͸Ͳ͜·Ͱ࢖͑Δʁ

Slide 16

Slide 16 text

σʔλߏ଄ʹ͍ͭͯ

Slide 17

Slide 17 text

σʔλߏ଄ʹ͍ͭͯ )FBEFS %BUB

Slide 18

Slide 18 text

σʔλߏ଄ʹ͍ͭͯ 3*''$POUBJOFS 3*'' 3FTPVSDF*OUFSDIBOHF'JMF'PSNBU )FBEFS %BUB

Slide 19

Slide 19 text

σʔλߏ଄ʹ͍ͭͯ $IVOL'PVS$$ $IVOL4J[F $IVOL1BZMPBE 3*''$POUBJOFS 3*'' 3FTPVSDF*OUFSDIBOHF'JMF'PSNBU )FBEFS %BUB $IVOL

Slide 20

Slide 20 text

'R' 'I' 'F' 'F' CZUFT $IVOL1BZMPBE 3*''$POUBJOFS CZUFT CZUFT σʔλߏ଄ʹ͍ͭͯ 3*'' 3FTPVSDF*OUFSDIBOHF'JMF'PSNBU

Slide 21

Slide 21 text

'R' 'I' 'F' 'F' CZUFT 3*''$POUBJOFS 'R' 'I' 'F' 'F' 'W' 'E' 'B' 'P' σʔλߏ଄ʹ͍ͭͯ 3*'' 3FTPVSDF*OUFSDIBOHF'JMF'PSNBU

Slide 22

Slide 22 text

'R' 'I' 'F' 'F' CZUFT 3*''$POUBJOFS 'R' 'I' 'F' 'F' 'W' 'E' 'B' 'P' $IVOL'PVS$$ $IVOL4J[F $IVOL1BZMPBE σʔλߏ଄ʹ͍ͭͯ 3*'' 3FTPVSDF*OUFSDIBOHF'JMF'PSNBU 8FC1)FBEFS

Slide 23

Slide 23 text

r -PTTZʢඇՄٯѹॖʣ r -PTTMFTTʢՄٯѹॖʣ r Ξχϝʔγϣϯ ‣ ֤ΞχϝʔγϣϯϑϨʔϜ͸-PTTZͱ-PTTMFTTΛࠞࡏՄೳ r ϝλσʔλʢ&9*'ɺ*$$ΧϥʔϓϩϑΝΠϧɺͳͲʣ ෳ਺ͷը૾ܗࣜɾػೳΛαϙʔτ

Slide 24

Slide 24 text

'R' 'I' 'F' 'F' CZUFT 3*''$POUBJOFS 'R' 'I' 'F' 'F' 'W' 'E' 'B' 'P' 'V' 'P' '8' ' ' $IVOL4J[F $IVOL1BZMPBE 4JNQMF'JMF'PSNBU 71 -PTTZ

Slide 25

Slide 25 text

'R' 'I' 'F' 'F' CZUFT 3*''$POUBJOFS 'R' 'I' 'F' 'F' 'W' 'E' 'B' 'P' 'V' 'P' '8' 'L' $IVOL1BZMPBE 4JNQMF'JMF'PSNBU 71- -PTTMFTT $IVOL4J[F

Slide 26

Slide 26 text

'R' 'I' 'F' 'F' CZUFT 3*''$POUBJOFS 'R' 'I' 'F' 'F' 'W' 'E' 'B' 'P' 'V' 'P' '8' 'L' CZUFT $IVOL1BZMPBE 4JNQMF'JMF'PSNBU 71 -PTTZ CZUFT CZUFT CZUFT

Slide 27

Slide 27 text

'R' 'I' 'F' 'F' CZUFT 3*''$POUBJOFS 'R' 'I' 'F' 'F' 'W' 'E' 'B' 'P' 'V' 'P' '8' 'L' CZUFT $IVOL1BZMPBE 4JNQMF'JMF'PSNBU 71- -PTTMFTT CZUFT CZUFT CZUFT

Slide 28

Slide 28 text

'R' 'I' 'F' 'F' CZUFT 3*''$POUBJOFS 'R' 'I' 'F' 'F' 'W' 'E' 'B' 'P' 'V' 'P' '8' 'X' CZUF $IVOL1BZMPBE &YUFOEFE'JMF'PSNBU *$$1SP fi MF "MQIBDIBOOFM "OJNBUJPO &9*'9.1NFUBEBUB 'E' 'X' 'I' 'F' $IVOL 4J[F $IVOL 1BZMPBE

Slide 29

Slide 29 text

'A' 'N' 'I' 'M' 3*''$POUBJOFS 'A' 'N' 'M' 'F' &YUFOEFE'JMF'PSNBU *$$1SP fi MF "MQIBDIBOOFM "OJNBUJPO &9*'9.1NFUBEBUB 'A' 'N' 'M' 'F' $IVOL1BZMPBE $IVOL1BZMPBE

Slide 30

Slide 30 text

'?' '?' '?' '?' 3*''$POUBJOFS 6OLOPXO$IVOLT ೚ҙͷσʔλΛಠࣗͷνϟϯΫʹ֨ೲ͢Δ $IVOL1BZMPBE

Slide 31

Slide 31 text

ϔομʔΛಡΉ

Slide 32

Slide 32 text

3*'')FBEFS3FBEFS 4BNQMF$PEF 'PVS$$ 4J[F

Slide 33

Slide 33 text

3*'')FBEFS3FBEFS 4BNQMF$PEF struct RIFFHeaderReader { static func read(_ data: Data) throws -> (header: RIFFHeader, chunks: [RIFFChunk]) { var reader = ByteReader(data) let sig = try reader.readFourCC() let riffSize = try reader.readUInt32LE() let formType = try reader.readFourCC() let logicalEnd = 8 + Int(riffSizeLE) guard logicalEnd <= data.count else { throw WebPListError.truncatedRIFF } var chunks: [RIFFChunk] = [] while reader.offset + 8 <= logicalEnd { let fourCC = try r.readFourCC() let size = try r.readUInt32LE() let payloadStart = r.offset let payloadEnd = payloadStart + Int(size) try reader.skip(Int(sizeLE)) if (size & 1) == 1 { try reader.skip(1) } } let header = RIFFHeader(signature: sig, fileSizeLE: riffSize, formType: formType) return (header, chunks) } }

Slide 34

Slide 34 text

খ͞ͳ࣮૷Ͱʮ8FC1ը૾ʯΛ࡞Δ

Slide 35

Slide 35 text

খ͞ͳ࣮૷Ͱʮ8FC1ը૾ʯΛ࡞Δ – 'VP8 ' ʜ-PTTZʢඇՄٯѹॖʣ – 'VP8L' ʜ-PTTMFTTʢՄٯѹॖʣ – 'ALPH'ʜ-PTTZʢඇՄٯѹॖʣϑΥʔϚοτͷΞϧϑΝ৘ใ r ANIM''ANMF' ʜΞχϝʔγϣϯʗΞχϝʔγϣϯϑϨʔϜ – 'ICCP' ʜ*$$ΧϥʔϓϩϑΝΠϧ r 'EXIF''XMP 'ʜϝλσʔλ

Slide 36

Slide 36 text

– 'VP8 ' ʜ-PTTZʢඇՄٯѹॖʣ – 'VP8L' ʜ-PTTMFTTʢՄٯѹॖʣ – 'ALPH'ʜ-PTTZʢඇՄٯѹॖʣϑΥʔϚοτͷΞϧϑΝ৘ใ r ANIM''ANMF' ʜΞχϝʔγϣϯʗΞχϝʔγϣϯϑϨʔϜ – 'ICCP' ʜ*$$ΧϥʔϓϩϑΝΠϧ r 'EXIF''XMP 'ʜϝλσʔλ খ͞ͳ࣮૷Ͱʮ8FC1ը૾ʯΛ࡞Δ

Slide 37

Slide 37 text

– 'VP8 ' ʜ-PTTZʢඇՄٯѹॖʣ – 'VP8L' ʜ-PTTMFTTʢՄٯѹॖʣ – 'ALPH'ʜ-PTTZʢඇՄٯѹॖʣϑΥʔϚοτͷΞϧϑΝ৘ใ r ANIM''ANMF' ʜΞχϝʔγϣϯʗΞχϝʔγϣϯϑϨʔϜ – 'ICCP' ʜ*$$ΧϥʔϓϩϑΝΠϧ r 'EXIF''XMP 'ʜϝλσʔλ খ͞ͳ࣮૷Ͱʮ8FC1ը૾ʯΛ࡞Δ

Slide 38

Slide 38 text

– 'VP8 ' ʜ-PTTZʢඇՄٯѹॖʣ – 'VP8L' ʜ-PTTMFTTʢՄٯѹॖʣ – 'ALPH'ʜ-PTTZʢඇՄٯѹॖʣϑΥʔϚοτͷΞϧϑΝ৘ใ r ANIM''ANMF' ʜΞχϝʔγϣϯʗΞχϝʔγϣϯϑϨʔϜ – 'ICCP' ʜ*$$ΧϥʔϓϩϑΝΠϧ r 'EXIF''XMP 'ʜϝλσʔλ খ͞ͳ࣮૷Ͱʮ8FC1ը૾ʯΛ࡞Δ എܠ͕෼͔ΕͯͨΓΩϟϯόεશମͰ͸ͳ͘ ಈ͘෦෼͚ͩ֨ೲ͢ΔͳͲएׯͷ௥Ճ࣮૷͕ඞཁ

Slide 39

Slide 39 text

– 'VP8 ' ʜ-PTTZʢඇՄٯѹॖʣ – 'VP8L' ʜ-PTTMFTTʢՄٯѹॖʣ – 'ALPH'ʜ-PTTZʢඇՄٯѹॖʣϑΥʔϚοτͷΞϧϑΝ৘ใ r ANIM''ANMF' ʜΞχϝʔγϣϯʗΞχϝʔγϣϯϑϨʔϜ – 'ICCP' ʜ*$$ΧϥʔϓϩϑΝΠϧ r 'EXIF''XMP 'ʜϝλσʔλ খ͞ͳ࣮૷Ͱʮ8FC1ը૾ʯΛ࡞Δ

Slide 40

Slide 40 text

– 'VP8 ' ʜ-PTTZʢඇՄٯѹॖʣ – 'VP8L' ʜ-PTTMFTTʢՄٯѹॖʣ – 'ALPH'ʜ-PTTZʢඇՄٯѹॖʣϑΥʔϚοτͷΞϧϑΝ৘ใ r ANIM''ANMF' ʜΞχϝʔγϣϯʗΞχϝʔγϣϯϑϨʔϜ – 'ICCP' ʜ*$$ΧϥʔϓϩϑΝΠϧ r 'EXIF''XMP 'ʜϝλσʔλ খ͞ͳ࣮૷Ͱʮ8FC1ը૾ʯΛ࡞Δ

Slide 41

Slide 41 text

খ͞ͳ࣮૷ͰʮѹॖσʔλʯΛ࡞ͬͯΈΔ 71-ͷϏοτετϦʔϜ 0x2F Width - 1 Hight - 1 Ver. A CJUCZUF CJU CJU CJU CJU CJU

Slide 42

Slide 42 text

খ͞ͳ࣮૷ͰʮѹॖσʔλʯΛ࡞ͬͯΈΔ 71-ͷϏοτετϦʔϜ 0x2F Width - 1 Hight - 1 Ver. A CJUCZUF CJU CJU CJU CJU CJU

Slide 43

Slide 43 text

#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

Slide 51

Slide 51 text

4BNQMF$PEF ➡IUUQTHJUIVCDPNLJTIJLBXBLBUTVNJXFCQFYFSDJTFT 📦 1SF fi Y$PEJOH 4VCUSBDU (SFFO -; 1SFEJDUPS Cross Color $PMPS *OEFYJOH $PMPS$BDIF 1SF fi Y$PEJOH 🗜📤 4VCUSBDU(SFFO 🗜📤 🗜📤 -; 🗜📤 🗜📤 1SFEJDUPS 🗜📤 🗜📤 $SPTT$PMPS 🗜📤 🗜📤 $PMPS*OEFYJOH 🗜📤 🗜📤 $PMPS$BDIF 🗜📤 🗜📤 $PNQMFUF 🗜📤 🗜📤 🗜📤 🗜📤 🗜📤 🗜📤 🗜📤

Slide 52

Slide 52 text

1SFGJY$PEJOH Α͘࢖͏஋Λ୹͘දݱ͢Δ

Slide 53

Slide 53 text

1SFGJY$PEJOH $BOPOJDBM)VGGNBO$PEJOH ઀಄ූ߸Խʢਖ਼४ʗਖ਼نԽϋϑϚϯූ߸Խʣ 1SFGJY$PEJOHʢ઀಄ූ߸Խʣ )VGGNBO$PEJOH $BOPOJDBM)VGGNBO$PEJOH

Slide 54

Slide 54 text

σʔλͷ౷ܭతͳภΓΛར༻ͨ͠ѹॖ ϋϑϚϯූ߸Խ

Slide 55

Slide 55 text

ϋϑϚϯූ߸Խ ྫ#00,,&&1&3 BOOKKEEPER

Slide 56

Slide 56 text

ϋϑϚϯූ߸Խ ྫ#00,,&&1&3 BOOKKEEPER γϯϘϧ & 0 , # 1 3 ग़ݱස౓      

Slide 57

Slide 57 text

ϋϑϚϯූ߸Խ ྫ#00,,&&1&3 BOOKKEEPER γϯϘϧ & 0 , # 1 3 ग़ݱස౓       ௿ස౓ ߴස౓

Slide 58

Slide 58 text

ϋϑϚϯූ߸Խͷखॱ ϋϑϚϯ໦Λ࡞Δ 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]

Slide 84

Slide 84 text

$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]

Slide 85

Slide 85 text

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ͷσʔλ͸࠷ऴతʹϋϑϚϯූ߸Խ͞ΕΔ

Slide 88

Slide 88 text

No content

Slide 89

Slide 89 text

No content

Slide 90

Slide 90 text

No content

Slide 91

Slide 91 text

γϯϘϧ         ग़ݱස౓        

Slide 92

Slide 92 text

γϯϘϧ         ग़ݱස౓         ූ߸ 0 101 110 100 11111 11100 11101 11110

Slide 93

Slide 93 text

1,302 bytes 384 bytes

Slide 94

Slide 94 text

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 }

Slide 99

Slide 99 text

4VCUSBDU(SFFO ޮՌ [52, 50, 47] [106, 110, 97] [147, 150, 156] [202, 200, 197]

Slide 100

Slide 100 text

4VCUSBDU(SFFO ޮՌ [52, 50, 47] [106, 110, 97] [147, 150, 156] [202, 200, 197] [2, 50, -3] [-4, 100, -3] [-3, 150, 6] [2, 200, -3]

Slide 101

Slide 101 text

-; ͘Γฦ͠͸ʮڑ཭º௕͞ʯͰৼΓฦΔ

Slide 102

Slide 102 text

-; Τϯίʔυ

Slide 103

Slide 103 text

-; Τϯίʔυ

Slide 104

Slide 104 text

-; Τϯίʔυ

Slide 105

Slide 105 text

-; Τϯίʔυ

Slide 106

Slide 106 text

-; Τϯίʔυ

Slide 107

Slide 107 text

-; Τϯίʔυ ݸલ͔Βݸ  

Slide 108

Slide 108 text

1SFEJDUPS ͱͳΓͷ৭Ͱ࣍ͷ৭Λ౰ͯΔ

Slide 109

Slide 109 text

1SFEJDUPS Τϯίʔυ

Slide 110

Slide 110 text

1SFEJDUPS Τϯίʔυ

Slide 111

Slide 111 text

$SPTT$PMPS ৭Ͳ͏͠ͷॏͳΓΛ΄Ͳ͘

Slide 112

Slide 112 text

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