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

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

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.
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) }