Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Androidだけじゃない、DroidKaigiで広がった私の技術スタック

Avatar for Akio Itaya Akio Itaya
September 17, 2026

 Androidだけじゃない、DroidKaigiで広がった私の技術スタック

【昼開催DAY1】After DroidKaigi 2026 from ピクシブ【オンライン】
https://pixiv.connpass.com/event/403627/

Avatar for Akio Itaya

Akio Itaya

September 17, 2026

More Decks by Akio Itaya

Other Decks in Programming

Transcript

  1. akkey • CEO @AkkeyLab, Inc. • Engineer @pixiv Inc. •

    DroidKaigi Staff • try! Swift Tokyo Organizer
  2. VMSの開発 func makeTextures(from pixelBuffer: CVPixelBuffer) -> (luma: MTLTexture, chroma: MTLTexture)?

    { let width = CVPixelBufferGetWidth(pixelBuffer) let height = CVPixelBufferGetHeight(pixelBuffer) var lumaTextureRef: CVMetalTexture? let _ = CVMetalTextureCacheCreateTextureFromImage( kCFAllocatorDefault, textureCache, pixelBuffer, nil, .r8Unorm, width, height, 0, &lumaTextureRef ) var chromaTextureRef: CVMetalTexture? let _ = CVMetalTextureCacheCreateTextureFromImage( kCFAllocatorDefault, textureCache, pixelBuffer, nil, .rg8Unorm, width / 2, height / 2, 1, &chromaTextureRef ) guard let lumaTexture = CVMetalTextureGetTexture(lumaTextureRef!), let chromaTexture = CVMetalTextureGetTexture(chromaTextureRef!) else { return nil } return (lumaTexture, chromaTexture) }
  3. VMSの開発 func makeTextures(from pixelBuffer: CVPixelBuffer) -> (luma: MTLTexture, chroma: MTLTexture)?

    { let width = CVPixelBufferGetWidth(pixelBuffer) let height = CVPixelBufferGetHeight(pixelBuffer) var lumaTextureRef: CVMetalTexture? let _ = CVMetalTextureCacheCreateTextureFromImage( kCFAllocatorDefault, textureCache, pixelBuffer, nil, .r8Unorm, width, height, 0, &lumaTextureRef ) var chromaTextureRef: CVMetalTexture? let _ = CVMetalTextureCacheCreateTextureFromImage( kCFAllocatorDefault, textureCache, pixelBuffer, nil, .rg8Unorm, width / 2, height / 2, 1, &chromaTextureRef ) guard let lumaTexture = CVMetalTextureGetTexture(lumaTextureRef!), let chromaTexture = CVMetalTextureGetTexture(chromaTextureRef!) else { return nil } return (lumaTexture, chromaTexture) }
  4. VMSの開発 func makeTextures(from pixelBuffer: CVPixelBuffer) -> (luma: MTLTexture, chroma: MTLTexture)?

    { let width = CVPixelBufferGetWidth(pixelBuffer) let height = CVPixelBufferGetHeight(pixelBuffer) var lumaTextureRef: CVMetalTexture? let _ = CVMetalTextureCacheCreateTextureFromImage( kCFAllocatorDefault, textureCache, pixelBuffer, nil, .r8Unorm, width, height, 0, &lumaTextureRef ) var chromaTextureRef: CVMetalTexture? let _ = CVMetalTextureCacheCreateTextureFromImage( kCFAllocatorDefault, textureCache, pixelBuffer, nil, .rg8Unorm, width / 2, height / 2, 1, &chromaTextureRef ) guard let lumaTexture = CVMetalTextureGetTexture(lumaTextureRef!), let chromaTexture = CVMetalTextureGetTexture(chromaTextureRef!) else { return nil } return (lumaTexture, chromaTexture) }
  5. VMSの開発 func makeTextures(from pixelBuffer: CVPixelBuffer) -> (luma: MTLTexture, chroma: MTLTexture)?

    { let width = CVPixelBufferGetWidth(pixelBuffer) let height = CVPixelBufferGetHeight(pixelBuffer) var lumaTextureRef: CVMetalTexture? let _ = CVMetalTextureCacheCreateTextureFromImage( kCFAllocatorDefault, textureCache, pixelBuffer, nil, .r8Unorm, width, height, 0, &lumaTextureRef ) var chromaTextureRef: CVMetalTexture? let _ = CVMetalTextureCacheCreateTextureFromImage( kCFAllocatorDefault, textureCache, pixelBuffer, nil, .rg8Unorm, width / 2, height / 2, 1, &chromaTextureRef ) guard let lumaTexture = CVMetalTextureGetTexture(lumaTextureRef!), let chromaTexture = CVMetalTextureGetTexture(chromaTextureRef!) else { return nil } return (lumaTexture, chromaTexture) }