mirror of
https://github.com/samsonjs/media.git
synced 2026-04-27 15:07:40 +00:00
Remove unfinished FfmpegVideoRenderer from release
This commit is contained in:
parent
6cce608f32
commit
6c7884436a
4 changed files with 1 additions and 155 deletions
|
|
@ -45,7 +45,7 @@ public final class FfmpegLibrary {
|
||||||
/**
|
/**
|
||||||
* Override the names of the FFmpeg native libraries. If an application wishes to call this
|
* Override the names of the FFmpeg native libraries. If an application wishes to call this
|
||||||
* method, it must do so before calling any other method defined by this class, and before
|
* method, it must do so before calling any other method defined by this class, and before
|
||||||
* instantiating a {@link FfmpegAudioRenderer} or {@link FfmpegVideoRenderer} instance.
|
* instantiating a {@link FfmpegAudioRenderer} instance.
|
||||||
*
|
*
|
||||||
* @param libraries The names of the FFmpeg native libraries.
|
* @param libraries The names of the FFmpeg native libraries.
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -1,122 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (C) 2020 The Android Open Source Project
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
package com.google.android.exoplayer2.ext.ffmpeg;
|
|
||||||
|
|
||||||
import android.os.Handler;
|
|
||||||
import android.view.Surface;
|
|
||||||
import androidx.annotation.Nullable;
|
|
||||||
import com.google.android.exoplayer2.C;
|
|
||||||
import com.google.android.exoplayer2.Format;
|
|
||||||
import com.google.android.exoplayer2.RendererCapabilities;
|
|
||||||
import com.google.android.exoplayer2.decoder.Decoder;
|
|
||||||
import com.google.android.exoplayer2.drm.ExoMediaCrypto;
|
|
||||||
import com.google.android.exoplayer2.util.TraceUtil;
|
|
||||||
import com.google.android.exoplayer2.util.Util;
|
|
||||||
import com.google.android.exoplayer2.video.DecoderVideoRenderer;
|
|
||||||
import com.google.android.exoplayer2.video.VideoDecoderInputBuffer;
|
|
||||||
import com.google.android.exoplayer2.video.VideoDecoderOutputBuffer;
|
|
||||||
import com.google.android.exoplayer2.video.VideoRendererEventListener;
|
|
||||||
|
|
||||||
// TODO: Remove the NOTE below.
|
|
||||||
/**
|
|
||||||
* <b>NOTE: This class if under development and is not yet functional.</b>
|
|
||||||
*
|
|
||||||
* <p>Decodes and renders video using FFmpeg.
|
|
||||||
*/
|
|
||||||
public final class FfmpegVideoRenderer extends DecoderVideoRenderer {
|
|
||||||
|
|
||||||
private static final String TAG = "FfmpegVideoRenderer";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a new instance.
|
|
||||||
*
|
|
||||||
* @param allowedJoiningTimeMs The maximum duration in milliseconds for which this video renderer
|
|
||||||
* can attempt to seamlessly join an ongoing playback.
|
|
||||||
* @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 FfmpegVideoRenderer(
|
|
||||||
long allowedJoiningTimeMs,
|
|
||||||
@Nullable Handler eventHandler,
|
|
||||||
@Nullable VideoRendererEventListener eventListener,
|
|
||||||
int maxDroppedFramesToNotify) {
|
|
||||||
super(allowedJoiningTimeMs, eventHandler, eventListener, maxDroppedFramesToNotify);
|
|
||||||
// TODO: Implement.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getName() {
|
|
||||||
return TAG;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@RendererCapabilities.Capabilities
|
|
||||||
public final int supportsFormat(Format format) {
|
|
||||||
// TODO: Remove this line and uncomment the implementation below.
|
|
||||||
return FORMAT_UNSUPPORTED_TYPE;
|
|
||||||
/*
|
|
||||||
String mimeType = Assertions.checkNotNull(format.sampleMimeType);
|
|
||||||
if (!FfmpegLibrary.isAvailable() || !MimeTypes.isVideo(mimeType)) {
|
|
||||||
return FORMAT_UNSUPPORTED_TYPE;
|
|
||||||
} else if (!FfmpegLibrary.supportsFormat(format.sampleMimeType)) {
|
|
||||||
return RendererCapabilities.create(FORMAT_UNSUPPORTED_SUBTYPE);
|
|
||||||
} else if (format.exoMediaCryptoType != null) {
|
|
||||||
return RendererCapabilities.create(FORMAT_UNSUPPORTED_DRM);
|
|
||||||
} else {
|
|
||||||
return RendererCapabilities.create(
|
|
||||||
FORMAT_HANDLED,
|
|
||||||
ADAPTIVE_SEAMLESS,
|
|
||||||
TUNNELING_NOT_SUPPORTED);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("return.type.incompatible")
|
|
||||||
@Override
|
|
||||||
protected Decoder<VideoDecoderInputBuffer, VideoDecoderOutputBuffer, FfmpegDecoderException>
|
|
||||||
createDecoder(Format format, @Nullable ExoMediaCrypto mediaCrypto)
|
|
||||||
throws FfmpegDecoderException {
|
|
||||||
TraceUtil.beginSection("createFfmpegVideoDecoder");
|
|
||||||
// TODO: Implement, remove the SuppressWarnings annotation, and update the return type to use
|
|
||||||
// the concrete type of the decoder (probably FfmepgVideoDecoder).
|
|
||||||
TraceUtil.endSection();
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void renderOutputBufferToSurface(VideoDecoderOutputBuffer outputBuffer, Surface surface)
|
|
||||||
throws FfmpegDecoderException {
|
|
||||||
// TODO: Implement.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void setDecoderOutputMode(@C.VideoOutputMode int outputMode) {
|
|
||||||
// TODO: Uncomment the implementation below.
|
|
||||||
/*
|
|
||||||
if (decoder != null) {
|
|
||||||
decoder.setOutputMode(outputMode);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected boolean canKeepCodec(Format oldFormat, Format newFormat) {
|
|
||||||
return Util.areEqual(oldFormat.sampleMimeType, newFormat.sampleMimeType);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -25,10 +25,6 @@
|
||||||
-keepclassmembers class com.google.android.exoplayer2.ext.av1.Libgav1VideoRenderer {
|
-keepclassmembers class com.google.android.exoplayer2.ext.av1.Libgav1VideoRenderer {
|
||||||
<init>(long, android.os.Handler, com.google.android.exoplayer2.video.VideoRendererEventListener, int);
|
<init>(long, android.os.Handler, com.google.android.exoplayer2.video.VideoRendererEventListener, int);
|
||||||
}
|
}
|
||||||
-dontnote com.google.android.exoplayer2.ext.ffmpeg.FfmpegVideoRenderer
|
|
||||||
-keepclassmembers class com.google.android.exoplayer2.ext.ffmpeg.FfmpegVideoRenderer {
|
|
||||||
<init>(long, android.os.Handler, com.google.android.exoplayer2.video.VideoRendererEventListener, int);
|
|
||||||
}
|
|
||||||
-dontnote com.google.android.exoplayer2.ext.opus.LibopusAudioRenderer
|
-dontnote com.google.android.exoplayer2.ext.opus.LibopusAudioRenderer
|
||||||
-keepclassmembers class com.google.android.exoplayer2.ext.opus.LibopusAudioRenderer {
|
-keepclassmembers class com.google.android.exoplayer2.ext.opus.LibopusAudioRenderer {
|
||||||
<init>(android.os.Handler, com.google.android.exoplayer2.audio.AudioRendererEventListener, com.google.android.exoplayer2.audio.AudioSink);
|
<init>(android.os.Handler, com.google.android.exoplayer2.audio.AudioRendererEventListener, com.google.android.exoplayer2.audio.AudioSink);
|
||||||
|
|
|
||||||
|
|
@ -436,34 +436,6 @@ public class DefaultRenderersFactory implements RenderersFactory {
|
||||||
// The extension is present, but instantiation failed.
|
// The extension is present, but instantiation failed.
|
||||||
throw new RuntimeException("Error instantiating AV1 extension", e);
|
throw new RuntimeException("Error instantiating AV1 extension", e);
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
|
||||||
// Full class names used for constructor args so the LINT rule triggers if any of them move.
|
|
||||||
// LINT.IfChange
|
|
||||||
Class<?> clazz =
|
|
||||||
Class.forName("com.google.android.exoplayer2.ext.ffmpeg.FfmpegVideoRenderer");
|
|
||||||
Constructor<?> constructor =
|
|
||||||
clazz.getConstructor(
|
|
||||||
long.class,
|
|
||||||
android.os.Handler.class,
|
|
||||||
com.google.android.exoplayer2.video.VideoRendererEventListener.class,
|
|
||||||
int.class);
|
|
||||||
// LINT.ThenChange(../../../../../../../proguard-rules.txt)
|
|
||||||
Renderer renderer =
|
|
||||||
(Renderer)
|
|
||||||
constructor.newInstance(
|
|
||||||
allowedVideoJoiningTimeMs,
|
|
||||||
eventHandler,
|
|
||||||
eventListener,
|
|
||||||
MAX_DROPPED_VIDEO_FRAME_COUNT_TO_NOTIFY);
|
|
||||||
out.add(extensionRendererIndex++, renderer);
|
|
||||||
Log.i(TAG, "Loaded FfmpegVideoRenderer.");
|
|
||||||
} catch (ClassNotFoundException e) {
|
|
||||||
// Expected if the app was built without the extension.
|
|
||||||
} catch (Exception e) {
|
|
||||||
// The extension is present, but instantiation failed.
|
|
||||||
throw new RuntimeException("Error instantiating FFmpeg extension", e);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue