MediaCodec.ReleaseOutputBuffer Method
Definition
Important
Some information relates to prerelease product that may be substantially modified before it’s released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
Overloads
ReleaseOutputBuffer(Int32, Boolean) |
If you are done with a buffer, use this call to return the buffer to the codec or to render it on the output surface. |
ReleaseOutputBuffer(Int32, Int64) |
If you are done with a buffer, use this call to update its surface timestamp and return it to the codec to render it on the output surface. |
ReleaseOutputBuffer(Int32, Boolean)
If you are done with a buffer, use this call to return the buffer to the codec or to render it on the output surface.
[Android.Runtime.Register("releaseOutputBuffer", "(IZ)V", "")]
public void ReleaseOutputBuffer (int index, bool render);
[<Android.Runtime.Register("releaseOutputBuffer", "(IZ)V", "")>]
member this.ReleaseOutputBuffer : int * bool -> unit
Parameters
- index
- Int32
The index of a client-owned output buffer previously returned
from a call to #dequeueOutputBuffer
.
- render
- Boolean
If a valid surface was specified when configuring the codec, passing true renders this output buffer to the surface.
- Attributes
Exceptions
if not in the Executing state.
upon codec error.
Remarks
If you are done with a buffer, use this call to return the buffer to the codec or to render it on the output surface. If you configured the codec with an output surface, setting render
to true
will first send the buffer to that output surface. The surface will release the buffer back to the codec once it is no longer used/displayed.
Once an output buffer is released to the codec, it MUST NOT be used until it is later retrieved by #getOutputBuffer
in response to a #dequeueOutputBuffer
return value or a Callback#onOutputBufferAvailable
callback.
Java documentation for android.media.MediaCodec.releaseOutputBuffer(int, boolean)
.
Portions of this page are modifications based on work created and shared by the Android Open Source Project and used according to terms described in the Creative Commons 2.5 Attribution License.
Applies to
ReleaseOutputBuffer(Int32, Int64)
If you are done with a buffer, use this call to update its surface timestamp and return it to the codec to render it on the output surface.
[Android.Runtime.Register("releaseOutputBuffer", "(IJ)V", "")]
public void ReleaseOutputBuffer (int index, long renderTimestampNs);
[<Android.Runtime.Register("releaseOutputBuffer", "(IJ)V", "")>]
member this.ReleaseOutputBuffer : int * int64 -> unit
Parameters
- index
- Int32
The index of a client-owned output buffer previously returned
from a call to #dequeueOutputBuffer
.
- renderTimestampNs
- Int64
The timestamp to associate with this buffer when it is sent to the Surface.
- Attributes
Exceptions
if not in the Executing state.
upon codec error.
Remarks
If you are done with a buffer, use this call to update its surface timestamp and return it to the codec to render it on the output surface. If you have not specified an output surface when configuring this video codec, this call will simply return the buffer to the codec.
The timestamp may have special meaning depending on the destination surface.
<table> <tr><th>SurfaceView specifics</th></tr> <tr><td> If you render your buffer on a android.view.SurfaceView
, you can use the timestamp to render the buffer at a specific time (at the VSYNC at or after the buffer timestamp). For this to work, the timestamp needs to be reasonably close to the current System#nanoTime
. Currently, this is set as within one (1) second. A few notes:
<ul> <li>the buffer will not be returned to the codec until the timestamp has passed and the buffer is no longer used by the android.view.Surface
. <li>buffers are processed sequentially, so you may block subsequent buffers to be displayed on the android.view.Surface
. This is important if you want to react to user action, e.g. stop the video or seek. <li>if multiple buffers are sent to the android.view.Surface
to be rendered at the same VSYNC, the last one will be shown, and the other ones will be dropped. <li>if the timestamp is <em>not</em> "reasonably close" to the current system time, the android.view.Surface
will ignore the timestamp, and display the buffer at the earliest feasible time. In this mode it will not drop frames. <li>for best performance and quality, call this method when you are about two VSYNCs' time before the desired render time. For 60Hz displays, this is about 33 msec. </ul> </td></tr> </table>
Once an output buffer is released to the codec, it MUST NOT be used until it is later retrieved by #getOutputBuffer
in response to a #dequeueOutputBuffer
return value or a Callback#onOutputBufferAvailable
callback.
Java documentation for android.media.MediaCodec.releaseOutputBuffer(int, long)
.
Portions of this page are modifications based on work created and shared by the Android Open Source Project and used according to terms described in the Creative Commons 2.5 Attribution License.