File: VideoDecoder.java

package info (click to toggle)
firefox-esr 140.5.0esr-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 4,538,920 kB
  • sloc: cpp: 7,381,527; javascript: 6,388,905; ansic: 3,710,087; python: 1,393,776; xml: 628,165; asm: 426,916; java: 184,004; sh: 65,744; makefile: 19,302; objc: 13,059; perl: 12,912; yacc: 4,583; cs: 3,846; pascal: 3,352; lex: 1,720; ruby: 1,226; exp: 762; php: 436; lisp: 258; awk: 247; sql: 66; sed: 54; csh: 10
file content (94 lines) | stat: -rw-r--r-- 3,389 bytes parent folder | download | duplicates (20)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
/*
 *  Copyright 2017 The WebRTC project authors. All Rights Reserved.
 *
 *  Use of this source code is governed by a BSD-style license
 *  that can be found in the LICENSE file in the root of the source
 *  tree. An additional intellectual property rights grant can be found
 *  in the file PATENTS.  All contributing project authors may
 *  be found in the AUTHORS file in the root of the source tree.
 */

package org.webrtc;

/**
 * Interface for a video decoder that can be used in WebRTC. All calls to the class will be made on
 * a single decoding thread.
 */
public interface VideoDecoder {
  /** Settings passed to the decoder by WebRTC. */
  public class Settings {
    public final int numberOfCores;
    public final int width;
    public final int height;

    @CalledByNative("Settings")
    public Settings(int numberOfCores, int width, int height) {
      this.numberOfCores = numberOfCores;
      this.width = width;
      this.height = height;
    }
  }

  /** Additional info for decoding. */
  public class DecodeInfo {
    public final boolean isMissingFrames;
    public final long renderTimeMs;

    public DecodeInfo(boolean isMissingFrames, long renderTimeMs) {
      this.isMissingFrames = isMissingFrames;
      this.renderTimeMs = renderTimeMs;
    }
  }

  public interface Callback {
    /**
     * Call to return a decoded frame. Can be called on any thread.
     *
     * @param frame Decoded frame
     * @param decodeTimeMs Time it took to decode the frame in milliseconds or null if not available
     * @param qp QP value of the decoded frame or null if not available
     */
    void onDecodedFrame(VideoFrame frame, Integer decodeTimeMs, Integer qp);
  }

  /**
   * The decoder implementation backing this interface is either 1) a Java
   * decoder (e.g., an Android platform decoder), or alternatively 2) a native
   * decoder (e.g., a software decoder or a C++ decoder adapter).
   *
   * For case 1), createNative() should return zero.
   * In this case, we expect the native library to call the decoder through
   * JNI using the Java interface declared below.
   *
   * For case 2), createNative() should return a non-zero value.
   * In this case, we expect the native library to treat the returned value as
   * a raw pointer of type webrtc::VideoDecoder* (ownership is transferred to
   * the caller). The native library should then directly call the
   * webrtc::VideoDecoder interface without going through JNI. All calls to
   * the Java interface methods declared below should thus throw an
   * UnsupportedOperationException.
   */
  @CalledByNative
  default long createNative(long webrtcEnvRef) {
    return 0;
  }

  /**
   * Initializes the decoding process with specified settings. Will be called on the decoding thread
   * before any decode calls.
   */
  @CalledByNative VideoCodecStatus initDecode(Settings settings, Callback decodeCallback);
  /**
   * Called when the decoder is no longer needed. Any more calls to decode will not be made.
   */
  @CalledByNative VideoCodecStatus release();
  /**
   * Request the decoder to decode a frame.
   */
  @CalledByNative VideoCodecStatus decode(EncodedImage frame, DecodeInfo info);
  /**
   * Should return a descriptive name for the implementation. Gets called once and cached. May be
   * called from arbitrary thread.
   */
  @CalledByNative String getImplementationName();
}