blob: f14611d92cd7305414e3979ac76e21fad944d820 [file]
// Copyright 2024 The Wuffs Authors.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.
//
// SPDX-License-Identifier: Apache-2.0 OR MIT
//go:build ignore
// +build ignore
package main
// Usage: go run make-hippopotamus-sof-dht-swap.go
//
// The test/data/hippopotamus.jpeg file has one SOF0 (Start Of Frame type 0)
// and then four DHT (Define Huffman Table) markers. This program swaps the
// order of the SOF0 and first DHT fragments.
//
// $ go run script/print-jpeg-markers.go test/data/hippopotamus.jpeg
// pos = 0x00000000 = 0 marker = 0xFF 0xD8 SOI
// pos = 0x00000002 = 2 marker = 0xFF 0xE0 APP0
// pos = 0x00000014 = 20 marker = 0xFF 0xDB DQT
// pos = 0x00000059 = 89 marker = 0xFF 0xDB DQT
// pos = 0x0000009E = 158 marker = 0xFF 0xC0 SOF0 (Sequential/Baseline)
// pos = 0x000000B1 = 177 marker = 0xFF 0xC4 DHT
// pos = 0x000000CC = 204 marker = 0xFF 0xC4 DHT
// pos = 0x000000FC = 252 marker = 0xFF 0xC4 DHT
// pos = 0x00000119 = 281 marker = 0xFF 0xC4 DHT
// pos = 0x0000014B = 331 marker = 0xFF 0xDA SOS
// pos = 0x000004C1 = 1217 marker = 0xFF 0xD9 EOI
//
// $ go run script/print-jpeg-markers.go test/data/artificial-jpeg/hippopotamus-sof-dht-swap.jpeg
// pos = 0x00000000 = 0 marker = 0xFF 0xD8 SOI
// pos = 0x00000002 = 2 marker = 0xFF 0xE0 APP0
// pos = 0x00000014 = 20 marker = 0xFF 0xDB DQT
// pos = 0x00000059 = 89 marker = 0xFF 0xDB DQT
// pos = 0x0000009E = 158 marker = 0xFF 0xC4 DHT
// pos = 0x000000B9 = 185 marker = 0xFF 0xC0 SOF0 (Sequential/Baseline)
// pos = 0x000000CC = 204 marker = 0xFF 0xC4 DHT
// pos = 0x000000FC = 252 marker = 0xFF 0xC4 DHT
// pos = 0x00000119 = 281 marker = 0xFF 0xC4 DHT
// pos = 0x0000014B = 331 marker = 0xFF 0xDA SOS
// pos = 0x000004C1 = 1217 marker = 0xFF 0xD9 EOI
import (
"fmt"
"os"
)
func main() {
if err := main1(); err != nil {
os.Stderr.WriteString(err.Error() + "\n")
os.Exit(1)
}
}
func main1() error {
src, err := os.ReadFile("../hippopotamus.jpeg")
if err != nil {
return err
} else if len(src) != 0x4C3 {
return fmt.Errorf("bad input length: 0x%X", len(src))
}
part0 := src[0x000:0x09E]
part1 := src[0x09E:0x0B1] // SOF0
part2 := src[0x0B1:0x0CC] // DHT
part3 := src[0x0CC:0x4C3]
dst := []byte(nil)
dst = append(dst, part0...)
dst = append(dst, part2...) // Note the re-order: it's not part1.
dst = append(dst, part1...) // Note the re-order: it's not part2.
dst = append(dst, part3...)
return os.WriteFile("hippopotamus-sof-dht-swap.jpeg", dst, 0666)
}