Loading media/extractors/mp4/MPEG4Extractor.cpp +24 −1 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ #include <ctype.h> #include <inttypes.h> #include <algorithm> #include <map> #include <memory> #include <stdint.h> #include <stdlib.h> Loading Loading @@ -204,6 +205,7 @@ private: Vector<size_t> encryptedsizes; }; Vector<Sample> mCurrentSamples; std::map<off64_t, uint32_t> mDrmOffsets; MPEG4Source(const MPEG4Source &); MPEG4Source &operator=(const MPEG4Source &); Loading Loading @@ -5153,6 +5155,9 @@ status_t MPEG4Source::parseChunk(off64_t *offset) { if (chunk_type == FOURCC("moof")) { mNextMoofOffset = *offset; break; } else if (chunk_type == FOURCC("mdat")) { parseChunk(offset); continue; } else if (chunk_size == 0) { break; } Loading Loading @@ -5214,6 +5219,22 @@ status_t MPEG4Source::parseChunk(off64_t *offset) { // parse DRM info if present ALOGV("MPEG4Source::parseChunk mdat"); // if saiz/saoi was previously observed, do something with the sampleinfos status_t err = OK; auto kv = mDrmOffsets.lower_bound(*offset); if (kv != mDrmOffsets.end()) { auto drmoffset = kv->first; auto flags = kv->second; mDrmOffsets.erase(kv); ALOGV("mdat chunk_size %" PRIu64 " drmoffset %" PRId64 " offset %" PRId64, chunk_size, drmoffset, *offset); if (chunk_size >= drmoffset - *offset) { err = parseClearEncryptedSizes(drmoffset, false, flags, chunk_size - (drmoffset - *offset)); } } if (err != OK) { return err; } *offset += chunk_size; break; } Loading Loading @@ -5395,8 +5416,10 @@ status_t MPEG4Source::parseSampleAuxiliaryInformationOffsets( off64_t drmoffset = mCurrentSampleInfoOffsets[0]; // from moof drmoffset += mCurrentMoofOffset; mDrmOffsets[drmoffset] = flags; ALOGV("saio drmoffset %" PRId64 " flags %u", drmoffset, flags); return parseClearEncryptedSizes(drmoffset, false, 0, mCurrentMoofSize); return OK; } status_t MPEG4Source::parseClearEncryptedSizes( Loading services/mediametrics/Android.bp +89 −14 Original line number Diff line number Diff line // Media Statistics service // tidy_errors = [ // https://clang.llvm.org/extra/clang-tidy/checks/list.html // For many categories, the checks are too many to specify individually. // Feel free to disable as needed - as warnings are generally ignored, // we treat warnings as errors. "android-*", "bugprone-*", "cert-*", "clang-analyzer-security*", "google-*", "misc-*", //"modernize-*", // explicitly list the modernize as they can be subjective. "modernize-avoid-bind", //"modernize-avoid-c-arrays", // std::array<> can be verbose "modernize-concat-nested-namespaces", //"modernize-deprecated-headers", // C headers still ok even if there is C++ equivalent. "modernize-deprecated-ios-base-aliases", "modernize-loop-convert", "modernize-make-shared", "modernize-make-unique", "modernize-pass-by-value", "modernize-raw-string-literal", "modernize-redundant-void-arg", "modernize-replace-auto-ptr", "modernize-replace-random-shuffle", "modernize-return-braced-init-list", "modernize-shrink-to-fit", "modernize-unary-static-assert", "modernize-use-auto", // debatable - auto can obscure type "modernize-use-bool-literals", "modernize-use-default-member-init", "modernize-use-emplace", "modernize-use-equals-default", "modernize-use-equals-delete", "modernize-use-nodiscard", "modernize-use-noexcept", "modernize-use-nullptr", "modernize-use-override", //"modernize-use-trailing-return-type", // not necessarily more readable "modernize-use-transparent-functors", "modernize-use-uncaught-exceptions", "modernize-use-using", "performance-*", // Remove some pedantic stylistic requirements. "-google-readability-casting", // C++ casts not always necessary and may be verbose "-google-readability-todo", // do not require TODO(info) ] cc_defaults { name: "mediametrics_flags_defaults", // https://clang.llvm.org/docs/UsersManual.html#command-line-options // https://clang.llvm.org/docs/DiagnosticsReference.html cflags: [ "-Wall", "-Wdeprecated", "-Werror", "-Werror=implicit-fallthrough", "-Werror=sometimes-uninitialized", "-Werror=conditional-uninitialized", "-Wextra", "-Wredundant-decls", "-Wshadow", "-Wstrict-aliasing", "-fstrict-aliasing", "-Wthread-safety", //"-Wthread-safety-negative", // experimental - looks broken in R. "-Wunreachable-code", "-Wunreachable-code-break", "-Wunreachable-code-return", "-Wunused", "-Wused-but-marked-unused", ], // https://clang.llvm.org/extra/clang-tidy/ tidy: true, tidy_checks: tidy_errors, tidy_checks_as_errors: tidy_errors, tidy_flags: [ "-format-style='file'", "--header-filter='frameworks/av/services/mediametrics/'", ], } cc_binary { name: "mediametrics", defaults: [ "mediametrics_flags_defaults", ], srcs: [ "main_mediametrics.cpp", Loading @@ -22,17 +108,13 @@ cc_binary { init_rc: [ "mediametrics.rc", ], cflags: [ "-Wall", "-Werror", "-Wextra", "-Wthread-safety", ], } cc_library_shared { name: "libmediametricsservice", defaults: [ "mediametrics_flags_defaults", ], srcs: [ "AudioAnalytics.cpp", Loading Loading @@ -73,11 +155,4 @@ cc_library_shared { include_dirs: [ "system/media/audio_utils/include", ], cflags: [ "-Wall", "-Werror", "-Wextra", "-Wthread-safety", ], } services/mediametrics/AudioAnalytics.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -594,4 +594,4 @@ void AudioAnalytics::DeviceConnection::expire() { #endif } } // namespace android } // namespace android::mediametrics services/mediametrics/AudioPowerUsage.cpp +8 −8 Original line number Diff line number Diff line Loading @@ -160,7 +160,7 @@ bool AudioPowerUsage::saveAsItem_l( return true; //ignore unknown device } for (auto item : mItems) { for (const auto& item : mItems) { int32_t item_type = 0, item_device = 0; double item_volume = 0.; int64_t item_duration_ns = 0; Loading Loading @@ -259,8 +259,8 @@ void AudioPowerUsage::checkMode(const std::shared_ptr<const mediametrics::Item>& const int64_t endCallNs = item->getTimestamp(); const int64_t durationNs = endCallNs - mDeviceTimeNs; if (durationNs > 0) { mDeviceVolume = (mDeviceVolume * (mVolumeTimeNs - mDeviceTimeNs) + mVoiceVolume * (endCallNs - mVolumeTimeNs)) / durationNs; mDeviceVolume = (mDeviceVolume * double(mVolumeTimeNs - mDeviceTimeNs) + mVoiceVolume * double(endCallNs - mVolumeTimeNs)) / durationNs; saveAsItem_l(mPrimaryDevice, durationNs, VOICE_CALL_TYPE, mDeviceVolume); } } else if (mode == "AUDIO_MODE_IN_CALL") { // entering call mode Loading @@ -287,8 +287,8 @@ void AudioPowerUsage::checkVoiceVolume(const std::shared_ptr<const mediametrics: const int64_t timeNs = item->getTimestamp(); const int64_t durationNs = timeNs - mDeviceTimeNs; if (durationNs > 0) { mDeviceVolume = (mDeviceVolume * (mVolumeTimeNs - mDeviceTimeNs) + mVoiceVolume * (timeNs - mVolumeTimeNs)) / durationNs; mDeviceVolume = (mDeviceVolume * double(mVolumeTimeNs - mDeviceTimeNs) + mVoiceVolume * double(timeNs - mVolumeTimeNs)) / durationNs; mVolumeTimeNs = timeNs; } } Loading Loading @@ -318,8 +318,8 @@ void AudioPowerUsage::checkCreatePatch(const std::shared_ptr<const mediametrics: const int64_t endDeviceNs = item->getTimestamp(); const int64_t durationNs = endDeviceNs - mDeviceTimeNs; if (durationNs > 0) { mDeviceVolume = (mDeviceVolume * (mVolumeTimeNs - mDeviceTimeNs) + mVoiceVolume * (endDeviceNs - mVolumeTimeNs)) / durationNs; mDeviceVolume = (mDeviceVolume * double(mVolumeTimeNs - mDeviceTimeNs) + mVoiceVolume * double(endDeviceNs - mVolumeTimeNs)) / durationNs; saveAsItem_l(mPrimaryDevice, durationNs, VOICE_CALL_TYPE, mDeviceVolume); } // reset statistics Loading Loading @@ -391,4 +391,4 @@ std::pair<std::string, int32_t> AudioPowerUsage::dump(int limit) const { return { ss.str(), slot }; } } // namespace android } // namespace android::mediametrics services/mediametrics/MediaMetricsService.cpp +6 −5 Original line number Diff line number Diff line Loading @@ -32,7 +32,8 @@ namespace android { using namespace mediametrics; using mediametrics::Item; using mediametrics::startsWith; // individual records kept in memory: age or count // age: <= 28 hours (1 1/6 days) Loading Loading @@ -63,7 +64,7 @@ nsecs_t MediaMetricsService::roundTime(nsecs_t timeNs) bool MediaMetricsService::useUidForPackage( const std::string& package, const std::string& installer) { if (strchr(package.c_str(), '.') == NULL) { if (strchr(package.c_str(), '.') == nullptr) { return false; // not of form 'com.whatever...'; assume internal and ok } else if (strncmp(package.c_str(), "android.", 8) == 0) { return false; // android.* packages are assumed fine Loading Loading @@ -203,9 +204,9 @@ status_t MediaMetricsService::submitInternal(mediametrics::Item *item, bool rele // Overwrite package name and version if the caller was untrusted or empty if (!isTrusted || item->getPkgName().empty()) { const uid_t uid = item->getUid(); const uid_t uidItem = item->getUid(); const auto [ pkgName, version ] = MediaMetricsService::getSanitizedPackageNameAndVersionCode(uid); MediaMetricsService::getSanitizedPackageNameAndVersionCode(uidItem); item->setPkgName(pkgName); item->setPkgVersionCode(version); } Loading Loading @@ -320,7 +321,7 @@ status_t MediaMetricsService::dump(int fd, const Vector<String16>& args) String8 value(args[i]); char *endp; const char *p = value.string(); long long sec = strtoll(p, &endp, 10); const auto sec = (int64_t)strtoll(p, &endp, 10); if (endp == p || *endp != '\0' || sec == 0) { sinceNs = 0; } else if (sec < 0) { Loading Loading
media/extractors/mp4/MPEG4Extractor.cpp +24 −1 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ #include <ctype.h> #include <inttypes.h> #include <algorithm> #include <map> #include <memory> #include <stdint.h> #include <stdlib.h> Loading Loading @@ -204,6 +205,7 @@ private: Vector<size_t> encryptedsizes; }; Vector<Sample> mCurrentSamples; std::map<off64_t, uint32_t> mDrmOffsets; MPEG4Source(const MPEG4Source &); MPEG4Source &operator=(const MPEG4Source &); Loading Loading @@ -5153,6 +5155,9 @@ status_t MPEG4Source::parseChunk(off64_t *offset) { if (chunk_type == FOURCC("moof")) { mNextMoofOffset = *offset; break; } else if (chunk_type == FOURCC("mdat")) { parseChunk(offset); continue; } else if (chunk_size == 0) { break; } Loading Loading @@ -5214,6 +5219,22 @@ status_t MPEG4Source::parseChunk(off64_t *offset) { // parse DRM info if present ALOGV("MPEG4Source::parseChunk mdat"); // if saiz/saoi was previously observed, do something with the sampleinfos status_t err = OK; auto kv = mDrmOffsets.lower_bound(*offset); if (kv != mDrmOffsets.end()) { auto drmoffset = kv->first; auto flags = kv->second; mDrmOffsets.erase(kv); ALOGV("mdat chunk_size %" PRIu64 " drmoffset %" PRId64 " offset %" PRId64, chunk_size, drmoffset, *offset); if (chunk_size >= drmoffset - *offset) { err = parseClearEncryptedSizes(drmoffset, false, flags, chunk_size - (drmoffset - *offset)); } } if (err != OK) { return err; } *offset += chunk_size; break; } Loading Loading @@ -5395,8 +5416,10 @@ status_t MPEG4Source::parseSampleAuxiliaryInformationOffsets( off64_t drmoffset = mCurrentSampleInfoOffsets[0]; // from moof drmoffset += mCurrentMoofOffset; mDrmOffsets[drmoffset] = flags; ALOGV("saio drmoffset %" PRId64 " flags %u", drmoffset, flags); return parseClearEncryptedSizes(drmoffset, false, 0, mCurrentMoofSize); return OK; } status_t MPEG4Source::parseClearEncryptedSizes( Loading
services/mediametrics/Android.bp +89 −14 Original line number Diff line number Diff line // Media Statistics service // tidy_errors = [ // https://clang.llvm.org/extra/clang-tidy/checks/list.html // For many categories, the checks are too many to specify individually. // Feel free to disable as needed - as warnings are generally ignored, // we treat warnings as errors. "android-*", "bugprone-*", "cert-*", "clang-analyzer-security*", "google-*", "misc-*", //"modernize-*", // explicitly list the modernize as they can be subjective. "modernize-avoid-bind", //"modernize-avoid-c-arrays", // std::array<> can be verbose "modernize-concat-nested-namespaces", //"modernize-deprecated-headers", // C headers still ok even if there is C++ equivalent. "modernize-deprecated-ios-base-aliases", "modernize-loop-convert", "modernize-make-shared", "modernize-make-unique", "modernize-pass-by-value", "modernize-raw-string-literal", "modernize-redundant-void-arg", "modernize-replace-auto-ptr", "modernize-replace-random-shuffle", "modernize-return-braced-init-list", "modernize-shrink-to-fit", "modernize-unary-static-assert", "modernize-use-auto", // debatable - auto can obscure type "modernize-use-bool-literals", "modernize-use-default-member-init", "modernize-use-emplace", "modernize-use-equals-default", "modernize-use-equals-delete", "modernize-use-nodiscard", "modernize-use-noexcept", "modernize-use-nullptr", "modernize-use-override", //"modernize-use-trailing-return-type", // not necessarily more readable "modernize-use-transparent-functors", "modernize-use-uncaught-exceptions", "modernize-use-using", "performance-*", // Remove some pedantic stylistic requirements. "-google-readability-casting", // C++ casts not always necessary and may be verbose "-google-readability-todo", // do not require TODO(info) ] cc_defaults { name: "mediametrics_flags_defaults", // https://clang.llvm.org/docs/UsersManual.html#command-line-options // https://clang.llvm.org/docs/DiagnosticsReference.html cflags: [ "-Wall", "-Wdeprecated", "-Werror", "-Werror=implicit-fallthrough", "-Werror=sometimes-uninitialized", "-Werror=conditional-uninitialized", "-Wextra", "-Wredundant-decls", "-Wshadow", "-Wstrict-aliasing", "-fstrict-aliasing", "-Wthread-safety", //"-Wthread-safety-negative", // experimental - looks broken in R. "-Wunreachable-code", "-Wunreachable-code-break", "-Wunreachable-code-return", "-Wunused", "-Wused-but-marked-unused", ], // https://clang.llvm.org/extra/clang-tidy/ tidy: true, tidy_checks: tidy_errors, tidy_checks_as_errors: tidy_errors, tidy_flags: [ "-format-style='file'", "--header-filter='frameworks/av/services/mediametrics/'", ], } cc_binary { name: "mediametrics", defaults: [ "mediametrics_flags_defaults", ], srcs: [ "main_mediametrics.cpp", Loading @@ -22,17 +108,13 @@ cc_binary { init_rc: [ "mediametrics.rc", ], cflags: [ "-Wall", "-Werror", "-Wextra", "-Wthread-safety", ], } cc_library_shared { name: "libmediametricsservice", defaults: [ "mediametrics_flags_defaults", ], srcs: [ "AudioAnalytics.cpp", Loading Loading @@ -73,11 +155,4 @@ cc_library_shared { include_dirs: [ "system/media/audio_utils/include", ], cflags: [ "-Wall", "-Werror", "-Wextra", "-Wthread-safety", ], }
services/mediametrics/AudioAnalytics.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -594,4 +594,4 @@ void AudioAnalytics::DeviceConnection::expire() { #endif } } // namespace android } // namespace android::mediametrics
services/mediametrics/AudioPowerUsage.cpp +8 −8 Original line number Diff line number Diff line Loading @@ -160,7 +160,7 @@ bool AudioPowerUsage::saveAsItem_l( return true; //ignore unknown device } for (auto item : mItems) { for (const auto& item : mItems) { int32_t item_type = 0, item_device = 0; double item_volume = 0.; int64_t item_duration_ns = 0; Loading Loading @@ -259,8 +259,8 @@ void AudioPowerUsage::checkMode(const std::shared_ptr<const mediametrics::Item>& const int64_t endCallNs = item->getTimestamp(); const int64_t durationNs = endCallNs - mDeviceTimeNs; if (durationNs > 0) { mDeviceVolume = (mDeviceVolume * (mVolumeTimeNs - mDeviceTimeNs) + mVoiceVolume * (endCallNs - mVolumeTimeNs)) / durationNs; mDeviceVolume = (mDeviceVolume * double(mVolumeTimeNs - mDeviceTimeNs) + mVoiceVolume * double(endCallNs - mVolumeTimeNs)) / durationNs; saveAsItem_l(mPrimaryDevice, durationNs, VOICE_CALL_TYPE, mDeviceVolume); } } else if (mode == "AUDIO_MODE_IN_CALL") { // entering call mode Loading @@ -287,8 +287,8 @@ void AudioPowerUsage::checkVoiceVolume(const std::shared_ptr<const mediametrics: const int64_t timeNs = item->getTimestamp(); const int64_t durationNs = timeNs - mDeviceTimeNs; if (durationNs > 0) { mDeviceVolume = (mDeviceVolume * (mVolumeTimeNs - mDeviceTimeNs) + mVoiceVolume * (timeNs - mVolumeTimeNs)) / durationNs; mDeviceVolume = (mDeviceVolume * double(mVolumeTimeNs - mDeviceTimeNs) + mVoiceVolume * double(timeNs - mVolumeTimeNs)) / durationNs; mVolumeTimeNs = timeNs; } } Loading Loading @@ -318,8 +318,8 @@ void AudioPowerUsage::checkCreatePatch(const std::shared_ptr<const mediametrics: const int64_t endDeviceNs = item->getTimestamp(); const int64_t durationNs = endDeviceNs - mDeviceTimeNs; if (durationNs > 0) { mDeviceVolume = (mDeviceVolume * (mVolumeTimeNs - mDeviceTimeNs) + mVoiceVolume * (endDeviceNs - mVolumeTimeNs)) / durationNs; mDeviceVolume = (mDeviceVolume * double(mVolumeTimeNs - mDeviceTimeNs) + mVoiceVolume * double(endDeviceNs - mVolumeTimeNs)) / durationNs; saveAsItem_l(mPrimaryDevice, durationNs, VOICE_CALL_TYPE, mDeviceVolume); } // reset statistics Loading Loading @@ -391,4 +391,4 @@ std::pair<std::string, int32_t> AudioPowerUsage::dump(int limit) const { return { ss.str(), slot }; } } // namespace android } // namespace android::mediametrics
services/mediametrics/MediaMetricsService.cpp +6 −5 Original line number Diff line number Diff line Loading @@ -32,7 +32,8 @@ namespace android { using namespace mediametrics; using mediametrics::Item; using mediametrics::startsWith; // individual records kept in memory: age or count // age: <= 28 hours (1 1/6 days) Loading Loading @@ -63,7 +64,7 @@ nsecs_t MediaMetricsService::roundTime(nsecs_t timeNs) bool MediaMetricsService::useUidForPackage( const std::string& package, const std::string& installer) { if (strchr(package.c_str(), '.') == NULL) { if (strchr(package.c_str(), '.') == nullptr) { return false; // not of form 'com.whatever...'; assume internal and ok } else if (strncmp(package.c_str(), "android.", 8) == 0) { return false; // android.* packages are assumed fine Loading Loading @@ -203,9 +204,9 @@ status_t MediaMetricsService::submitInternal(mediametrics::Item *item, bool rele // Overwrite package name and version if the caller was untrusted or empty if (!isTrusted || item->getPkgName().empty()) { const uid_t uid = item->getUid(); const uid_t uidItem = item->getUid(); const auto [ pkgName, version ] = MediaMetricsService::getSanitizedPackageNameAndVersionCode(uid); MediaMetricsService::getSanitizedPackageNameAndVersionCode(uidItem); item->setPkgName(pkgName); item->setPkgVersionCode(version); } Loading Loading @@ -320,7 +321,7 @@ status_t MediaMetricsService::dump(int fd, const Vector<String16>& args) String8 value(args[i]); char *endp; const char *p = value.string(); long long sec = strtoll(p, &endp, 10); const auto sec = (int64_t)strtoll(p, &endp, 10); if (endp == p || *endp != '\0' || sec == 0) { sinceNs = 0; } else if (sec < 0) { Loading