mirror of
https://github.com/androidx/media.git
synced 2025-05-12 10:09:55 +08:00
Inject MediaCodecAdapter.Factory
Make the MediaCodecFactory injectable from the constructors of MediaCodecAudioRenderer and MediaCodecVideoRenderer. PiperOrigin-RevId: 346784661
This commit is contained in:
parent
aac22da2d6
commit
392b3ab573
@ -173,6 +173,7 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media
|
|||||||
AudioSink audioSink) {
|
AudioSink audioSink) {
|
||||||
this(
|
this(
|
||||||
context,
|
context,
|
||||||
|
MediaCodecAdapter.Factory.DEFAULT,
|
||||||
mediaCodecSelector,
|
mediaCodecSelector,
|
||||||
/* enableDecoderFallback= */ false,
|
/* enableDecoderFallback= */ false,
|
||||||
eventHandler,
|
eventHandler,
|
||||||
@ -198,8 +199,42 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media
|
|||||||
@Nullable Handler eventHandler,
|
@Nullable Handler eventHandler,
|
||||||
@Nullable AudioRendererEventListener eventListener,
|
@Nullable AudioRendererEventListener eventListener,
|
||||||
AudioSink audioSink) {
|
AudioSink audioSink) {
|
||||||
|
this(
|
||||||
|
context,
|
||||||
|
MediaCodecAdapter.Factory.DEFAULT,
|
||||||
|
mediaCodecSelector,
|
||||||
|
enableDecoderFallback,
|
||||||
|
eventHandler,
|
||||||
|
eventListener,
|
||||||
|
audioSink);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new instance.
|
||||||
|
*
|
||||||
|
* @param context A context.
|
||||||
|
* @param codecAdapterFactory The {@link MediaCodecAdapter.Factory} used to create {@link
|
||||||
|
* MediaCodecAdapter} instances.
|
||||||
|
* @param mediaCodecSelector A decoder selector.
|
||||||
|
* @param enableDecoderFallback Whether to enable fallback to lower-priority decoders if decoder
|
||||||
|
* initialization fails. This may result in using a decoder that is slower/less efficient than
|
||||||
|
* the primary decoder.
|
||||||
|
* @param eventHandler A handler to use when delivering events to {@code eventListener}. May be
|
||||||
|
* null if delivery of events is not required.
|
||||||
|
* @param eventListener A listener of events. May be null if delivery of events is not required.
|
||||||
|
* @param audioSink The sink to which audio will be output.
|
||||||
|
*/
|
||||||
|
public MediaCodecAudioRenderer(
|
||||||
|
Context context,
|
||||||
|
MediaCodecAdapter.Factory codecAdapterFactory,
|
||||||
|
MediaCodecSelector mediaCodecSelector,
|
||||||
|
boolean enableDecoderFallback,
|
||||||
|
@Nullable Handler eventHandler,
|
||||||
|
@Nullable AudioRendererEventListener eventListener,
|
||||||
|
AudioSink audioSink) {
|
||||||
super(
|
super(
|
||||||
C.TRACK_TYPE_AUDIO,
|
C.TRACK_TYPE_AUDIO,
|
||||||
|
codecAdapterFactory,
|
||||||
mediaCodecSelector,
|
mediaCodecSelector,
|
||||||
enableDecoderFallback,
|
enableDecoderFallback,
|
||||||
/* assumedMinimumCodecOperatingRate= */ 44100);
|
/* assumedMinimumCodecOperatingRate= */ 44100);
|
||||||
|
@ -39,6 +39,9 @@ public interface MediaCodecAdapter {
|
|||||||
/** A factory for {@link MediaCodecAdapter} instances. */
|
/** A factory for {@link MediaCodecAdapter} instances. */
|
||||||
interface Factory {
|
interface Factory {
|
||||||
|
|
||||||
|
/** Default factory used in most cases. */
|
||||||
|
Factory DEFAULT = new SynchronousMediaCodecAdapter.Factory();
|
||||||
|
|
||||||
/** Creates an instance wrapping the provided {@link MediaCodec} instance. */
|
/** Creates an instance wrapping the provided {@link MediaCodec} instance. */
|
||||||
MediaCodecAdapter createAdapter(MediaCodec codec);
|
MediaCodecAdapter createAdapter(MediaCodec codec);
|
||||||
}
|
}
|
||||||
|
@ -290,6 +290,7 @@ public abstract class MediaCodecRenderer extends BaseRenderer {
|
|||||||
|
|
||||||
private static final int ADAPTATION_WORKAROUND_SLICE_WIDTH_HEIGHT = 32;
|
private static final int ADAPTATION_WORKAROUND_SLICE_WIDTH_HEIGHT = 32;
|
||||||
|
|
||||||
|
private final MediaCodecAdapter.Factory codecAdapterFactory;
|
||||||
private final MediaCodecSelector mediaCodecSelector;
|
private final MediaCodecSelector mediaCodecSelector;
|
||||||
private final boolean enableDecoderFallback;
|
private final boolean enableDecoderFallback;
|
||||||
private final float assumedMinimumCodecOperatingRate;
|
private final float assumedMinimumCodecOperatingRate;
|
||||||
@ -374,10 +375,12 @@ public abstract class MediaCodecRenderer extends BaseRenderer {
|
|||||||
*/
|
*/
|
||||||
public MediaCodecRenderer(
|
public MediaCodecRenderer(
|
||||||
int trackType,
|
int trackType,
|
||||||
|
MediaCodecAdapter.Factory codecAdapterFactory,
|
||||||
MediaCodecSelector mediaCodecSelector,
|
MediaCodecSelector mediaCodecSelector,
|
||||||
boolean enableDecoderFallback,
|
boolean enableDecoderFallback,
|
||||||
float assumedMinimumCodecOperatingRate) {
|
float assumedMinimumCodecOperatingRate) {
|
||||||
super(trackType);
|
super(trackType);
|
||||||
|
this.codecAdapterFactory = codecAdapterFactory;
|
||||||
this.mediaCodecSelector = checkNotNull(mediaCodecSelector);
|
this.mediaCodecSelector = checkNotNull(mediaCodecSelector);
|
||||||
this.enableDecoderFallback = enableDecoderFallback;
|
this.enableDecoderFallback = enableDecoderFallback;
|
||||||
this.assumedMinimumCodecOperatingRate = assumedMinimumCodecOperatingRate;
|
this.assumedMinimumCodecOperatingRate = assumedMinimumCodecOperatingRate;
|
||||||
@ -1082,7 +1085,7 @@ public abstract class MediaCodecRenderer extends BaseRenderer {
|
|||||||
enableSynchronizeCodecInteractionsWithQueueing)
|
enableSynchronizeCodecInteractionsWithQueueing)
|
||||||
.createAdapter(codec);
|
.createAdapter(codec);
|
||||||
} else {
|
} else {
|
||||||
codecAdapter = new SynchronousMediaCodecAdapter.Factory().createAdapter(codec);
|
codecAdapter = codecAdapterFactory.createAdapter(codec);
|
||||||
}
|
}
|
||||||
TraceUtil.endSection();
|
TraceUtil.endSection();
|
||||||
TraceUtil.beginSection("configureCodec");
|
TraceUtil.beginSection("configureCodec");
|
||||||
|
@ -200,6 +200,7 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
|
|||||||
int maxDroppedFramesToNotify) {
|
int maxDroppedFramesToNotify) {
|
||||||
this(
|
this(
|
||||||
context,
|
context,
|
||||||
|
MediaCodecAdapter.Factory.DEFAULT,
|
||||||
mediaCodecSelector,
|
mediaCodecSelector,
|
||||||
allowedJoiningTimeMs,
|
allowedJoiningTimeMs,
|
||||||
/* enableDecoderFallback= */ false,
|
/* enableDecoderFallback= */ false,
|
||||||
@ -230,8 +231,47 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
|
|||||||
@Nullable Handler eventHandler,
|
@Nullable Handler eventHandler,
|
||||||
@Nullable VideoRendererEventListener eventListener,
|
@Nullable VideoRendererEventListener eventListener,
|
||||||
int maxDroppedFramesToNotify) {
|
int maxDroppedFramesToNotify) {
|
||||||
|
this(
|
||||||
|
context,
|
||||||
|
MediaCodecAdapter.Factory.DEFAULT,
|
||||||
|
mediaCodecSelector,
|
||||||
|
allowedJoiningTimeMs,
|
||||||
|
enableDecoderFallback,
|
||||||
|
eventHandler,
|
||||||
|
eventListener,
|
||||||
|
maxDroppedFramesToNotify);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new instance.
|
||||||
|
*
|
||||||
|
* @param context A context.
|
||||||
|
* @param codecAdapterFactory The {@link MediaCodecAdapter.Factory} used to create {@link
|
||||||
|
* MediaCodecAdapter} instances.
|
||||||
|
* @param mediaCodecSelector A decoder selector.
|
||||||
|
* @param allowedJoiningTimeMs The maximum duration in milliseconds for which this video renderer
|
||||||
|
* can attempt to seamlessly join an ongoing playback.
|
||||||
|
* @param enableDecoderFallback Whether to enable fallback to lower-priority decoders if decoder
|
||||||
|
* initialization fails. This may result in using a decoder that is slower/less efficient than
|
||||||
|
* the primary decoder.
|
||||||
|
* @param eventHandler A handler to use when delivering events to {@code eventListener}. May be
|
||||||
|
* null if delivery of events is not required.
|
||||||
|
* @param eventListener A listener of events. May be null if delivery of events is not required.
|
||||||
|
* @param maxDroppedFramesToNotify The maximum number of frames that can be dropped between
|
||||||
|
* invocations of {@link VideoRendererEventListener#onDroppedFrames(int, long)}.
|
||||||
|
*/
|
||||||
|
public MediaCodecVideoRenderer(
|
||||||
|
Context context,
|
||||||
|
MediaCodecAdapter.Factory codecAdapterFactory,
|
||||||
|
MediaCodecSelector mediaCodecSelector,
|
||||||
|
long allowedJoiningTimeMs,
|
||||||
|
boolean enableDecoderFallback,
|
||||||
|
@Nullable Handler eventHandler,
|
||||||
|
@Nullable VideoRendererEventListener eventListener,
|
||||||
|
int maxDroppedFramesToNotify) {
|
||||||
super(
|
super(
|
||||||
C.TRACK_TYPE_VIDEO,
|
C.TRACK_TYPE_VIDEO,
|
||||||
|
codecAdapterFactory,
|
||||||
mediaCodecSelector,
|
mediaCodecSelector,
|
||||||
enableDecoderFallback,
|
enableDecoderFallback,
|
||||||
/* assumedMinimumCodecOperatingRate= */ 30);
|
/* assumedMinimumCodecOperatingRate= */ 30);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user