Snap for 12742097 from 7dca430c0f36fd32ceeb4c3e925477f9da4f60d6 to 25Q1-release
Change-Id: I367516a7f82c14eaefb05a1b0881fc8770b35a90
diff --git a/camera/camera_platform.aconfig b/camera/camera_platform.aconfig
index 5682ad2..627b225 100644
--- a/camera/camera_platform.aconfig
+++ b/camera/camera_platform.aconfig
@@ -272,4 +272,11 @@
metadata {
purpose: PURPOSE_BUGFIX
}
-}
\ No newline at end of file
+}
+
+flag {
+ namespace: "camera_platform"
+ name: "desktop_effects"
+ description: "Applies system controlled effects targetting video conferencing"
+ bug: "376797335"
+}
diff --git a/camera/ndk/impl/ACameraMetadata.cpp b/camera/ndk/impl/ACameraMetadata.cpp
index 32e2f3d..8d0ca96 100644
--- a/camera/ndk/impl/ACameraMetadata.cpp
+++ b/camera/ndk/impl/ACameraMetadata.cpp
@@ -654,6 +654,12 @@
ANDROID_DEPTH_MAX_DEPTH_SAMPLES,
ANDROID_HEIC_INFO_SUPPORTED,
ANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT,
+ ANDROID_DESKTOP_EFFECTS_CAPABILITIES,
+ ANDROID_DESKTOP_EFFECTS_BACKGROUND_BLUR_MODES,
+ ANDROID_DESKTOP_EFFECTS_BACKGROUND_BLUR_MODE,
+ ANDROID_DESKTOP_EFFECTS_FACE_RETOUCH_MODE,
+ ANDROID_DESKTOP_EFFECTS_FACE_RETOUCH_STRENGTH,
+ ANDROID_DESKTOP_EFFECTS_PORTRAIT_RELIGHT_MODE,
});
/*~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~
diff --git a/camera/ndk/include/camera/NdkCameraMetadataTags.h b/camera/ndk/include/camera/NdkCameraMetadataTags.h
index fc6b932..2234bed 100644
--- a/camera/ndk/include/camera/NdkCameraMetadataTags.h
+++ b/camera/ndk/include/camera/NdkCameraMetadataTags.h
@@ -92,6 +92,7 @@
ACAMERA_EXTENSION,
ACAMERA_JPEGR,
ACAMERA_SHARED_SESSION,
+ ACAMERA_DESKTOP_EFFECTS,
ACAMERA_SECTION_COUNT,
ACAMERA_VENDOR = 0x8000
@@ -140,6 +141,7 @@
ACAMERA_EXTENSION_START = ACAMERA_EXTENSION << 16,
ACAMERA_JPEGR_START = ACAMERA_JPEGR << 16,
ACAMERA_SHARED_SESSION_START = ACAMERA_SHARED_SESSION << 16,
+ ACAMERA_DESKTOP_EFFECTS_START = ACAMERA_DESKTOP_EFFECTS << 16,
ACAMERA_VENDOR_START = ACAMERA_VENDOR << 16
} acamera_metadata_section_start_t;
@@ -12082,6 +12084,7 @@
+
__END_DECLS
#endif /* _NDK_CAMERA_METADATA_TAGS_H */
diff --git a/media/audioaidlconversion/AidlConversionCppNdk.cpp b/media/audioaidlconversion/AidlConversionCppNdk.cpp
index f739f3c..99b5381 100644
--- a/media/audioaidlconversion/AidlConversionCppNdk.cpp
+++ b/media/audioaidlconversion/AidlConversionCppNdk.cpp
@@ -803,6 +803,42 @@
{// Note: not in the IANA registry.
AUDIO_FORMAT_APTX_ADAPTIVE_R4,
make_AudioFormatDescription("audio/vnd.qcom.aptx.adaptive.r4")},
+ {// Note: not in the IANA registry.
+ AUDIO_FORMAT_IAMF_SIMPLE_OPUS, make_AudioFormatDescription(
+ std::string(::android::MEDIA_MIMETYPE_AUDIO_IAMF) + ".simple.opus")},
+ {// Note: not in the IANA registry.
+ AUDIO_FORMAT_IAMF_SIMPLE_AAC, make_AudioFormatDescription(
+ std::string(::android::MEDIA_MIMETYPE_AUDIO_IAMF) + ".simple.aac")},
+ {// Note: not in the IANA registry.
+ AUDIO_FORMAT_IAMF_SIMPLE_FLAC, make_AudioFormatDescription(
+ std::string(::android::MEDIA_MIMETYPE_AUDIO_IAMF) + ".simple.flac")},
+ {// Note: not in the IANA registry.
+ AUDIO_FORMAT_IAMF_SIMPLE_PCM, make_AudioFormatDescription(
+ std::string(::android::MEDIA_MIMETYPE_AUDIO_IAMF) + ".simple.pcm")},
+ {// Note: not in the IANA registry.
+ AUDIO_FORMAT_IAMF_BASE_OPUS, make_AudioFormatDescription(
+ std::string(::android::MEDIA_MIMETYPE_AUDIO_IAMF) + ".base.opus")},
+ {// Note: not in the IANA registry.
+ AUDIO_FORMAT_IAMF_BASE_AAC, make_AudioFormatDescription(
+ std::string(::android::MEDIA_MIMETYPE_AUDIO_IAMF) + ".base.aac")},
+ {// Note: not in the IANA registry.
+ AUDIO_FORMAT_IAMF_BASE_FLAC, make_AudioFormatDescription(
+ std::string(::android::MEDIA_MIMETYPE_AUDIO_IAMF) + ".base.flac")},
+ {// Note: not in the IANA registry.
+ AUDIO_FORMAT_IAMF_BASE_PCM, make_AudioFormatDescription(
+ std::string(::android::MEDIA_MIMETYPE_AUDIO_IAMF) + ".base.pcm")},
+ {// Note: not in the IANA registry.
+ AUDIO_FORMAT_IAMF_BASE_ENHANCED_OPUS, make_AudioFormatDescription(
+ std::string(::android::MEDIA_MIMETYPE_AUDIO_IAMF) + ".base_enhanced.opus")},
+ {// Note: not in the IANA registry.
+ AUDIO_FORMAT_IAMF_BASE_ENHANCED_AAC, make_AudioFormatDescription(
+ std::string(::android::MEDIA_MIMETYPE_AUDIO_IAMF) + ".base_enhanced.aac")},
+ {// Note: not in the IANA registry.
+ AUDIO_FORMAT_IAMF_BASE_ENHANCED_FLAC, make_AudioFormatDescription(
+ std::string(::android::MEDIA_MIMETYPE_AUDIO_IAMF) + ".base_enhanced.flac")},
+ {// Note: not in the IANA registry.
+ AUDIO_FORMAT_IAMF_BASE_ENHANCED_PCM, make_AudioFormatDescription(
+ std::string(::android::MEDIA_MIMETYPE_AUDIO_IAMF) + ".base_enhanced.pcm")},
}};
return pairs;
}
@@ -1064,7 +1100,7 @@
// Use '01' for LSB bits 0 and 1 as Bluetooth MAC addresses are never multicast
// and universaly administered
constexpr std::array<uint8_t, 4> BTANON_PREFIX {0xFD, 0xFF, 0xFF, 0xFF};
- // Keep sync with ServiceUtilities.cpp mustAnonymizeBluetoothAddress
+ // Keep sync with ServiceUtilities.cpp anonymizeBluetoothAddress
constexpr const char * BTANON_PREFIX_STR = "XX:XX:XX:XX:";
}
diff --git a/media/codec2/components/apv/C2SoftApvEnc.cpp b/media/codec2/components/apv/C2SoftApvEnc.cpp
index 9c5e0b2..9d84bc7 100644
--- a/media/codec2/components/apv/C2SoftApvEnc.cpp
+++ b/media/codec2/components/apv/C2SoftApvEnc.cpp
@@ -222,6 +222,7 @@
.build());
std::vector<uint32_t> pixelFormats = {
HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED,
+ HAL_PIXEL_FORMAT_YCBCR_420_888,
};
if (isHalPixelFormatSupported((AHardwareBuffer_Format)HAL_PIXEL_FORMAT_YCBCR_P010)) {
pixelFormats.push_back(HAL_PIXEL_FORMAT_YCBCR_P010);
@@ -231,7 +232,7 @@
}
addParameter(DefineParam(mPixelFormat, C2_PARAMKEY_PIXEL_FORMAT)
.withDefault(new C2StreamPixelFormatInfo::input(
- 0u, HAL_PIXEL_FORMAT_YCBCR_P010))
+ 0u, HAL_PIXEL_FORMAT_YCBCR_420_888))
.withFields({C2F(mPixelFormat, value).oneOf({pixelFormats})})
.withSetter((Setter<decltype(*mPixelFormat)>::StrictValueWithNoDeps))
.build());
@@ -272,6 +273,13 @@
if (!me.F(me.v.level).supportsAtAll(me.v.level)) {
me.set().level = LEVEL_APV_1_BAND_0;
}
+
+ int32_t bandIdc = me.v.level <= LEVEL_APV_7_1_BAND_0 ? 0 :
+ me.v.level <= LEVEL_APV_7_1_BAND_1 ? 1 :
+ me.v.level <= LEVEL_APV_7_1_BAND_2 ? 2 : 3;
+
+ me.set().level = decisionApvLevel(size.v.width, size.v.height, frameRate.v.value,
+ (uint64_t)bitrate.v.value, bandIdc);
return C2R::Ok();
}
@@ -302,6 +310,119 @@
return C2R::Ok();
}
+ static C2Config::level_t decisionApvLevel(int32_t width, int32_t height, int32_t fps,
+ uint64_t bitrate, int32_t band) {
+ C2Config::level_t level = C2Config::LEVEL_APV_1_BAND_0;
+ struct LevelLimits {
+ C2Config::level_t level;
+ uint64_t samplesPerSec;
+ uint64_t kbpsOfBand;
+ };
+
+ constexpr LevelLimits kLimitsBand0[] = {
+ {LEVEL_APV_1_BAND_0, 3'041'280, 7'000},
+ {LEVEL_APV_1_1_BAND_0, 6'082'560, 14'000},
+ {LEVEL_APV_2_BAND_0, 15'667'200, 36'000},
+ {LEVEL_APV_2_1_BAND_0, 31'334'400, 71'000},
+ {LEVEL_APV_3_BAND_0, 66'846'720, 101'000},
+ {LEVEL_APV_3_1_BAND_0, 133'693'440, 201'000},
+ {LEVEL_APV_4_BAND_0, 265'420'800, 401'000},
+ {LEVEL_APV_4_1_BAND_0, 530'841'600, 780'000},
+ {LEVEL_APV_5_BAND_0, 1'061'683'200, 1'560'000},
+ {LEVEL_APV_5_1_BAND_0, 2'123'366'400, 3'324'000},
+ {LEVEL_APV_6_BAND_0, 4'777'574'400, 6'648'000},
+ {LEVEL_APV_6_1_BAND_0, 8'493'465'600, 13'296'000},
+ {LEVEL_APV_7_BAND_0, 16'986'931'200, 26'592'000},
+ {LEVEL_APV_7_1_BAND_0, 33'973'862'400, 53'184'000},
+ };
+
+ constexpr LevelLimits kLimitsBand1[] = {
+ {LEVEL_APV_1_BAND_1, 3'041'280, 11'000},
+ {LEVEL_APV_1_1_BAND_1, 6'082'560, 21'000},
+ {LEVEL_APV_2_BAND_1, 15'667'200, 53'000},
+ {LEVEL_APV_2_1_BAND_1, 31'334'400, 106'00},
+ {LEVEL_APV_3_BAND_1, 66'846'720, 151'000},
+ {LEVEL_APV_3_1_BAND_1, 133'693'440, 301'000},
+ {LEVEL_APV_4_BAND_1, 265'420'800, 602'000},
+ {LEVEL_APV_4_1_BAND_1, 530'841'600, 1'170'000},
+ {LEVEL_APV_5_BAND_1, 1'061'683'200, 2'340'000},
+ {LEVEL_APV_5_1_BAND_1, 2'123'366'400, 4'986'000},
+ {LEVEL_APV_6_BAND_1, 4'777'574'400, 9'972'000},
+ {LEVEL_APV_6_1_BAND_1, 8'493'465'600, 19'944'000},
+ {LEVEL_APV_7_BAND_1, 16'986'931'200, 39'888'000},
+ {LEVEL_APV_7_1_BAND_1, 33'973'862'400, 79'776'000},
+ };
+
+ constexpr LevelLimits kLimitsBand2[] = {
+ {LEVEL_APV_1_BAND_2, 3'041'280, 14'000},
+ {LEVEL_APV_1_1_BAND_2, 6'082'560, 28'000},
+ {LEVEL_APV_2_BAND_2, 15'667'200, 71'000},
+ {LEVEL_APV_2_1_BAND_2, 31'334'400, 141'000},
+ {LEVEL_APV_3_BAND_2, 66'846'720, 201'000},
+ {LEVEL_APV_3_1_BAND_2, 133'693'440, 401'000},
+ {LEVEL_APV_4_BAND_2, 265'420'800, 780'000},
+ {LEVEL_APV_4_1_BAND_2, 530'841'600, 1'560'000},
+ {LEVEL_APV_5_BAND_2, 1'061'683'200, 3'324'000},
+ {LEVEL_APV_5_1_BAND_2, 2'123'366'400, 6'648'000},
+ {LEVEL_APV_6_BAND_2, 4'777'574'400, 13'296'000},
+ {LEVEL_APV_6_1_BAND_2, 8'493'465'600, 26'592'000},
+ {LEVEL_APV_7_BAND_2, 16'986'931'200, 53'184'000},
+ {LEVEL_APV_7_1_BAND_2, 33'973'862'400, 106'368'000},
+ };
+
+ constexpr LevelLimits kLimitsBand3[] = {
+ {LEVEL_APV_1_BAND_3, 3'041'280, 21'000},
+ {LEVEL_APV_1_1_BAND_3, 6'082'560, 42'000},
+ {LEVEL_APV_2_BAND_3, 15'667'200, 106'000},
+ {LEVEL_APV_2_1_BAND_3, 31'334'400, 212'000},
+ {LEVEL_APV_3_BAND_3, 66'846'720, 301'000},
+ {LEVEL_APV_3_1_BAND_3, 133'693'440, 602'000},
+ {LEVEL_APV_4_BAND_3, 265'420'800, 1'170'000},
+ {LEVEL_APV_4_1_BAND_3, 530'841'600, 2'340'000},
+ {LEVEL_APV_5_BAND_3, 1'061'683'200, 4'986'000},
+ {LEVEL_APV_5_1_BAND_3, 2'123'366'400, 9'972'000},
+ {LEVEL_APV_6_BAND_3, 4'777'574'400, 19'944'000},
+ {LEVEL_APV_6_1_BAND_3, 8'493'465'600, 39'888'000},
+ {LEVEL_APV_7_BAND_3, 16'986'931'200, 79'776'000},
+ {LEVEL_APV_7_1_BAND_3, 33'973'862'400, 159'552'000},
+ };
+
+ uint64_t samplesPerSec = width * height * fps;
+ if (band == 0) {
+ for (const LevelLimits& limit : kLimitsBand0) {
+ if (samplesPerSec <= limit.samplesPerSec && bitrate <= limit.kbpsOfBand * 1000) {
+ level = limit.level;
+ break;
+ }
+ }
+ } else if (band == 1) {
+ for (const LevelLimits& limit : kLimitsBand1) {
+ if (samplesPerSec <= limit.samplesPerSec && bitrate <= limit.kbpsOfBand * 1000) {
+ level = limit.level;
+ break;
+ }
+ }
+ } else if (band == 2) {
+ for (const LevelLimits& limit : kLimitsBand2) {
+ if (samplesPerSec <= limit.samplesPerSec && bitrate <= limit.kbpsOfBand * 1000) {
+ level = limit.level;
+ break;
+ }
+ }
+ } else if (band == 3) {
+ for (const LevelLimits& limit : kLimitsBand3) {
+ if (samplesPerSec <= limit.samplesPerSec && bitrate <= limit.kbpsOfBand * 1000) {
+ level = limit.level;
+ break;
+ }
+ }
+ } else {
+ ALOGE("Invalid band_idc on calculte level");
+ }
+
+ return level;
+ }
+
uint32_t getProfile_l() const {
int32_t profile = PROFILE_UNUSED;
@@ -328,7 +449,7 @@
profile = 99;
break;
default:
- ALOGD("Unrecognized profile: %x", mProfileLevel->profile);
+ ALOGW("Unrecognized profile: %x", mProfileLevel->profile);
}
return profile;
}
@@ -339,54 +460,264 @@
// TODO: Add Band settings
switch (mProfileLevel->level) {
case C2Config::LEVEL_APV_1_BAND_0:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_1_BAND_1:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_1_BAND_2:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_1_BAND_3:
level = 10;
break;
case C2Config::LEVEL_APV_1_1_BAND_0:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_1_1_BAND_1:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_1_1_BAND_2:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_1_1_BAND_3:
level = 11;
break;
case C2Config::LEVEL_APV_2_BAND_0:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_2_BAND_1:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_2_BAND_2:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_2_BAND_3:
level = 20;
break;
case C2Config::LEVEL_APV_2_1_BAND_0:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_2_1_BAND_1:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_2_1_BAND_2:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_2_1_BAND_3:
level = 21;
break;
case C2Config::LEVEL_APV_3_BAND_0:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_3_BAND_1:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_3_BAND_2:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_3_BAND_3:
level = 30;
break;
case C2Config::LEVEL_APV_3_1_BAND_0:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_3_1_BAND_1:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_3_1_BAND_2:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_3_1_BAND_3:
level = 31;
break;
case C2Config::LEVEL_APV_4_BAND_0:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_4_BAND_1:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_4_BAND_2:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_4_BAND_3:
level = 40;
break;
case C2Config::LEVEL_APV_4_1_BAND_0:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_4_1_BAND_1:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_4_1_BAND_2:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_4_1_BAND_3:
level = 41;
break;
case C2Config::LEVEL_APV_5_BAND_0:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_5_BAND_1:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_5_BAND_2:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_5_BAND_3:
level = 50;
break;
case C2Config::LEVEL_APV_5_1_BAND_0:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_5_1_BAND_1:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_5_1_BAND_2:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_5_1_BAND_3:
level = 51;
break;
case C2Config::LEVEL_APV_6_BAND_0:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_6_BAND_1:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_6_BAND_2:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_6_BAND_3:
level = 60;
break;
case C2Config::LEVEL_APV_6_1_BAND_0:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_6_1_BAND_1:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_6_1_BAND_2:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_6_1_BAND_3:
level = 61;
break;
case C2Config::LEVEL_APV_7_BAND_0:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_7_BAND_1:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_7_BAND_2:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_7_BAND_3:
level = 70;
break;
case C2Config::LEVEL_APV_7_1_BAND_0:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_7_1_BAND_1:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_7_1_BAND_2:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_7_1_BAND_3:
level = 71;
break;
default:
- ALOGD("Unrecognized level: %x", mProfileLevel->level);
+ ALOGW("Unrecognized level: %x", mProfileLevel->level);
}
// Convert to APV level_idc according to APV spec
return level * 3;
}
+ uint32_t getBandIdc_l() const {
+ uint32_t bandIdc = 0;
+
+ switch (mProfileLevel->level) {
+ case C2Config::LEVEL_APV_1_BAND_0:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_1_1_BAND_0:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_2_BAND_0:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_2_1_BAND_0:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_3_BAND_0:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_3_1_BAND_0:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_4_BAND_0:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_4_1_BAND_0:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_5_BAND_0:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_5_1_BAND_0:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_6_BAND_0:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_6_1_BAND_0:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_7_BAND_0:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_7_1_BAND_0:
+ bandIdc = 0;
+ break;
+ case C2Config::LEVEL_APV_1_BAND_1:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_1_1_BAND_1:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_2_BAND_1:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_2_1_BAND_1:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_3_BAND_1:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_3_1_BAND_1:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_4_BAND_1:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_4_1_BAND_1:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_5_BAND_1:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_5_1_BAND_1:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_6_BAND_1:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_6_1_BAND_1:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_7_BAND_1:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_7_1_BAND_1:
+ bandIdc = 1;
+ break;
+ case C2Config::LEVEL_APV_1_BAND_2:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_1_1_BAND_2:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_2_BAND_2:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_2_1_BAND_2:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_3_BAND_2:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_3_1_BAND_2:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_4_BAND_2:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_4_1_BAND_2:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_5_BAND_2:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_5_1_BAND_2:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_6_BAND_2:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_6_1_BAND_2:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_7_BAND_2:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_7_1_BAND_2:
+ bandIdc = 2;
+ break;
+ case C2Config::LEVEL_APV_1_BAND_3:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_1_1_BAND_3:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_2_BAND_3:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_2_1_BAND_3:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_3_BAND_3:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_3_1_BAND_3:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_4_BAND_3:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_4_1_BAND_3:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_5_BAND_3:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_5_1_BAND_3:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_6_BAND_3:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_6_1_BAND_3:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_7_BAND_3:
+ [[fallthrough]];
+ case C2Config::LEVEL_APV_7_1_BAND_3:
+ bandIdc = 3;
+ break;
+ default:
+ ALOGW("Unrecognized bandIdc through level: %x", mProfileLevel->level);
+ }
+ return bandIdc;
+ }
+
int32_t getBitrateMode_l() const {
int32_t bitrateMode = C2Config::BITRATE_CONST;
@@ -636,7 +967,7 @@
param.h = mSize->height;
param.fps_num = (int)(mFrameRate->value * 100);
param.fps_den = 100;
- param.bitrate = mBitrate->value / 1000;
+ param.bitrate = (int)(mBitrate->value / 1000);
param.rc_type = mIntf->getBitrateMode_l();
int ApvQP = kApvDefaultQP;
@@ -646,14 +977,8 @@
mQuality->value, ApvQP);
}
param.qp = ApvQP;
- param.band_idc = 0; // TODO: Get from the Level setting
+ param.band_idc = mIntf->getBandIdc_l();
param.profile_idc = mIntf->getProfile_l();
- C2Config::level_t level = decisionApvLevel(
- param.w, param.h, (int)(param.fps_num / param.fps_den), param.bitrate, param.band_idc);
- if (mProfileLevel->level != level) {
- mProfileLevel->level = level;
- ALOGI("Need to update level to %d", mIntf->getLevel_l());
- }
param.level_idc = mIntf->getLevel_l();
}
@@ -750,120 +1075,6 @@
return C2_OK;
}
-C2Config::level_t C2SoftApvEnc::decisionApvLevel(int32_t width, int32_t height, int32_t fps,
- int32_t bitrate, int32_t band) {
- C2Config::level_t level = C2Config::LEVEL_APV_1_BAND_0;
-
- struct LevelLimits {
- C2Config::level_t level;
- uint64_t samplesPerSec;
- uint32_t bitratesOfBand;
- };
-
- constexpr LevelLimits kLimitsBand0[] = {
- {LEVEL_APV_1_BAND_0, 3'041'280, 7'000},
- {LEVEL_APV_1_1_BAND_0, 6'082'560, 14'000},
- {LEVEL_APV_2_BAND_0, 15'667'200, 36'000},
- {LEVEL_APV_2_1_BAND_0, 31'334'400, 71'000},
- {LEVEL_APV_3_BAND_0, 66'846'720, 101'000},
- {LEVEL_APV_3_1_BAND_0, 133'693'440, 201'000},
- {LEVEL_APV_4_BAND_0, 265'420'800, 401'000},
- {LEVEL_APV_4_1_BAND_0, 530'841'600, 780'000},
- {LEVEL_APV_5_BAND_0, 1'061'683'200, 1'560'000},
- {LEVEL_APV_5_1_BAND_0, 2'123'366'400, 3'324'000},
- {LEVEL_APV_6_BAND_0, 4'777'574'400, 6'648'000},
- {LEVEL_APV_6_1_BAND_0, 8'493'465'600, 13'296'000},
- {LEVEL_APV_7_BAND_0, 16'986'931'200, 26'592'000},
- {LEVEL_APV_7_1_BAND_0, 33'973'862'400, 53'184'000},
- };
-
- constexpr LevelLimits kLimitsBand1[] = {
- {LEVEL_APV_1_BAND_1, 3'041'280, 11'000},
- {LEVEL_APV_1_1_BAND_1, 6'082'560, 21'000},
- {LEVEL_APV_2_BAND_1, 15'667'200, 53'000},
- {LEVEL_APV_2_1_BAND_1, 31'334'400, 106'00},
- {LEVEL_APV_3_BAND_1, 66'846'720, 151'000},
- {LEVEL_APV_3_1_BAND_1, 133'693'440, 301'000},
- {LEVEL_APV_4_BAND_1, 265'420'800, 602'000},
- {LEVEL_APV_4_1_BAND_1, 530'841'600, 1'170'000},
- {LEVEL_APV_5_BAND_1, 1'061'683'200, 2'340'000},
- {LEVEL_APV_5_1_BAND_1, 2'123'366'400, 4'986'000},
- {LEVEL_APV_6_BAND_1, 4'777'574'400, 9'972'000},
- {LEVEL_APV_6_1_BAND_1, 8'493'465'600, 19'944'000},
- {LEVEL_APV_7_BAND_1, 16'986'931'200, 39'888'000},
- {LEVEL_APV_7_1_BAND_1, 33'973'862'400, 79'776'000},
- };
-
- constexpr LevelLimits kLimitsBand2[] = {
- {LEVEL_APV_1_BAND_2, 3'041'280, 14'000},
- {LEVEL_APV_1_1_BAND_2, 6'082'560, 28'000},
- {LEVEL_APV_2_BAND_2, 15'667'200, 71'000},
- {LEVEL_APV_2_1_BAND_2, 31'334'400, 141'000},
- {LEVEL_APV_3_BAND_2, 66'846'720, 201'000},
- {LEVEL_APV_3_1_BAND_2, 133'693'440, 401'000},
- {LEVEL_APV_4_BAND_2, 265'420'800, 780'000},
- {LEVEL_APV_4_1_BAND_2, 530'841'600, 1'560'000},
- {LEVEL_APV_5_BAND_2, 1'061'683'200, 3'324'000},
- {LEVEL_APV_5_1_BAND_2, 2'123'366'400, 6'648'000},
- {LEVEL_APV_6_BAND_2, 4'777'574'400, 13'296'000},
- {LEVEL_APV_6_1_BAND_2, 8'493'465'600, 26'592'000},
- {LEVEL_APV_7_BAND_2, 16'986'931'200, 53'184'000},
- {LEVEL_APV_7_1_BAND_2, 33'973'862'400, 106'368'000},
- };
-
- constexpr LevelLimits kLimitsBand3[] = {
- {LEVEL_APV_1_BAND_3, 3'041'280, 21'000},
- {LEVEL_APV_1_1_BAND_3, 6'082'560, 42'000},
- {LEVEL_APV_2_BAND_3, 15'667'200, 106'000},
- {LEVEL_APV_2_1_BAND_3, 31'334'400, 212'000},
- {LEVEL_APV_3_BAND_3, 66'846'720, 301'000},
- {LEVEL_APV_3_1_BAND_3, 133'693'440, 602'000},
- {LEVEL_APV_4_BAND_3, 265'420'800, 1'170'000},
- {LEVEL_APV_4_1_BAND_3, 530'841'600, 2'340'000},
- {LEVEL_APV_5_BAND_3, 1'061'683'200, 4'986'000},
- {LEVEL_APV_5_1_BAND_3, 2'123'366'400, 9'972'000},
- {LEVEL_APV_6_BAND_3, 4'777'574'400, 19'944'000},
- {LEVEL_APV_6_1_BAND_3, 8'493'465'600, 39'888'000},
- {LEVEL_APV_7_BAND_3, 16'986'931'200, 79'776'000},
- {LEVEL_APV_7_1_BAND_3, 33'973'862'400, 159'552'000},
- };
-
- uint64_t samplesPerSec = width * height * fps;
- if (band == 0) {
- for (const LevelLimits& limit : kLimitsBand0) {
- if (samplesPerSec <= limit.samplesPerSec && bitrate <= limit.bitratesOfBand) {
- level = limit.level;
- break;
- }
- }
- } else if (band == 1) {
- for (const LevelLimits& limit : kLimitsBand1) {
- if (samplesPerSec <= limit.samplesPerSec && bitrate <= limit.bitratesOfBand) {
- level = limit.level;
- break;
- }
- }
- } else if (band == 2) {
- for (const LevelLimits& limit : kLimitsBand2) {
- if (samplesPerSec <= limit.samplesPerSec && bitrate <= limit.bitratesOfBand) {
- level = limit.level;
- break;
- }
- }
- } else if (band == 3) {
- for (const LevelLimits& limit : kLimitsBand3) {
- if (samplesPerSec <= limit.samplesPerSec && bitrate <= limit.bitratesOfBand) {
- level = limit.level;
- break;
- }
- }
- } else {
- ALOGE("Invalid band_idc on calculte level");
- }
-
- return level;
-}
-
void C2SoftApvEnc::ColorConvertP010ToYUV422P10le(const C2GraphicView* const input,
oapv_imgb_t* imgb) {
uint32_t width = input->width();
diff --git a/media/codec2/components/apv/C2SoftApvEnc.h b/media/codec2/components/apv/C2SoftApvEnc.h
index fc4ad7d..f281052 100644
--- a/media/codec2/components/apv/C2SoftApvEnc.h
+++ b/media/codec2/components/apv/C2SoftApvEnc.h
@@ -60,8 +60,6 @@
const std::unique_ptr<C2Work>& work);
void setParams(oapve_param_t& param);
int32_t getQpFromQuality(int quality);
- C2Config::level_t decisionApvLevel(int32_t width, int32_t height, int32_t fps, int32_t bitrate,
- int32_t band);
void showEncoderParams(oapve_cdesc_t* cdsc);
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp
index f6aff83..4ded33a 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp
+++ b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp
@@ -102,24 +102,6 @@
// static
const int64_t NuPlayer::Renderer::kMinPositionUpdateDelayUs = 100000ll;
-static audio_format_t constexpr audioFormatFromEncoding(int32_t pcmEncoding) {
- switch (pcmEncoding) {
- case kAudioEncodingPcmFloat:
- return AUDIO_FORMAT_PCM_FLOAT;
- case kAudioEncodingPcm32bit:
- return AUDIO_FORMAT_PCM_32_BIT;
- case kAudioEncodingPcm24bitPacked:
- return AUDIO_FORMAT_PCM_24_BIT_PACKED;
- case kAudioEncodingPcm16bit:
- return AUDIO_FORMAT_PCM_16_BIT;
- case kAudioEncodingPcm8bit:
- return AUDIO_FORMAT_PCM_8_BIT; // TODO: do we want to support this?
- default:
- ALOGE("%s: Invalid encoding: %d", __func__, pcmEncoding);
- return AUDIO_FORMAT_INVALID;
- }
-}
-
NuPlayer::Renderer::Renderer(
const sp<MediaPlayerBase::AudioSink> &sink,
const sp<MediaClock> &mediaClock,
diff --git a/media/libstagefright/CameraSource.cpp b/media/libstagefright/CameraSource.cpp
index 81a5508..fe1d3b6 100644
--- a/media/libstagefright/CameraSource.cpp
+++ b/media/libstagefright/CameraSource.cpp
@@ -157,6 +157,7 @@
clientAttribution.uid = clientUid;
clientAttribution.deviceId = kDefaultDeviceId;
clientAttribution.packageName = clientName;
+ clientAttribution.token = sp<BBinder>::make();
mCamera = Camera::connect(cameraId, /*targetSdkVersion*/__ANDROID_API_FUTURE__,
/*rotationOverride*/hardware::ICameraService::ROTATION_OVERRIDE_NONE,
diff --git a/media/libstagefright/MPEG4Writer.cpp b/media/libstagefright/MPEG4Writer.cpp
index 1e233cf..edd7e78 100644
--- a/media/libstagefright/MPEG4Writer.cpp
+++ b/media/libstagefright/MPEG4Writer.cpp
@@ -580,6 +580,7 @@
mTimeScale = -1;
mHasFileLevelMeta = false;
mIsAvif = false;
+ mHasGainmap = false;
mFileLevelMetaDataSize = 0;
mPrimaryItemId = 0;
mAssociationEntryCount = 0;
@@ -737,6 +738,13 @@
mIsBackgroundMode |= isBackgroundMode;
}
+ if (flags_camera::camera_heif_gainmap()) {
+ int32_t gainmap = 0;
+ if (meta && meta->findInt32(kKeyGainmap, &gainmap)) {
+ mHasGainmap |= gainmap;
+ }
+ }
+
if (!strcmp(mime, MEDIA_MIMETYPE_VIDEO_DOLBY_VISION)) {
// For MEDIA_MIMETYPE_VIDEO_DOLBY_VISION,
// getFourCCForMime() requires profile information
@@ -1600,6 +1608,9 @@
} else {
writeFourcc("mif1");
writeFourcc("heic");
+ if (flags_camera::camera_heif_gainmap() && mHasGainmap) {
+ writeFourcc("tmap");
+ }
}
}
if (mHasMoovBox) {
@@ -3919,7 +3930,7 @@
if (isExif) {
copy->meta_data().setInt32(kKeyExifTiffOffset, tiffHdrOffset);
}
- bool usePrefix = this->usePrefix() && !isExif;
+ bool usePrefix = this->usePrefix() && !isExif && !isGainmapMeta;
if (sampleFileOffset == -1 && usePrefix) {
StripStartcode(copy);
}
diff --git a/media/libstagefright/Utils.cpp b/media/libstagefright/Utils.cpp
index 50eeb62..db6d46a 100644
--- a/media/libstagefright/Utils.cpp
+++ b/media/libstagefright/Utils.cpp
@@ -2065,6 +2065,11 @@
meta->setInt32(kKeyMaxHeight, maxHeight);
}
+ int32_t gainmap;
+ if (msg->findInt32("gainmap", &gainmap)) {
+ meta->setInt32(kKeyGainmap, gainmap);
+ }
+
int32_t fps;
float fpsFloat;
if (msg->findInt32("frame-rate", &fps) && fps > 0) {
@@ -2422,6 +2427,24 @@
return;
}
+audio_format_t audioFormatFromEncoding(int32_t pcmEncoding) {
+ switch (pcmEncoding) {
+ case kAudioEncodingPcmFloat:
+ return AUDIO_FORMAT_PCM_FLOAT;
+ case kAudioEncodingPcm32bit:
+ return AUDIO_FORMAT_PCM_32_BIT;
+ case kAudioEncodingPcm24bitPacked:
+ return AUDIO_FORMAT_PCM_24_BIT_PACKED;
+ case kAudioEncodingPcm16bit:
+ return AUDIO_FORMAT_PCM_16_BIT;
+ case kAudioEncodingPcm8bit:
+ return AUDIO_FORMAT_PCM_8_BIT; // TODO: do we want to support this?
+ default:
+ ALOGE("%s: Invalid encoding: %d", __func__, pcmEncoding);
+ return AUDIO_FORMAT_INVALID;
+ }
+}
+
status_t getAudioOffloadInfo(const sp<MetaData>& meta, bool hasVideo,
bool isStreaming, audio_stream_type_t streamType, audio_offload_info_t *info)
{
@@ -2441,6 +2464,12 @@
ALOGV("Mime type \"%s\" mapped to audio_format %d", mime, info->format);
}
+ int32_t pcmEncoding;
+ if (meta->findInt32(kKeyPcmEncoding, &pcmEncoding)) {
+ info->format = audioFormatFromEncoding(pcmEncoding);
+ ALOGV("audio_format use kKeyPcmEncoding value %d first", info->format);
+ }
+
if (AUDIO_FORMAT_INVALID == info->format) {
// can't offload if we don't know what the source format is
ALOGE("mime type \"%s\" not a known audio format", mime);
diff --git a/media/libstagefright/include/media/stagefright/MPEG4Writer.h b/media/libstagefright/include/media/stagefright/MPEG4Writer.h
index a409e46..51daac5 100644
--- a/media/libstagefright/include/media/stagefright/MPEG4Writer.h
+++ b/media/libstagefright/include/media/stagefright/MPEG4Writer.h
@@ -240,6 +240,7 @@
bool mHasFileLevelMeta;
bool mIsAvif; // used to differentiate HEIC and AVIF under the same OUTPUT_FORMAT_HEIF
+ bool mHasGainmap;
uint64_t mFileLevelMetaDataSize;
bool mHasMoovBox;
uint32_t mPrimaryItemId;
diff --git a/media/libstagefright/include/media/stagefright/MetaDataBase.h b/media/libstagefright/include/media/stagefright/MetaDataBase.h
index 9dce55b..0a5d401 100644
--- a/media/libstagefright/include/media/stagefright/MetaDataBase.h
+++ b/media/libstagefright/include/media/stagefright/MetaDataBase.h
@@ -85,6 +85,7 @@
kKeyPixelFormat = 'pixf', // int32_t
kKeyColorFormat = 'colf', // int32_t
kKeyColorSpace = 'cols', // int32_t
+ kKeyGainmap = 'gmap', // int32_t
kKeyPlatformPrivate = 'priv', // pointer
kKeyDecoderComponent = 'decC', // cstring
kKeyBufferID = 'bfID',
diff --git a/media/libstagefright/include/media/stagefright/Utils.h b/media/libstagefright/include/media/stagefright/Utils.h
index 1673120..e190374 100644
--- a/media/libstagefright/include/media/stagefright/Utils.h
+++ b/media/libstagefright/include/media/stagefright/Utils.h
@@ -44,6 +44,9 @@
// Convert a MIME type to a AudioSystem::audio_format
status_t mapMimeToAudioFormat(audio_format_t& format, const char* mime);
+// Convert a pcm-encoding to a AudioSystem::audio_format
+audio_format_t audioFormatFromEncoding(int32_t pcmEncoding);
+
// Convert a aac profile to a AudioSystem::audio_format
void mapAACProfileToAudioFormat(audio_format_t& format, uint64_t eAacProfile);
diff --git a/media/module/foundation/MediaDefs.cpp b/media/module/foundation/MediaDefs.cpp
index a890696..b2572a8 100644
--- a/media/module/foundation/MediaDefs.cpp
+++ b/media/module/foundation/MediaDefs.cpp
@@ -124,6 +124,8 @@
const char *MEDIA_MIMETYPE_AUDIO_IEC61937 = "audio/x-iec61937";
// Note: not in the IANA registry.
const char *MEDIA_MIMETYPE_AUDIO_IEC60958 = "audio/x-iec60958";
+// Note: not in the IANA registry.
+const char *MEDIA_MIMETYPE_AUDIO_IAMF = "audio/iamf";
const char *MEDIA_MIMETYPE_CONTAINER_MPEG4 = "video/mp4";
const char *MEDIA_MIMETYPE_CONTAINER_WAV = "audio/x-wav";
diff --git a/media/module/foundation/include/media/stagefright/foundation/MediaDefs.h b/media/module/foundation/include/media/stagefright/foundation/MediaDefs.h
index 2b3f446..d02f6c2 100644
--- a/media/module/foundation/include/media/stagefright/foundation/MediaDefs.h
+++ b/media/module/foundation/include/media/stagefright/foundation/MediaDefs.h
@@ -119,6 +119,7 @@
extern const char *MEDIA_MIMETYPE_AUDIO_AAC_LATM_HE_V2;
extern const char *MEDIA_MIMETYPE_AUDIO_IEC61937;
extern const char *MEDIA_MIMETYPE_AUDIO_IEC60958;
+extern const char *MEDIA_MIMETYPE_AUDIO_IAMF;
extern const char *MEDIA_MIMETYPE_CONTAINER_MPEG4;
extern const char *MEDIA_MIMETYPE_CONTAINER_WAV;
diff --git a/media/utils/ServiceUtilities.cpp b/media/utils/ServiceUtilities.cpp
index 8ceff96..ce8e00e 100644
--- a/media/utils/ServiceUtilities.cpp
+++ b/media/utils/ServiceUtilities.cpp
@@ -544,7 +544,7 @@
* @param caller string identifying the caller for logging.
* @return true if the MAC addresses must be anonymized, false otherwise.
*/
-bool mustAnonymizeBluetoothAddress(
+bool mustAnonymizeBluetoothAddressLegacy(
const AttributionSourceState& attributionSource, const String16&) {
uid_t uid = VALUE_OR_FATAL(aidl2legacy_int32_t_uid_t(attributionSource.uid));
bool res;
diff --git a/media/utils/include/mediautils/ServiceUtilities.h b/media/utils/include/mediautils/ServiceUtilities.h
index 42789d5..2960232 100644
--- a/media/utils/include/mediautils/ServiceUtilities.h
+++ b/media/utils/include/mediautils/ServiceUtilities.h
@@ -116,7 +116,7 @@
bool bypassInterruptionPolicyAllowed(const AttributionSourceState& attributionSource);
bool callAudioInterceptionAllowed(const AttributionSourceState& attributionSource);
void purgePermissionCache();
-bool mustAnonymizeBluetoothAddress(
+bool mustAnonymizeBluetoothAddressLegacy(
const AttributionSourceState& attributionSource, const String16& caller);
void anonymizeBluetoothAddress(char *address);
diff --git a/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp b/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp
index 802ebeb..0d342a8 100644
--- a/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp
+++ b/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp
@@ -78,6 +78,7 @@
using com::android::media::permission::PermissionEnum::MODIFY_PHONE_STATE;
using com::android::media::permission::PermissionEnum::RECORD_AUDIO;
using com::android::media::permission::PermissionEnum::WRITE_SECURE_SETTINGS;
+using com::android::media::permission::PermissionEnum::BLUETOOTH_CONNECT;
using com::android::media::permission::PermissionEnum::BYPASS_CONCURRENT_RECORD_AUDIO_RESTRICTION;
using content::AttributionSourceState;
using media::audio::common::AudioConfig;
@@ -98,6 +99,28 @@
namespace {
constexpr auto PERMISSION_HARD_DENIED = permission::PermissionChecker::PERMISSION_HARD_DENIED;
constexpr auto PERMISSION_GRANTED = permission::PermissionChecker::PERMISSION_GRANTED;
+
+bool mustAnonymizeBluetoothAddress(const AttributionSourceState& attributionSource,
+ const String16& caller,
+ const IPermissionProvider& provider) {
+ if (audioserver_permissions()) {
+ switch(multiuser_get_app_id(attributionSource.uid)) {
+ // out of caution, to prevent regression
+ case AID_RADIO:
+ case AID_BLUETOOTH:
+ case AID_MEDIA:
+ return true;
+ }
+ const auto res = provider.checkPermission(BLUETOOTH_CONNECT, attributionSource.uid);
+ if (!res.has_value()) {
+ ALOGE("%s: error: %s", __func__, res.error().toString8().c_str());
+ }
+ return *res;
+ } else {
+ return mustAnonymizeBluetoothAddressLegacy(attributionSource, caller);
+ }
+}
+
}
const std::vector<audio_usage_t>& SYSTEM_USAGES = {
@@ -1781,7 +1804,8 @@
numPortsReq = std::min(numPortsReq, num_ports);
}
- if (mustAnonymizeBluetoothAddress(attributionSource, String16(__func__))) {
+ if (mustAnonymizeBluetoothAddress(attributionSource, String16(__func__),
+ getPermissionProvider())) {
for (size_t i = 0; i < numPortsReq; ++i) {
anonymizePortBluetoothAddress(ports[i]);
}
@@ -1823,7 +1847,8 @@
RETURN_IF_BINDER_ERROR(binderStatusFromStatusT(mAudioPolicyManager->getAudioPort(&port)));
}
- if (mustAnonymizeBluetoothAddress(attributionSource, String16(__func__))) {
+ if (mustAnonymizeBluetoothAddress(attributionSource, String16(__func__),
+ getPermissionProvider())) {
anonymizePortBluetoothAddress(port);
}
@@ -1903,7 +1928,8 @@
numPatchesReq = std::min(numPatchesReq, num_patches);
}
- if (mustAnonymizeBluetoothAddress(attributionSource, String16(__func__))) {
+ if (mustAnonymizeBluetoothAddress(attributionSource, String16(__func__),
+ getPermissionProvider())) {
for (size_t i = 0; i < numPatchesReq; ++i) {
for (size_t j = 0; j < patches[i].num_sources; ++j) {
anonymizePortBluetoothAddress(patches[i].sources[j]);
diff --git a/services/camera/libcameraservice/api2/HeicCompositeStream.cpp b/services/camera/libcameraservice/api2/HeicCompositeStream.cpp
index 768eaf8..e1de010 100644
--- a/services/camera/libcameraservice/api2/HeicCompositeStream.cpp
+++ b/services/camera/libcameraservice/api2/HeicCompositeStream.cpp
@@ -1054,6 +1054,7 @@
}
if (it.second.gainmapFormat == nullptr && mGainmapFormat != nullptr){
it.second.gainmapFormat = mGainmapFormat->dup();
+ it.second.gainmapFormat->setInt32("gainmap", 1);
}
newInputAvailable = true;
break;
@@ -1410,10 +1411,12 @@
ALOGE("%s: Failed HDR gainmap: %d", __FUNCTION__, res.error_code);
return BAD_VALUE;
}
- // Ensure the gaimap U/V planes are all 0
+ // We can only generate a single channel gainmap at the moment. However only
+ // multi channel HEVC encoding (like YUV420) is required. Set the extra U/V
+ // planes to 128 to avoid encoding any actual color data.
inputFrame.gainmapChroma = std::make_unique<uint8_t[]>(
inputFrame.gainmap->w * inputFrame.gainmap->h / 2);
- memset(inputFrame.gainmapChroma.get(), 0, inputFrame.gainmap->w * inputFrame.gainmap->h / 2);
+ memset(inputFrame.gainmapChroma.get(), 128, inputFrame.gainmap->w * inputFrame.gainmap->h / 2);
ultrahdr::uhdr_gainmap_metadata_frac iso_secondary_metadata;
res = ultrahdr::uhdr_gainmap_metadata_frac::gainmapMetadataFloatToFraction(
@@ -1435,6 +1438,9 @@
res.error_code);
return BAD_VALUE;
}
+ // 6.6.2.4.2 of ISO/IEC 23008-12:2024 expects the ISO 21496-1 gainmap to be
+ // preceded by an u8 version equal to 0
+ inputFrame.isoGainmapMetadata.insert(inputFrame.isoGainmapMetadata.begin(), 0);
inputFrame.gainmapImage = std::make_unique<CpuConsumer::LockedBuffer>();
*inputFrame.gainmapImage = inputFrame.yuvBuffer;
diff --git a/services/camera/libcameraservice/api2/HeicCompositeStream.h b/services/camera/libcameraservice/api2/HeicCompositeStream.h
index beb08b0..ed70d56 100644
--- a/services/camera/libcameraservice/api2/HeicCompositeStream.h
+++ b/services/camera/libcameraservice/api2/HeicCompositeStream.h
@@ -338,7 +338,8 @@
static const uhdr_color_transfer kUltraHdrOutputTransfer = UHDR_CT_SRGB;
static const uhdr_color_range kUltraHdrOutputRange = UHDR_CR_FULL_RANGE;
- static const auto kUltraHDRDataSpace = ADATASPACE_HEIF_ULTRAHDR;
+ static const auto kUltraHDRDataSpace =
+ aidl::android::hardware::graphics::common::Dataspace::HEIF_ULTRAHDR;
// MediaMuxer/Codec color and format aspects for base image and gainmap metadata
static const int32_t kCodecColorFormat = COLOR_FormatYUV420Flexible;
diff --git a/services/camera/libcameraservice/common/CameraDeviceBase.h b/services/camera/libcameraservice/common/CameraDeviceBase.h
index cfedf0c..4fe9444 100644
--- a/services/camera/libcameraservice/common/CameraDeviceBase.h
+++ b/services/camera/libcameraservice/common/CameraDeviceBase.h
@@ -44,10 +44,6 @@
namespace camera3 {
-// TODO: Remove this once the GFX native dataspace
-// dependencies are available
-enum { HEIC_ULTRAHDR, ADATASPACE_HEIF_ULTRAHDR = 0x1006 };
-
typedef enum camera_stream_configuration_mode {
CAMERA_STREAM_CONFIGURATION_NORMAL_MODE = 0,
CAMERA_STREAM_CONFIGURATION_CONSTRAINED_HIGH_SPEED_MODE = 1,
diff --git a/services/camera/libcameraservice/device3/Camera3Device.cpp b/services/camera/libcameraservice/device3/Camera3Device.cpp
index d95242b..fb8e5d0 100644
--- a/services/camera/libcameraservice/device3/Camera3Device.cpp
+++ b/services/camera/libcameraservice/device3/Camera3Device.cpp
@@ -2566,7 +2566,8 @@
// always occupy the initial entry.
if ((outputStream->data_space == HAL_DATASPACE_V0_JFIF) ||
(outputStream->data_space ==
- static_cast<android_dataspace_t>(ADATASPACE_HEIF_ULTRAHDR)) ||
+ static_cast<android_dataspace_t>(
+ aidl::android::hardware::graphics::common::Dataspace::HEIF_ULTRAHDR)) ||
(outputStream->data_space ==
static_cast<android_dataspace_t>(
aidl::android::hardware::graphics::common::Dataspace::JPEG_R))) {
diff --git a/services/camera/libcameraservice/device3/Camera3OutputStream.cpp b/services/camera/libcameraservice/device3/Camera3OutputStream.cpp
index 2eba5a7..14a7f79 100644
--- a/services/camera/libcameraservice/device3/Camera3OutputStream.cpp
+++ b/services/camera/libcameraservice/device3/Camera3OutputStream.cpp
@@ -403,7 +403,8 @@
// Fix CameraBlob id type discrepancy between HIDL and AIDL, details : http://b/229688810
if (getFormat() == HAL_PIXEL_FORMAT_BLOB && (getDataSpace() == HAL_DATASPACE_V0_JFIF ||
(getDataSpace() ==
- static_cast<android_dataspace_t>(ADATASPACE_HEIF_ULTRAHDR)) ||
+ static_cast<android_dataspace_t>(
+ aidl::android::hardware::graphics::common::Dataspace::HEIF_ULTRAHDR)) ||
(getDataSpace() ==
static_cast<android_dataspace_t>(
aidl::android::hardware::graphics::common::Dataspace::JPEG_R)))) {
diff --git a/services/camera/libcameraservice/utils/SessionConfigurationUtils.cpp b/services/camera/libcameraservice/utils/SessionConfigurationUtils.cpp
index fd877ed..f41cb85 100644
--- a/services/camera/libcameraservice/utils/SessionConfigurationUtils.cpp
+++ b/services/camera/libcameraservice/utils/SessionConfigurationUtils.cpp
@@ -177,7 +177,7 @@
bool isJpegRDataSpace = (dataSpace == static_cast<android_dataspace_t>(
::aidl::android::hardware::graphics::common::Dataspace::JPEG_R));
bool isHeicUltraHDRDataSpace = (dataSpace == static_cast<android_dataspace_t>(
- ADATASPACE_HEIF_ULTRAHDR));
+ ::aidl::android::hardware::graphics::common::Dataspace::HEIF_ULTRAHDR));
camera_metadata_ro_entry streamConfigs =
(isJpegRDataSpace) ? info.find(jpegRSizesTag) :
(isHeicUltraHDRDataSpace) ? info.find(heicUltraHDRSizesTag) :
@@ -241,7 +241,8 @@
if (dataSpace == static_cast<android_dataspace_t>(
::aidl::android::hardware::graphics::common::Dataspace::JPEG_R)) {
return true;
- } else if (dataSpace == static_cast<android_dataspace_t>(ADATASPACE_HEIF_ULTRAHDR)) {
+ } else if (dataSpace == static_cast<android_dataspace_t>(
+ ::aidl::android::hardware::graphics::common::Dataspace::HEIF_ULTRAHDR)) {
return true;
}
@@ -353,8 +354,9 @@
::aidl::android::hardware::graphics::common::Dataspace::JPEG_R)) {
format64 = static_cast<int64_t>(PublicFormat::JPEG_R);
} else if (format == HAL_PIXEL_FORMAT_BLOB && dataSpace ==
- static_cast<android_dataspace>(ADATASPACE_HEIF_ULTRAHDR)) {
- format64 = static_cast<int64_t>(HEIC_ULTRAHDR);
+ static_cast<android_dataspace>(
+ ::aidl::android::hardware::graphics::common::Dataspace::HEIF_ULTRAHDR)) {
+ format64 = static_cast<int64_t>(PublicFormat::HEIC_ULTRAHDR);
}
camera_metadata_ro_entry_t entry =