Merge "Include NBAIO_Tee header file." into main
diff --git a/media/codec2/sfplugin/CCodec.cpp b/media/codec2/sfplugin/CCodec.cpp
index 8082dd7..cd3a80f 100644
--- a/media/codec2/sfplugin/CCodec.cpp
+++ b/media/codec2/sfplugin/CCodec.cpp
@@ -2326,9 +2326,12 @@
void CCodec::onWorkDone(std::list<std::unique_ptr<C2Work>> &workItems) {
if (!workItems.empty()) {
Mutexed<std::list<std::unique_ptr<C2Work>>>::Locked queue(mWorkDoneQueue);
+ bool shouldPost = queue->empty();
queue->splice(queue->end(), workItems);
+ if (shouldPost) {
+ (new AMessage(kWhatWorkDone, this))->post();
+ }
}
- (new AMessage(kWhatWorkDone, this))->post();
}
void CCodec::onInputBufferDone(uint64_t frameIndex, size_t arrayIndex) {
diff --git a/media/libaudioclient/AudioRecord.cpp b/media/libaudioclient/AudioRecord.cpp
index 073a030..c912d27 100644
--- a/media/libaudioclient/AudioRecord.cpp
+++ b/media/libaudioclient/AudioRecord.cpp
@@ -68,10 +68,9 @@
}
// We double the size of input buffer for ping pong use of record buffer.
- // Assumes audio_is_linear_pcm(format)
- const auto sampleSize = audio_channel_count_from_in_mask(channelMask) *
- audio_bytes_per_sample(format);
- if (sampleSize == 0 || ((*frameCount = (size * 2) / sampleSize) == 0)) {
+ const auto frameSize = audio_bytes_per_frame(
+ audio_channel_count_from_in_mask(channelMask), format);
+ if (frameSize == 0 || ((*frameCount = (size * 2) / frameSize) == 0)) {
ALOGE("%s(): Unsupported configuration: sampleRate %u, format %#x, channelMask %#x",
__func__, sampleRate, format, channelMask);
return BAD_VALUE;
@@ -353,12 +352,7 @@
}
mChannelCount = audio_channel_count_from_in_mask(mChannelMask);
-
- if (audio_is_linear_pcm(mFormat)) {
- mFrameSize = mChannelCount * audio_bytes_per_sample(mFormat);
- } else {
- mFrameSize = sizeof(uint8_t);
- }
+ mFrameSize = audio_bytes_per_frame(mChannelCount, mFormat);
// mFrameCount is initialized in createRecord_l
mReqFrameCount = frameCount;
diff --git a/media/libaudioclient/AudioTrack.cpp b/media/libaudioclient/AudioTrack.cpp
index f3539a1..f050a20 100644
--- a/media/libaudioclient/AudioTrack.cpp
+++ b/media/libaudioclient/AudioTrack.cpp
@@ -594,18 +594,13 @@
channelCount = audio_channel_count_from_out_mask(channelMask);
mChannelCount = channelCount;
- if (mFlags & AUDIO_OUTPUT_FLAG_DIRECT) {
- if (audio_has_proportional_frames(format)) {
- mFrameSize = channelCount * audio_bytes_per_sample(format);
- } else {
- mFrameSize = sizeof(uint8_t);
- }
- } else {
- ALOG_ASSERT(audio_has_proportional_frames(format));
- mFrameSize = channelCount * audio_bytes_per_sample(format);
+ if (!(mFlags & AUDIO_OUTPUT_FLAG_DIRECT)) {
// createTrack will return an error if PCM format is not supported by server,
// so no need to check for specific PCM formats here
+ ALOGW_IF(!audio_has_proportional_frames(format), "%s(): no direct flag for format 0x%x",
+ __func__, format);
}
+ mFrameSize = audio_bytes_per_frame(channelCount, format);
// sampling rate must be specified for direct outputs
if (sampleRate == 0 && (mFlags & AUDIO_OUTPUT_FLAG_DIRECT) != 0) {
diff --git a/media/libeffects/lvm/wrapper/Bundle/EffectBundle.cpp b/media/libeffects/lvm/wrapper/Bundle/EffectBundle.cpp
index df64676..1a37622 100644
--- a/media/libeffects/lvm/wrapper/Bundle/EffectBundle.cpp
+++ b/media/libeffects/lvm/wrapper/Bundle/EffectBundle.cpp
@@ -17,7 +17,7 @@
#ifndef LVM_FLOAT
typedef float LVM_FLOAT;
#endif
-#define LOG_TAG "Bundle"
+#define LOG_TAG "EffectBundle"
#define ARRAY_SIZE(array) (sizeof(array) / sizeof(array)[0])
//#define LOG_NDEBUG 0
@@ -1191,11 +1191,13 @@
// 0 if the configuration is supported
//----------------------------------------------------------------------------
int VirtualizerIsDeviceSupported(audio_devices_t deviceType) {
+ ALOGV("%s: deviceType:%#x", __func__, deviceType);
switch (deviceType) {
case AUDIO_DEVICE_OUT_WIRED_HEADSET:
case AUDIO_DEVICE_OUT_WIRED_HEADPHONE:
case AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES:
case AUDIO_DEVICE_OUT_USB_HEADSET:
+ case AUDIO_DEVICE_OUT_BLE_HEADSET:
// case AUDIO_DEVICE_OUT_USB_DEVICE: // For USB testing of the virtualizer only.
return 0;
default:
@@ -3372,10 +3374,10 @@
if (pContext->EffectType == LVM_BASS_BOOST) {
if ((device == AUDIO_DEVICE_OUT_SPEAKER) ||
(device == AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT) ||
- (device == AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER)) {
- ALOGV("\tEFFECT_CMD_SET_DEVICE device is invalid for LVM_BASS_BOOST %d",
- *(int32_t*)pCmdData);
- ALOGV("\tEFFECT_CMD_SET_DEVICE temporary disable LVM_BAS_BOOST");
+ device == AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER ||
+ device == AUDIO_DEVICE_OUT_BLE_SPEAKER) {
+ ALOGV("%s: EFFECT_CMD_SET_DEVICE device %#x is invalid for LVM_BASS_BOOST",
+ __func__, device);
// If a device doesn't support bassboost the effect must be temporarily disabled
// the effect must still report its original state as this can only be changed
diff --git a/media/libnbaio/NBAIO.cpp b/media/libnbaio/NBAIO.cpp
index 1cb4410..3abc35e 100644
--- a/media/libnbaio/NBAIO.cpp
+++ b/media/libnbaio/NBAIO.cpp
@@ -55,8 +55,7 @@
ret.mSampleRate = sampleRate;
ret.mChannelCount = channelCount;
ret.mFormat = format;
- ret.mFrameSize = audio_is_linear_pcm(format) ?
- channelCount * audio_bytes_per_sample(format) : sizeof(uint8_t);
+ ret.mFrameSize = audio_bytes_per_frame(channelCount, format);
return ret;
}
diff --git a/media/libstagefright/MediaCodec.cpp b/media/libstagefright/MediaCodec.cpp
index 870ebdf..c110f05 100644
--- a/media/libstagefright/MediaCodec.cpp
+++ b/media/libstagefright/MediaCodec.cpp
@@ -2991,12 +2991,6 @@
ALOGE("retrying start: failed to reset codec");
break;
}
- sp<AMessage> response;
- err = PostAndAwaitResponse(mConfigureMsg, &response);
- if (err != OK) {
- ALOGE("retrying start: failed to configure codec");
- break;
- }
if (callback != nullptr) {
err = setCallback(callback);
if (err != OK) {
@@ -3005,6 +2999,12 @@
}
ALOGD("succeed to set callback for reclaim");
}
+ sp<AMessage> response;
+ err = PostAndAwaitResponse(mConfigureMsg, &response);
+ if (err != OK) {
+ ALOGE("retrying start: failed to configure codec");
+ break;
+ }
}
// Keep callback message after the first iteration if necessary.
diff --git a/media/libstagefright/SurfaceUtils.cpp b/media/libstagefright/SurfaceUtils.cpp
index 291b892..827052d 100644
--- a/media/libstagefright/SurfaceUtils.cpp
+++ b/media/libstagefright/SurfaceUtils.cpp
@@ -225,6 +225,13 @@
return err;
};
+ // We need to set sidebandStream to nullptr before pushing blank buffers
+ err = native_window_set_sideband_stream(nativeWindow, nullptr);
+ if (err != NO_ERROR) {
+ ALOGE("error setting sidebandStream to nullptr: %s (%d)", strerror(-err), -err);
+ return err;
+ }
+
// We need to reconnect to the ANativeWindow as a CPU client to ensure that
// no frames get dropped by SurfaceFlinger assuming that these are video
// frames.
diff --git a/media/libstagefright/httplive/fuzzer/Android.bp b/media/libstagefright/httplive/fuzzer/Android.bp
index dd49714..cb2f4ee 100644
--- a/media/libstagefright/httplive/fuzzer/Android.bp
+++ b/media/libstagefright/httplive/fuzzer/Android.bp
@@ -48,6 +48,7 @@
"libstagefright_httplive_headers",
],
shared_libs: [
+ "libbase",
"libcrypto",
"libstagefright_foundation",
"libhidlbase",
diff --git a/media/libstagefright/tests/VideoRenderQualityTracker_test.cpp b/media/libstagefright/tests/VideoRenderQualityTracker_test.cpp
index 7823922..ee76a67 100644
--- a/media/libstagefright/tests/VideoRenderQualityTracker_test.cpp
+++ b/media/libstagefright/tests/VideoRenderQualityTracker_test.cpp
@@ -261,7 +261,7 @@
Configuration::GetServerConfigurableFlagFn getServerConfigurableFlagFn{
[](const std::string &, const std::string &flag, const std::string &) -> std::string {
if (flag == "render_metrics_enabled") {
- return "false";
+ return "true";
} else if (flag == "render_metrics_are_skipped_frames_dropped") {
return "false";
} else if (flag == "render_metrics_max_expected_content_frame_duration_us") {
@@ -304,7 +304,7 @@
// default - if we are accidentally configuring to the default then we're not necessarily
// testing the parsing.
Configuration d;
- EXPECT_EQ(c.enabled, false);
+ EXPECT_EQ(c.enabled, true);
EXPECT_NE(c.enabled, d.enabled);
EXPECT_EQ(c.areSkippedFramesDropped, false);
EXPECT_NE(c.areSkippedFramesDropped, d.areSkippedFramesDropped);
@@ -357,6 +357,7 @@
TEST_F(VideoRenderQualityTrackerTest, countsReleasedFrames) {
Configuration c;
+ c.enabled = true;
Helper h(16.66, c);
h.drop(10);
h.render({16.66, 16.66, 16.66});
@@ -368,6 +369,7 @@
TEST_F(VideoRenderQualityTrackerTest, countsSkippedFrames) {
Configuration c;
+ c.enabled = true;
Helper h(16.66, c);
h.drop(10); // dropped frames are not counted
h.skip(10); // frames skipped before rendering a frame are not counted
@@ -382,6 +384,7 @@
TEST_F(VideoRenderQualityTrackerTest, whenSkippedFramesAreDropped_countsDroppedFrames) {
Configuration c;
+ c.enabled = true;
c.areSkippedFramesDropped = true;
Helper h(16.66, c);
h.skip(10); // skipped frames at the beginning of playback are not counted
@@ -398,6 +401,7 @@
TEST_F(VideoRenderQualityTrackerTest, whenNotSkippedFramesAreDropped_countsDroppedFrames) {
Configuration c;
+ c.enabled = true;
c.areSkippedFramesDropped = false;
Helper h(16.66, c);
h.skip(10); // skipped frames at the beginning of playback are not counted
@@ -414,6 +418,7 @@
TEST_F(VideoRenderQualityTrackerTest, countsRenderedFrames) {
Configuration c;
+ c.enabled = true;
Helper h(16.66, c);
h.drop(10); // dropped frames are not counted
h.render({16.66, 16.66, 16.66});
@@ -425,6 +430,7 @@
TEST_F(VideoRenderQualityTrackerTest, detectsFrameRate) {
Configuration c;
+ c.enabled = true;
c.frameRateDetectionToleranceUs = 2 * 1000; // 2 ms
Helper h(16.66, c);
h.render({16.6, 16.7, 16.6, 16.7});
@@ -434,6 +440,7 @@
TEST_F(VideoRenderQualityTrackerTest, handlesSeeking) {
Configuration c;
+ c.enabled = true;
c.maxExpectedContentFrameDurationUs = 30;
VideoRenderQualityTracker v(c);
v.onFrameReleased(0, 0);
@@ -472,6 +479,7 @@
TEST_F(VideoRenderQualityTrackerTest, withSkipping_handlesSeeking) {
Configuration c;
+ c.enabled = true;
c.maxExpectedContentFrameDurationUs = 30;
VideoRenderQualityTracker v(c);
v.onFrameReleased(0, 0);
@@ -508,6 +516,7 @@
TEST_F(VideoRenderQualityTrackerTest, whenLowTolerance_doesntDetectFrameRate) {
Configuration c;
+ c.enabled = true;
c.frameRateDetectionToleranceUs = 0;
Helper h(16.66, c);
h.render({16.6, 16.7, 16.6, 16.7});
@@ -517,6 +526,7 @@
TEST_F(VideoRenderQualityTrackerTest, whenFrameRateDestabilizes_detectsFrameRate) {
Configuration c;
+ c.enabled = true;
c.frameRateDetectionToleranceUs = 2 * 1000; // 2 ms
Helper h(16.66, c);
h.render({16.6, 16.7, 16.6, 16.7});
@@ -527,6 +537,7 @@
TEST_F(VideoRenderQualityTrackerTest, detects32Pulldown) {
Configuration c;
+ c.enabled = true;
c.frameRateDetectionToleranceUs = 2 * 1000; // 2 ms
Helper h(41.66, c);
h.render({49.9, 33.2, 50.0, 33.4, 50.1, 33.2});
@@ -536,6 +547,7 @@
TEST_F(VideoRenderQualityTrackerTest, whenBad32Pulldown_doesntDetect32Pulldown) {
Configuration c;
+ c.enabled = true;
c.frameRateDetectionToleranceUs = 2 * 1000; // 2 ms
Helper h(41.66, c);
h.render({50.0, 33.33, 33.33, 50.00, 33.33, 50.00});
@@ -545,6 +557,7 @@
TEST_F(VideoRenderQualityTrackerTest, whenFrameRateChanges_detectsMostRecentFrameRate) {
Configuration c;
+ c.enabled = true;
c.frameRateDetectionToleranceUs = 2 * 1000; // 2 ms
Helper h(16.66, c);
h.render({16.6, 16.7, 16.6, 16.7});
@@ -558,6 +571,7 @@
TEST_F(VideoRenderQualityTrackerTest, whenFrameRateIsUnstable_doesntDetectFrameRate) {
Configuration c;
+ c.enabled = true;
c.frameRateDetectionToleranceUs = 2 * 1000; // 2 ms
Helper h(16.66, c);
h.render({16.66, 30.0, 16.66, 30.0, 16.66});
@@ -567,6 +581,7 @@
TEST_F(VideoRenderQualityTrackerTest, capturesFreezeRate) {
Configuration c;
+ c.enabled = true;
Helper h(20, c);
h.render(3);
EXPECT_EQ(h.getMetrics().freezeRate, 0);
@@ -579,6 +594,7 @@
TEST_F(VideoRenderQualityTrackerTest, capturesFreezeDurationHistogram) {
Configuration c;
+ c.enabled = true;
// +17 because freeze durations include the render time of the previous frame
c.freezeDurationMsHistogramBuckets = {2 * 17 + 17, 3 * 17 + 17, 6 * 17 + 17};
Helper h(17, c);
@@ -612,6 +628,7 @@
TEST_F(VideoRenderQualityTrackerTest, capturesFreezeDistanceHistogram) {
Configuration c;
+ c.enabled = true;
c.freezeDistanceMsHistogramBuckets = {1 * 17, 5 * 17, 6 * 17};
Helper h(17, c);
h.render(1);
@@ -643,6 +660,7 @@
TEST_F(VideoRenderQualityTrackerTest, when60hz_hasNoJudder) {
Configuration c;
+ c.enabled = true;
Helper h(16.66, c); // ~24Hz
h.render({16.66, 16.66, 16.66, 16.66, 16.66, 16.66, 16.66});
EXPECT_LE(h.getMetrics().judderScoreHistogram.getMax(), 0);
@@ -651,6 +669,7 @@
TEST_F(VideoRenderQualityTrackerTest, whenSmallVariance60hz_hasNoJudder) {
Configuration c;
+ c.enabled = true;
Helper h(16.66, c); // ~24Hz
h.render({14, 18, 14, 18, 14, 18, 14, 18});
EXPECT_LE(h.getMetrics().judderScoreHistogram.getMax(), 0);
@@ -659,6 +678,7 @@
TEST_F(VideoRenderQualityTrackerTest, whenBadSmallVariance60Hz_hasJudder) {
Configuration c;
+ c.enabled = true;
Helper h(16.66, c); // ~24Hz
h.render({14, 18, 14, /* no 18 between 14s */ 14, 18, 14, 18});
EXPECT_EQ(h.getMetrics().judderScoreHistogram.getCount(), 1);
@@ -666,6 +686,7 @@
TEST_F(VideoRenderQualityTrackerTest, when30Hz_hasNoJudder) {
Configuration c;
+ c.enabled = true;
Helper h(33.33, c);
h.render({33.33, 33.33, 33.33, 33.33, 33.33, 33.33});
EXPECT_LE(h.getMetrics().judderScoreHistogram.getMax(), 0);
@@ -674,6 +695,7 @@
TEST_F(VideoRenderQualityTrackerTest, whenSmallVariance30Hz_hasNoJudder) {
Configuration c;
+ c.enabled = true;
Helper h(33.33, c);
h.render({29.0, 35.0, 29.0, 35.0, 29.0, 35.0});
EXPECT_LE(h.getMetrics().judderScoreHistogram.getMax(), 0);
@@ -682,6 +704,7 @@
TEST_F(VideoRenderQualityTrackerTest, whenBadSmallVariance30Hz_hasJudder) {
Configuration c;
+ c.enabled = true;
Helper h(33.33, c);
h.render({29.0, 35.0, 29.0, /* no 35 between 29s */ 29.0, 35.0, 29.0, 35.0});
EXPECT_EQ(h.getMetrics().judderScoreHistogram.getCount(), 1);
@@ -689,6 +712,7 @@
TEST_F(VideoRenderQualityTrackerTest, whenBad30HzTo60Hz_hasJudder) {
Configuration c;
+ c.enabled = true;
Helper h(33.33, c);
h.render({33.33, 33.33, 50.0, /* frame stayed 1 vsync too long */ 16.66, 33.33, 33.33});
EXPECT_EQ(h.getMetrics().judderScoreHistogram.getCount(), 2); // note: 2 counts of judder
@@ -696,6 +720,7 @@
TEST_F(VideoRenderQualityTrackerTest, when24HzTo60Hz_hasNoJudder) {
Configuration c;
+ c.enabled = true;
Helper h(41.66, c);
h.render({50.0, 33.33, 50.0, 33.33, 50.0, 33.33});
EXPECT_LE(h.getMetrics().judderScoreHistogram.getMax(), 0);
@@ -704,6 +729,7 @@
TEST_F(VideoRenderQualityTrackerTest, when25HzTo60Hz_hasJudder) {
Configuration c;
+ c.enabled = true;
Helper h(40, c);
h.render({33.33, 33.33, 50.0});
h.render({33.33, 33.33, 50.0});
@@ -716,6 +742,7 @@
TEST_F(VideoRenderQualityTrackerTest, when50HzTo60Hz_hasJudder) {
Configuration c;
+ c.enabled = true;
Helper h(20, c);
h.render({16.66, 16.66, 16.66, 33.33});
h.render({16.66, 16.66, 16.66, 33.33});
@@ -728,6 +755,7 @@
TEST_F(VideoRenderQualityTrackerTest, when30HzTo50Hz_hasJudder) {
Configuration c;
+ c.enabled = true;
Helper h(33.33, c);
h.render({40.0, 40.0, 40.0, 60.0});
h.render({40.0, 40.0, 40.0, 60.0});
@@ -739,6 +767,7 @@
TEST_F(VideoRenderQualityTrackerTest, whenSmallVariancePulldown24HzTo60Hz_hasNoJudder) {
Configuration c;
+ c.enabled = true;
Helper h(41.66, c);
h.render({52.0, 31.33, 52.0, 31.33, 52.0, 31.33});
EXPECT_EQ(h.getMetrics().judderScoreHistogram.getCount(), 0);
@@ -746,6 +775,7 @@
TEST_F(VideoRenderQualityTrackerTest, whenBad24HzTo60Hz_hasJudder) {
Configuration c;
+ c.enabled = true;
Helper h(41.66, c);
h.render({50.0, 33.33, 50.0, 33.33, /* no 50 between 33s */ 33.33, 50.0, 33.33});
EXPECT_EQ(h.getMetrics().judderScoreHistogram.getCount(), 1);
@@ -753,6 +783,7 @@
TEST_F(VideoRenderQualityTrackerTest, capturesJudderScoreHistogram) {
Configuration c;
+ c.enabled = true;
c.judderErrorToleranceUs = 2000;
c.judderScoreHistogramBuckets = {1, 5, 8};
Helper h(16, c);
@@ -767,6 +798,7 @@
TEST_F(VideoRenderQualityTrackerTest, ranksJudderScoresInOrder) {
// Each rendering is ranked from best to worst from a user experience
Configuration c;
+ c.enabled = true;
c.judderErrorToleranceUs = 2000;
c.judderScoreHistogramBuckets = {0, 1000};
int64_t previousScore = 0;
@@ -846,6 +878,7 @@
TEST_F(VideoRenderQualityTrackerTest, capturesFreezeEvents) {
Configuration c;
+ c.enabled = true;
c.freezeEventMax = 5;
c.freezeEventDetailsMax = 4;
c.freezeEventDistanceToleranceMs = 1000;
@@ -938,6 +971,7 @@
TEST_F(VideoRenderQualityTrackerTest, capturesJudderEvents) {
Configuration c;
+ c.enabled = true;
c.judderEventMax = 4;
c.judderEventDetailsMax = 3;
c.judderEventDistanceToleranceMs = 100;
@@ -988,6 +1022,7 @@
TEST_F(VideoRenderQualityTrackerTest, capturesOverallFreezeScore) {
Configuration c;
+ c.enabled = true;
// # drops * 20ms + 20ms because current frame is frozen + 1 for bucket threshold
c.freezeDurationMsHistogramBuckets = {1 * 20 + 21, 5 * 20 + 21, 10 * 20 + 21};
c.freezeDurationMsHistogramToScore = {10, 100, 1000};
@@ -1012,6 +1047,7 @@
TEST_F(VideoRenderQualityTrackerTest, capturesOverallJudderScore) {
Configuration c;
+ c.enabled = true;
c.judderScoreHistogramBuckets = {0, 6, 10};
c.judderScoreHistogramToScore = {10, 100, 1000};
Helper h(20, c);
diff --git a/media/module/libmediatranscoding/transcoder/tests/fuzzer/Android.bp b/media/module/libmediatranscoding/transcoder/tests/fuzzer/Android.bp
index 69b2827..b6eca2a 100644
--- a/media/module/libmediatranscoding/transcoder/tests/fuzzer/Android.bp
+++ b/media/module/libmediatranscoding/transcoder/tests/fuzzer/Android.bp
@@ -48,8 +48,16 @@
],
fuzz_config: {
cc: [
- "android-media-fuzzing-reports@google.com",
+ "android-media-editing@google.com",
],
- componentid: 155276,
+ componentid: 761430,
+ hotlists: [
+ "4593311",
+ ],
+ description: "The fuzzer targets the APIs of libmediatranscoder",
+ vector: "local_no_privileges_required",
+ service_privilege: "privileged",
+ users: "multi_user",
+ fuzzed_code_usage: "shipped",
},
}
diff --git a/media/module/mpeg2ts/ATSParser.cpp b/media/module/mpeg2ts/ATSParser.cpp
index 6aeea3b..86187bd 100644
--- a/media/module/mpeg2ts/ATSParser.cpp
+++ b/media/module/mpeg2ts/ATSParser.cpp
@@ -23,8 +23,8 @@
#include "ESQueue.h"
#include <android/hardware/cas/native/1.0/IDescrambler.h>
-#include <android/hidl/allocator/1.0/IAllocator.h>
#include <android/hidl/memory/1.0/IMemory.h>
+#include <cutils/ashmem.h>
#include <cutils/native_handle.h>
#include <hidlmemory/mapping.h>
#include <media/cas/DescramblerAPI.h>
@@ -46,12 +46,12 @@
#include <inttypes.h>
namespace android {
+using hardware::hidl_handle;
using hardware::hidl_string;
using hardware::hidl_vec;
using hardware::hidl_memory;
using namespace hardware::cas::V1_0;
using namespace hardware::cas::native::V1_0;
-typedef hidl::allocator::V1_0::IAllocator TAllocator;
typedef hidl::memory::V1_0::IMemory TMemory;
// I want the expression "y" evaluated even if verbose logging is off.
@@ -210,7 +210,6 @@
bool mSampleEncrypted;
sp<AMessage> mSampleAesKeyItem;
sp<TMemory> mHidlMemory;
- sp<TAllocator> mHidlAllocator;
hardware::cas::native::V1_0::SharedBuffer mDescramblerSrcBuffer;
sp<ABuffer> mDescrambledBuffer;
List<SubSampleInfo> mSubSamples;
@@ -1006,34 +1005,29 @@
sp<ABuffer> newBuffer, newScrambledBuffer;
sp<TMemory> newMem;
if (mScrambled) {
- if (mHidlAllocator == nullptr) {
- mHidlAllocator = TAllocator::getService("ashmem");
- if (mHidlAllocator == nullptr) {
- ALOGE("[stream %d] can't get hidl allocator", mElementaryPID);
- return false;
+ int fd = ashmem_create_region("mediaATS", neededSize);
+ if (fd < 0) {
+ ALOGE("[stream %d] create_ashmem_region failed for size %zu. FD returned: %d",
+ mElementaryPID, neededSize, fd);
+ return false;
+ }
+
+ native_handle_t* handle = native_handle_create(1 /*numFds*/, 0/*numInts*/);
+ if (handle == nullptr) {
+ ALOGE("[stream %d] failed to create a native_handle_t", mElementaryPID);
+ if (close(fd)) {
+ ALOGE("[stream %d] failed to close ashmem fd. errno: %s", mElementaryPID,
+ strerror(errno));
}
- }
- hidl_memory hidlMemToken;
- bool success;
- auto transStatus = mHidlAllocator->allocate(
- neededSize,
- [&success, &hidlMemToken](
- bool s,
- hidl_memory const& m) {
- success = s;
- hidlMemToken = m;
- });
-
- if (!transStatus.isOk()) {
- ALOGE("[stream %d] hidl allocator failed at the transport: %s",
- mElementaryPID, transStatus.description().c_str());
return false;
}
- if (!success) {
- ALOGE("[stream %d] hidl allocator failed", mElementaryPID);
- return false;
- }
+
+ handle->data[0] = fd;
+ hidl_handle memHandle;
+ memHandle.setTo(handle, true /*shouldOwn*/);
+ hidl_memory hidlMemToken("ashmem", memHandle, neededSize);
+
newMem = mapMemory(hidlMemToken);
if (newMem == nullptr || newMem->getPointer() == nullptr) {
ALOGE("[stream %d] hidl failed to map memory", mElementaryPID);
diff --git a/media/module/mpeg2ts/Android.bp b/media/module/mpeg2ts/Android.bp
index bf762c6..c710ffb 100644
--- a/media/module/mpeg2ts/Android.bp
+++ b/media/module/mpeg2ts/Android.bp
@@ -44,7 +44,6 @@
"libhidlmemory",
"android.hardware.cas.native@1.0",
"android.hidl.memory@1.0",
- "android.hidl.allocator@1.0",
],
header_libs: [
diff --git a/media/module/mpeg2ts/test/Android.bp b/media/module/mpeg2ts/test/Android.bp
index 34a8d3e..cccefac 100644
--- a/media/module/mpeg2ts/test/Android.bp
+++ b/media/module/mpeg2ts/test/Android.bp
@@ -37,9 +37,8 @@
shared_libs: [
"android.hardware.cas@1.0",
"android.hardware.cas.native@1.0",
- "android.hidl.token@1.0-utils",
- "android.hidl.allocator@1.0",
"libcrypto",
+ "libcutils",
"libhidlbase",
"libhidlmemory",
"liblog",
diff --git a/services/audioflinger/Threads.cpp b/services/audioflinger/Threads.cpp
index 0b73fba..048bec3 100644
--- a/services/audioflinger/Threads.cpp
+++ b/services/audioflinger/Threads.cpp
@@ -10760,14 +10760,24 @@
AudioHwDevice *hwDev, AudioStreamOut *output, bool systemReady)
: MmapThread(afThreadCallback, id, hwDev, output->stream, systemReady, true /* isOut */),
mStreamType(AUDIO_STREAM_MUSIC),
- mStreamVolume(1.0),
- mStreamMute(false),
mOutput(output)
{
snprintf(mThreadName, kThreadNameLength, "AudioMmapOut_%X", id);
mChannelCount = audio_channel_count_from_out_mask(mChannelMask);
mMasterVolume = afThreadCallback->masterVolume_l();
mMasterMute = afThreadCallback->masterMute_l();
+
+ for (int i = AUDIO_STREAM_MIN; i < AUDIO_STREAM_FOR_POLICY_CNT; ++i) {
+ const audio_stream_type_t stream{static_cast<audio_stream_type_t>(i)};
+ mStreamTypes[stream].volume = 0.0f;
+ mStreamTypes[stream].mute = mAfThreadCallback->streamMute_l(stream);
+ }
+ // Audio patch and call assistant volume are always max
+ mStreamTypes[AUDIO_STREAM_PATCH].volume = 1.0f;
+ mStreamTypes[AUDIO_STREAM_PATCH].mute = false;
+ mStreamTypes[AUDIO_STREAM_CALL_ASSISTANT].volume = 1.0f;
+ mStreamTypes[AUDIO_STREAM_CALL_ASSISTANT].mute = false;
+
if (mAudioHwDev) {
if (mAudioHwDev->canSetMasterVolume()) {
mMasterVolume = 1.0;
@@ -10824,8 +10834,8 @@
void MmapPlaybackThread::setStreamVolume(audio_stream_type_t stream, float value)
{
audio_utils::lock_guard _l(mutex());
+ mStreamTypes[stream].volume = value;
if (stream == mStreamType) {
- mStreamVolume = value;
broadcast_l();
}
}
@@ -10833,17 +10843,14 @@
float MmapPlaybackThread::streamVolume(audio_stream_type_t stream) const
{
audio_utils::lock_guard _l(mutex());
- if (stream == mStreamType) {
- return mStreamVolume;
- }
- return 0.0f;
+ return mStreamTypes[stream].volume;
}
void MmapPlaybackThread::setStreamMute(audio_stream_type_t stream, bool muted)
{
audio_utils::lock_guard _l(mutex());
+ mStreamTypes[stream].mute = muted;
if (stream == mStreamType) {
- mStreamMute= muted;
broadcast_l();
}
}
@@ -10883,14 +10890,13 @@
{
float volume;
- if (mMasterMute || mStreamMute) {
+ if (mMasterMute || streamMuted_l()) {
volume = 0;
} else {
- volume = mMasterVolume * mStreamVolume;
+ volume = mMasterVolume * streamVolume_l();
}
if (volume != mHalVolFloat) {
-
// Convert volumes from float to 8.24
uint32_t vol = (uint32_t)(volume * (1 << 24));
@@ -10924,8 +10930,8 @@
track->setMetadataHasChanged();
track->processMuteEvent_l(mAfThreadCallback->getOrCreateAudioManager(),
/*muteState=*/{mMasterMute,
- mStreamVolume == 0.f,
- mStreamMute,
+ streamVolume_l() == 0.f,
+ streamMuted_l(),
// TODO(b/241533526): adjust logic to include mute from AppOps
false /*muteFromPlaybackRestricted*/,
false /*muteFromClientVolume*/,
@@ -11038,7 +11044,7 @@
MmapThread::dumpInternals_l(fd, args);
dprintf(fd, " Stream type: %d Stream volume: %f HAL volume: %f Stream mute %d\n",
- mStreamType, mStreamVolume, mHalVolFloat, mStreamMute);
+ mStreamType, streamVolume_l(), mHalVolFloat, streamMuted_l());
dprintf(fd, " Master volume: %f Master mute %d\n", mMasterVolume, mMasterMute);
}
diff --git a/services/audioflinger/Threads.h b/services/audioflinger/Threads.h
index 3105ad7..0ca79f9 100644
--- a/services/audioflinger/Threads.h
+++ b/services/audioflinger/Threads.h
@@ -2233,12 +2233,17 @@
protected:
void dumpInternals_l(int fd, const Vector<String16>& args) final;
+ float streamVolume_l() const {
+ return mStreamTypes[mStreamType].volume;
+ }
+ bool streamMuted_l() const {
+ return mStreamTypes[mStreamType].mute;
+ }
+ stream_type_t mStreamTypes[AUDIO_STREAM_CNT];
audio_stream_type_t mStreamType;
float mMasterVolume;
- float mStreamVolume;
bool mMasterMute;
- bool mStreamMute;
AudioStreamOut* mOutput;
mediautils::atomic_sp<audio_utils::MelProcessor> mMelProcessor;
diff --git a/services/audioflinger/Tracks.cpp b/services/audioflinger/Tracks.cpp
index 31246ec..75d885d 100644
--- a/services/audioflinger/Tracks.cpp
+++ b/services/audioflinger/Tracks.cpp
@@ -113,8 +113,7 @@
mChannelCount(isOut ?
audio_channel_count_from_out_mask(channelMask) :
audio_channel_count_from_in_mask(channelMask)),
- mFrameSize(audio_has_proportional_frames(format) ?
- mChannelCount * audio_bytes_per_sample(format) : sizeof(int8_t)),
+ mFrameSize(audio_bytes_per_frame(mChannelCount, format)),
mFrameCount(frameCount),
mSessionId(sessionId),
mIsOut(isOut),