Files
buzz/crates/buzz-media/tests/fixtures/android
cls 9dfa06ffee
Docker image / Build (linux/amd64) (push) Has been cancelled
Docker image / Build (linux/arm64) (push) Has been cancelled
Docker image / Merge release multi-arch manifest (push) Has been cancelled
Docker image / Merge debug multi-arch manifest (push) Has been cancelled
Docker image / Build public push gateway (linux/amd64) (push) Has been cancelled
Docker image / Build public push gateway (linux/arm64) (push) Has been cancelled
Docker image / Publish public push gateway image (push) Has been cancelled
Sprig image / Build (linux/amd64) (push) Has been cancelled
Sprig image / Build (linux/arm64) (push) Has been cancelled
Sprig image / Merge multi-arch manifest (push) Has been cancelled
Harbor Buzz Orchestra / Python tests and lint (push) Has been cancelled
CI / Detect Changed Paths (push) Has been cancelled
CI / Rust Lint (push) Has been cancelled
CI / Unit Tests (push) Has been cancelled
CI / Desktop Core (push) Has been cancelled
CI / Desktop Smoke E2E (1) (push) Has been cancelled
CI / Desktop Smoke E2E (2) (push) Has been cancelled
CI / Desktop Smoke E2E (3) (push) Has been cancelled
CI / Desktop Smoke E2E (4) (push) Has been cancelled
CI / Desktop (push) Has been cancelled
CI / Desktop E2E Relay (push) Has been cancelled
CI / Desktop E2E Integration (1/2) (push) Has been cancelled
CI / Desktop E2E Integration (2/2) (push) Has been cancelled
CI / Desktop E2E Integration (push) Has been cancelled
CI / Backend Integration (relay e2e) (push) Has been cancelled
CI / Relay E2E (push) Has been cancelled
CI / Web (push) Has been cancelled
CI / Mobile (push) Has been cancelled
CI / Security (push) Has been cancelled
CI / Dead Token Reference Guard (push) Has been cancelled
CI / Server Cross-Compile (aarch64-unknown-linux-musl) (push) Has been cancelled
CI / Server Cross-Compile (x86_64-unknown-linux-musl) (push) Has been cancelled
CI / Windows Rust (x86_64-pc-windows-msvc) (push) Has been cancelled
CI / Desktop Build (macOS) (push) Has been cancelled
helm chart / lint + unittest + render matrix (push) Has been cancelled
helm chart / install on kind (gated) (push) Has been cancelled
helm chart / publish chart to GHCR (push) Has been cancelled
Mesh Lifecycle / Relay-Driven Mesh Lifecycle Smoke (push) Has been cancelled
Sprig / Build (aarch64-unknown-linux-musl) (push) Has been cancelled
Sprig / Build (x86_64-unknown-linux-musl) (push) Has been cancelled
Sprig / Publish rolling release (push) Has been cancelled
Sprig / Publish tagged release (push) Has been cancelled
feat: import Chinese-localized Buzz source snapshot
Signed-off-by: cls_宁波本机 <908705107@qq.com>
2026-08-13 18:34:25 +08:00
..

Android Bitmap media fixtures

These 3 x 2 fixtures were produced by Android 16 (API 36) Bitmap.compress, not by a generic image encoder.

Regeneration

  1. Compile and run the following program on an API 36 emulator:

    import android.graphics.Bitmap;
    import android.graphics.Color;
    import android.graphics.ColorSpace;
    import java.io.FileOutputStream;
    
    public final class Main {
      private static void write(Bitmap bitmap, Bitmap.CompressFormat format, String stem)
          throws Exception {
        String extension = format == Bitmap.CompressFormat.PNG ? "png" : "jpg";
        try (FileOutputStream output =
            new FileOutputStream("/data/local/tmp/" + stem + "." + extension)) {
          if (!bitmap.compress(format, 100, output)) {
            throw new IllegalStateException("Bitmap.compress failed for " + stem);
          }
        }
      }
    
      public static void main(String[] args) throws Exception {
        Bitmap srgb = Bitmap.createBitmap(3, 2, Bitmap.Config.ARGB_8888);
        srgb.setPixels(new int[] {
          Color.argb(255, 255, 0, 0), Color.argb(255, 0, 255, 0),
          Color.argb(255, 0, 0, 255), Color.argb(128, 255, 255, 0),
          Color.argb(64, 0, 255, 255), Color.argb(0, 255, 0, 255),
        }, 0, 3, 0, 0, 3, 2);
        write(srgb, Bitmap.CompressFormat.PNG, "bitmap-srgb");
        write(srgb, Bitmap.CompressFormat.JPEG, "bitmap-srgb");
    
        Bitmap displayP3 = Bitmap.createBitmap(
            3, 2, Bitmap.Config.RGBA_F16, true,
            ColorSpace.get(ColorSpace.Named.DISPLAY_P3));
        displayP3.eraseColor(Color.pack(
            1.0f, 0.0f, 0.0f, 1.0f,
            ColorSpace.get(ColorSpace.Named.DISPLAY_P3)));
        write(displayP3, Bitmap.CompressFormat.PNG, "bitmap-display-p3");
        write(displayP3, Bitmap.CompressFormat.JPEG, "bitmap-display-p3");
      }
    }
    
  2. Pull the four files from /data/local/tmp/ into this directory. Copy all four into mobile/android/app/src/test/resources/fixtures/android/, and copy bitmap-display-p3.png and bitmap-srgb.png into mobile/android/app/src/androidTest/resources/fixtures/android/.

  3. Run cmp on every copied fixture to confirm it is byte-identical.

  4. Run the app's AndroidImageProcessor.decodeSrgbBitmap and encodeAndScrub path for both source color spaces and both formats on the API 36 emulator. Save the four outputs under sanitized/ with the -sanitized suffix.

  5. Run cargo test -p buzz-media android_ to verify the relay accepts every sanitized fixture while rejecting the three unsanitized fixtures that contain forbidden metadata.

  6. Run cd mobile/android && ./gradlew app:testDebugUnitTest app:connectedDebugAndroidTest with an API 36 emulator to verify structural scrubbing and the Display-P3 to sRGB conversion for sanitized PNG and JPEG output.

Regenerate both the encoded inputs and sanitized outputs whenever Android Bitmap.compress behavior or AndroidMediaSanitizer changes. Do not update only the sanitized files, because the tests cover the exact encoder-to-sanitizer boundary.