Video Editing measures performance when playing, editing, and saving video. The test uses OpenGL ES 2.0, the native Android MediaCodec API, and Exoplayer, a Google-developed media player.

The first part of the test measures how well your device performs when applying real-time effects to video using OpenGL ES 2.0 fragment shaders. 

The video frames are decoded and sent to an Android GLSurfaceView using a custom Renderer that applies OpenGL ES 2.0 shaders for the preview. 

All video clips are encoded with the H.264/MPEG-4 AVC compression format. Several frame rates and resolutions are tested:

  • 30 FPS at 1270 × 720
  • 30 FPS at 1920 × 1080
  • 30 FPS at 2560 × 1440
  • 30 FPS at 3200 × 1800
  • 60 FPS at 1270 × 720
  • 60 FPS at 1920 × 1080
  • 60 FPS at 2560 × 1440
  • 60 FPS at 3200 × 1800

The second part of the test measures performance while decoding, editing, encoding, and muxing a video in the same code path. The video frames are decoded with a MediaCodec decoder on a SurfaceTexture using a custom Renderer that applies OpenGL shaders, then encoded with a MediaCodec encoder and muxed with MediaMuxer.

Scoring

VideoEditing score    =    15,000 × geomean(geomean(R1, R2, R3, R4), 1/R5)

Where:
R1    = ∑_(i=1)^n〖average_render_30FPS(i),(i=index of 30 FPS video) 〗
The sum of the average frame rate when rendering each 30 FPS video 

R2    = ∑_(i=1)^n〖average_decode_30FPS(i),(i=index of 30 FPS video) 〗
The sum of the average frame rate when decoding each 30 FPS video

R3    = ∑_(i=1)^n〖average_render_60FPS(i),(i=index of 30 FPS video) 〗
The sum of the average frame rate when rendering each 60 FPS video

R4    = ∑_(i=1)^n〖average_decode_60FPS(i),(i=index of 30 FPS video) 〗
The sum of the average frame rate when decoding each 60 FPS video

R5    =    Time taken to encode and mux the edited video