media/demos/transformer
Googler 97e6a86d2b Avoid spinning in between intermediate texture processors.
This change adds a new method onReadyToAcceptInputFrame to
GlTextureProcesssor.InputListener and changes maybeQueueInputFrame
to queueInputFrame, removing the boolean return value.
This avoids the re-trying in ChainingGlTextureProcessorListener
by allowing it to only feed frames from the producing to the consuming
GlTextureProcessor when there is capacity.

MediaPipeProcessor still needs re-trying when processing isn't 1:1.

PiperOrigin-RevId: 466626369
2022-09-30 16:28:27 +00:00
..

Transformer demo

This app demonstrates how to use the Transformer API to modify videos, for example by removing audio or video.

See the demos README for instructions on how to build and run this demo.

MediaPipe frame processing demo

Building the demo app with MediaPipe integration enabled requires some extra manual steps.

  1. Follow the instructions to install MediaPipe.

  2. Copy the Transformer demo's build configuration and MediaPipe graph text protocol buffer under the MediaPipe source tree. This makes it easy to build an AAR with bazel by reusing MediaPipe's workspace.

    cd "<path to MediaPipe checkout>"
    MEDIAPIPE_ROOT="$(pwd)"
    MEDIAPIPE_TRANSFORMER_ROOT="${MEDIAPIPE_ROOT}/mediapipe/java/com/google/mediapipe/transformer"
    cd "<path to the transformer demo (containing this readme)>"
    TRANSFORMER_DEMO_ROOT="$(pwd)"
    mkdir -p "${MEDIAPIPE_TRANSFORMER_ROOT}"
    mkdir -p "${TRANSFORMER_DEMO_ROOT}/libs"
    cp ${TRANSFORMER_DEMO_ROOT}/BUILD.bazel ${MEDIAPIPE_TRANSFORMER_ROOT}/BUILD
    cp ${TRANSFORMER_DEMO_ROOT}/src/withMediaPipe/assets/edge_detector_mediapipe_graph.pbtxt \
      ${MEDIAPIPE_TRANSFORMER_ROOT}
    
  3. Build the AAR and the binary proto for the demo's MediaPipe graph, then copy them to Transformer.

    cd ${MEDIAPIPE_ROOT}
    bazel build -c opt --strip=ALWAYS \
      --host_crosstool_top=@bazel_tools//tools/cpp:toolchain \
      --fat_apk_cpu=arm64-v8a,armeabi-v7a \
      --legacy_whole_archive=0 \
      --features=-legacy_whole_archive \
      --copt=-fvisibility=hidden \
      --copt=-ffunction-sections \
      --copt=-fdata-sections \
      --copt=-fstack-protector \
      --copt=-Oz \
      --copt=-fomit-frame-pointer \
      --copt=-DABSL_MIN_LOG_LEVEL=2 \
      --linkopt=-Wl,--gc-sections,--strip-all \
      mediapipe/java/com/google/mediapipe/transformer:edge_detector_mediapipe_aar.aar
    cp bazel-bin/mediapipe/java/com/google/mediapipe/transformer/edge_detector_mediapipe_aar.aar \
      ${TRANSFORMER_DEMO_ROOT}/libs
    bazel build mediapipe/java/com/google/mediapipe/transformer:edge_detector_binary_graph
    cp bazel-bin/mediapipe/java/com/google/mediapipe/transformer/edge_detector_mediapipe_graph.binarypb \
      ${TRANSFORMER_DEMO_ROOT}/src/withMediaPipe/assets
    
  4. In Android Studio, gradle sync and select the withMediaPipe build variant (this will only appear if the AAR is present), then build and run the demo app and select a MediaPipe-based effect.