Index: media/base/android/media_codec_bridge.h |
diff --git a/media/base/android/media_codec_bridge.h b/media/base/android/media_codec_bridge.h |
index 848304cb1556fa052c307139732dcdd3be1c576f..02e53aff4eae0d777968277a3754e8e33ffaf1e4 100644 |
--- a/media/base/android/media_codec_bridge.h |
+++ b/media/base/android/media_codec_bridge.h |
@@ -11,6 +11,7 @@ |
#include <string> |
#include <vector> |
+#include "base/android/jni_android.h" |
#include "base/macros.h" |
#include "base/time/time.h" |
#include "media/base/media_export.h" |
@@ -21,12 +22,11 @@ namespace media { |
class EncryptionScheme; |
struct SubsampleEntry; |
-// These must be in sync with MediaCodecBridge.MEDIA_CODEC_XXX constants in |
-// MediaCodecBridge.java. |
+// GENERATED_JAVA_ENUM_PACKAGE: org.chromium.media |
+// GENERATED_JAVA_PREFIX_TO_STRIP: MEDIA_CODEC_ |
enum MediaCodecStatus { |
MEDIA_CODEC_OK, |
- MEDIA_CODEC_DEQUEUE_INPUT_AGAIN_LATER, |
- MEDIA_CODEC_DEQUEUE_OUTPUT_AGAIN_LATER, |
+ MEDIA_CODEC_TRY_AGAIN_LATER, |
MEDIA_CODEC_OUTPUT_BUFFERS_CHANGED, |
MEDIA_CODEC_OUTPUT_FORMAT_CHANGED, |
MEDIA_CODEC_NO_KEY, |
@@ -39,43 +39,35 @@ class MEDIA_EXPORT MediaCodecBridge { |
MediaCodecBridge() = default; |
virtual ~MediaCodecBridge() = default; |
- // Calls start() against the media codec instance. Returns whether media |
- // codec was successfully started. |
- virtual bool Start() = 0; |
- |
- // Finishes the decode/encode session. The instance remains active |
- // and ready to be StartAudio/Video()ed again. HOWEVER, due to the buggy |
- // vendor's implementation , b/8125974, Stop() -> StartAudio/Video() may not |
- // work on some devices. For reliability, Stop() -> delete and recreate new |
- // instance -> StartAudio/Video() is recommended. |
+ // Calls MediaCodec#stop(). However, due to buggy implementations (b/8125974) |
+ // Stop() followed by Start() may not work on some devices. For reliability, |
+ // it's recommended to delete the instance and create a new one instead. |
virtual void Stop() = 0; |
- // Calls flush() on the MediaCodec. All indices previously returned in calls |
- // to DequeueInputBuffer() and DequeueOutputBuffer() become invalid. Please |
- // note that this clears all the inputs in the media codec. In other words, |
- // there will be no outputs until new input is provided. Returns |
- // MEDIA_CODEC_ERROR if an unexpected error happens, or MEDIA_CODEC_OK |
- // otherwise. |
+ // Calls MediaCodec#flush(). The codec takes ownership of all input and output |
+ // buffers previously dequeued when this is called. Returns MEDIA_CODEC_ERROR |
+ // if an unexpected error happens, or MEDIA_CODEC_OK otherwise. |
virtual MediaCodecStatus Flush() = 0; |
- // Used for getting the output size. This is valid after DequeueInputBuffer() |
- // returns a format change by returning INFO_OUTPUT_FORMAT_CHANGED. |
+ // Returns the output size. This is valid after DequeueOutputBuffer() |
+ // signals a format change by returning OUTPUT_FORMAT_CHANGED. |
// Returns MEDIA_CODEC_ERROR if an error occurs, or MEDIA_CODEC_OK otherwise. |
virtual MediaCodecStatus GetOutputSize(gfx::Size* size) = 0; |
- // Used for checking for new sampling rate after DequeueInputBuffer() returns |
- // INFO_OUTPUT_FORMAT_CHANGED |
+ // Gets the sampling rate. This is valid after DequeueOutputBuffer() |
+ // signals a format change by returning INFO_OUTPUT_FORMAT_CHANGED. |
// Returns MEDIA_CODEC_ERROR if an error occurs, or MEDIA_CODEC_OK otherwise. |
virtual MediaCodecStatus GetOutputSamplingRate(int* sampling_rate) = 0; |
- // Fills |channel_count| with the number of audio channels. Useful after |
- // INFO_OUTPUT_FORMAT_CHANGED. |
- // Returns MEDIA_CODEC_ERROR if an error occurs, or MEDIA_CODEC_OK otherwise. |
+ // Fills |channel_count| with the number of audio channels. This is valid |
+ // after DequeueOutputBuffer() signals a format change by returning |
+ // INFO_OUTPUT_FORMAT_CHANGED. Returns MEDIA_CODEC_ERROR if an error occurs, |
+ // or MEDIA_CODEC_OK otherwise. |
virtual MediaCodecStatus GetOutputChannelCount(int* channel_count) = 0; |
// Submits a byte array to the given input buffer. Call this after getting an |
- // available buffer from DequeueInputBuffer(). If |data| is NULL, assume the |
- // input buffer has already been populated (but still obey |size|). |
+ // available buffer from DequeueInputBuffer(). If |data| is NULL, it assumes |
+ // the input buffer has already been populated (but still obeys |size|). |
// |data_size| must be less than kint32max (because Java). |
virtual MediaCodecStatus QueueInputBuffer( |
int index, |
@@ -140,6 +132,19 @@ class MEDIA_EXPORT MediaCodecBridge { |
// Gets the component name. Before API level 18 this returns an empty string. |
virtual std::string GetName() = 0; |
+ // Changes the output surface for the MediaCodec. May only be used on API |
+ // level 23 and higher (Marshmallow). |
+ virtual bool SetSurface(jobject surface) = 0; |
+ |
+ // Sets the video encoder target bitrate and framerate. |
+ virtual void SetVideoBitrate(int bps, int frame_rate) = 0; |
+ |
+ // Requests that the video encoder insert a key frame. |
+ virtual void RequestKeyFrameSoon() = 0; |
+ |
+ // Returns whether the codec is configured for adaptive playback. |
+ virtual bool IsAdaptivePlaybackSupported() = 0; |
+ |
DISALLOW_COPY_AND_ASSIGN(MediaCodecBridge); |
}; |