Skip to content

Commit

Permalink
mediacodec: Refactor get_codec_initializers
Browse files Browse the repository at this point in the history
Refactor the if else conditions into a match statement and move
prefer_hw into a separate function as more logic will go there in
the future.

PiperOrigin-RevId: 682024252
  • Loading branch information
vigneshvg authored and copybara-github committed Oct 3, 2024
1 parent 9669802 commit 2ce9188
Showing 1 changed file with 39 additions and 35 deletions.
74 changes: 39 additions & 35 deletions src/codecs/android_mediacodec.rs
Original file line number Diff line number Diff line change
Expand Up @@ -215,13 +215,25 @@ enum CodecInitializer {
ByMimeType(String),
}

fn prefer_hw() -> bool {
#[cfg(not(android_soong))]
return false;

#[cfg(android_soong)]
{
let prefer_hw = rustutils::system_properties::read_bool(
"media.stagefright.thumbnail.prefer_hw_codecs",
false,
)
.unwrap_or(false);
if !prefer_hw {
return false;
}
return true;
}
}

fn get_codec_initializers(config: &DecoderConfig) -> Vec<CodecInitializer> {
let dav1d = String::from("c2.android.av1-dav1d.decoder");
let gav1 = String::from("c2.android.av1.decoder");
// As of Sep 2024, c2.android.av1.decoder is the only known decoder to support 12-bit AV1. So
// prefer that for 12 bit images.
let prefer_gav1 = config.depth == 12;
let mime_type = MediaCodec::AV1_MIME;
#[cfg(android_soong)]
{
// Use a specific decoder if it is requested.
Expand All @@ -232,42 +244,34 @@ fn get_codec_initializers(config: &DecoderConfig) -> Vec<CodecInitializer> {
return vec![CodecInitializer::ByName(decoder)];
}
}
// If hardware decoders are allowed, then search by mime type first and then try the
// software decoders.
let prefer_hw = rustutils::system_properties::read_bool(
"media.stagefright.thumbnail.prefer_hw_codecs",
false,
)
.unwrap_or(false);
if prefer_hw {
if prefer_gav1 {
return vec![
CodecInitializer::ByName(gav1),
CodecInitializer::ByMimeType(mime_type.to_string()),
CodecInitializer::ByName(dav1d),
];
} else {
return vec![
CodecInitializer::ByMimeType(mime_type.to_string()),
CodecInitializer::ByName(dav1d),
CodecInitializer::ByName(gav1),
];
}
}
}
// Default list of initializers.
if prefer_gav1 {
vec![
let dav1d = String::from("c2.android.av1-dav1d.decoder");
let gav1 = String::from("c2.android.av1.decoder");
// As of Sep 2024, c2.android.av1.decoder is the only known decoder to support 12-bit AV1. So
// prefer that for 12 bit images.
let prefer_gav1 = config.depth == 12;
let mime_type = MediaCodec::AV1_MIME;
match (prefer_hw(), prefer_gav1) {
(true, true) => vec![
CodecInitializer::ByName(gav1),
CodecInitializer::ByMimeType(mime_type.to_string()),
CodecInitializer::ByName(dav1d),
],
(true, false) => vec![
CodecInitializer::ByMimeType(mime_type.to_string()),
CodecInitializer::ByName(dav1d),
CodecInitializer::ByName(gav1),
],
(false, true) => vec![
CodecInitializer::ByName(gav1),
CodecInitializer::ByName(dav1d),
CodecInitializer::ByMimeType(mime_type.to_string()),
]
} else {
vec![
],
(false, false) => vec![
CodecInitializer::ByName(dav1d),
CodecInitializer::ByName(gav1),
CodecInitializer::ByMimeType(mime_type.to_string()),
]
],
}
}

Expand Down

0 comments on commit 2ce9188

Please sign in to comment.