Added user-defined predicate to filter video codec implementations.
Ability to provide user defined predicate to disable particular codec in particular circumstances was added. This could help addressing mysterious crashes on specific Android devices. Bug: webrtc:10029 Change-Id: I7ad81f4b1351aa68f036c0ee3b6d32fbf0f697ed Reviewed-on: https://webrtc-review.googlesource.com/c/111781 Reviewed-by: Sami Kalliomäki <sakal@webrtc.org> Commit-Queue: Sami Kalliomäki <sakal@webrtc.org> Cr-Commit-Position: refs/heads/master@{#25820}
This commit is contained in:

committed by
Commit Bot

parent
7f7e973362
commit
68478b8287
@ -10,10 +10,29 @@
|
||||
|
||||
package org.webrtc;
|
||||
|
||||
import android.media.MediaCodecInfo;
|
||||
import java.util.Arrays;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
/** Factory for Android hardware VideoDecoders. */
|
||||
public class HardwareVideoDecoderFactory extends MediaCodecVideoDecoderFactory {
|
||||
private final static Predicate<MediaCodecInfo> defaultAllowedPredicate =
|
||||
new Predicate<MediaCodecInfo>() {
|
||||
private String[] prefixBlacklist =
|
||||
Arrays.copyOf(MediaCodecUtils.SOFTWARE_IMPLEMENTATION_PREFIXES,
|
||||
MediaCodecUtils.SOFTWARE_IMPLEMENTATION_PREFIXES.length);
|
||||
@Override
|
||||
public boolean test(MediaCodecInfo arg) {
|
||||
final String name = arg.getName();
|
||||
for (String prefix : prefixBlacklist) {
|
||||
if (name.startsWith(prefix)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
/** Creates a HardwareVideoDecoderFactory that does not use surface textures. */
|
||||
@Deprecated // Not removed yet to avoid breaking callers.
|
||||
public HardwareVideoDecoderFactory() {
|
||||
@ -27,7 +46,21 @@ public class HardwareVideoDecoderFactory extends MediaCodecVideoDecoderFactory {
|
||||
* this disables texture support.
|
||||
*/
|
||||
public HardwareVideoDecoderFactory(@Nullable EglBase.Context sharedContext) {
|
||||
super(sharedContext, /* prefixWhitelist= */ new String[] {""},
|
||||
/* prefixBlacklist= */ MediaCodecUtils.SOFTWARE_IMPLEMENTATION_PREFIXES);
|
||||
this(sharedContext, /* codecAllowedPredicate= */ null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a HardwareVideoDecoderFactory that supports surface texture rendering.
|
||||
*
|
||||
* @param sharedContext The textures generated will be accessible from this context. May be null,
|
||||
* this disables texture support.
|
||||
* @param codecAllowedPredicate predicate to filter codecs. It is combined with the default
|
||||
* predicate that only allows hardware codecs.
|
||||
*/
|
||||
public HardwareVideoDecoderFactory(@Nullable EglBase.Context sharedContext,
|
||||
@Nullable Predicate<MediaCodecInfo> codecAllowedPredicate) {
|
||||
super(sharedContext,
|
||||
(codecAllowedPredicate == null ? defaultAllowedPredicate
|
||||
: codecAllowedPredicate.and(defaultAllowedPredicate)));
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user