Files
pawlet_rpi4/audio/stub/MpegAudioHeader.h
oxmcandClaude Sonnet 5 8d5f56fd05 Sync to upstream android-17.0 (AOSP17)
Pull in raspberry-vanilla's AOSP17 device tree changes for rpi4 while
keeping all PawletOS customizations (A/B partition layout, sepolicy,
zram, TWRP recovery scaffolding, ALSA HDMI pre-warm, product/overlay
structure) intact on top.

Upstream changes absorbed:
- AOSP17 audio HAL refactor (StreamAlsa split into StreamAlsaBase/
  StreamAlsaMonoPipe, Utils.cpp -> UtilsAlsa.cpp, new Bluetooth/stub
  helper classes, libeffects AIDL rebuild via *_ndk_shared defaults)
- API level 36 -> 37, FCM matrix level 202504 -> 202604
- QuickSettings tile default split (SystemUIRpiOverlay, ported into
  pawlet_rpi_common where this overlay now lives)
- vendor_tracing_descriptors added to enforce-product-packages-exist
- misc AOSP17 logging header switch (android-base/logging.h -> Log.h)

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-04 00:16:17 -07:00

55 lines
1.9 KiB
C++

/*
* Copyright (C) 2025 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <cstdint>
#include <optional>
#include <ostream>
namespace aidl::android::hardware::audio::core {
/*
* This parser captures these fields to determine properties such as
* the MPEG version, layer, bitrate, sample rate, frame length and frame size.
*
* Reference - https://www.datavoyage.com/mpgscript/mpeghdr.htm
* - https://mutagen-specs.readthedocs.io/en/latest/id3/id3v2.2.html
*/
struct MpegFrame {
// The total length of the MPEG audio frame in bytes, including the header
int frameLengthBytes = 0;
// The number of audio samples in the frame
int frameSize = 0;
bool isID3v2 = false;
bool isID3v1 = false;
// Last few bytes of an ID3 tag or frame that couldn't be processed in a single chunk
size_t bytesPending = 0;
int sampleRate = 0;
int bitRate = 0;
};
inline std::ostream& operator<<(std::ostream& os, const MpegFrame& frame) {
os << "MpegFrame{len=" << frame.frameLengthBytes << ", size=" << frame.frameSize
<< ", isID3v2=" << (frame.isID3v2 ? "true" : "false")
<< ", isID3v1=" << (frame.isID3v1 ? "true" : "false") << ", pending=" << frame.bytesPending
<< ", sampleRate=" << frame.sampleRate << "}";
return os;
}
std::optional<MpegFrame> findMpegFrame(const uint8_t** currBuff, const uint8_t* endBuff);
} // namespace aidl::android::hardware::audio::core