Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a0ea70c5 authored by Tomasz Wasilczyk's avatar Tomasz Wasilczyk
Browse files

Review radio metadata allocations/deallocations.

Bug: b/34054813
Test: VTS, manual
Change-Id: I8c402ff6fed8d1fe7c5c2d468f2e7822dc0dac6f
parent 2f77a222
Loading
Loading
Loading
Loading
+7 −3
Original line number Diff line number Diff line
@@ -134,14 +134,18 @@ void HidlUtils::convertProgramInfoFromHal(radio_program_info_t *info,
                           halInfo->channel, halInfo->subChannel);
}

// TODO(twasilczyk): drop unnecessary channel info
//static
void HidlUtils::convertMetaDataFromHal(radio_metadata_t **metadata,
                                       const hidl_vec<MetaData>& halMetadata,
                                       uint32_t channel,
                                       uint32_t subChannel)
                                       uint32_t channel __unused,
                                       uint32_t subChannel __unused)
{

    radio_metadata_allocate(metadata, channel, subChannel);
    if (metadata == nullptr || *metadata == nullptr) {
        ALOGE("destination metadata buffer is a nullptr");
        return;
    }
    for (size_t i = 0; i < halMetadata.size(); i++) {
        radio_metadata_key_t key = static_cast<radio_metadata_key_t>(halMetadata[i].key);
        radio_metadata_type_t type = static_cast<radio_metadata_key_t>(halMetadata[i].type);
+10 −14
Original line number Diff line number Diff line
@@ -20,7 +20,7 @@
#include <media/audiohal/hidl/HalDeathHandler.h>
#include <utils/Log.h>
#include <utils/misc.h>
#include <system/radio_metadata.h>
#include <system/RadioMetadataWrapper.h>
#include <android/hardware/broadcastradio/1.0/IBroadcastRadioFactory.h>

#include "RadioHalHidl.h"
@@ -261,27 +261,25 @@ Return<void> RadioHalHidl::Tuner::configChange(Result result, const BandConfig&
Return<void> RadioHalHidl::Tuner::tuneComplete(Result result, const ProgramInfo& info)
{
    ALOGV("%s IN", __FUNCTION__);
    radio_hal_event_t event;
    memset(&event, 0, sizeof(radio_hal_event_t));
    radio_hal_event_t event = {};
    RadioMetadataWrapper metadataWrapper(&event.info.metadata);

    event.type = RADIO_EVENT_TUNED;
    event.status = HidlUtils::convertHalResult(result);
    HidlUtils::convertProgramInfoFromHal(&event.info, &info);
    onCallback(&event);
    radio_metadata_deallocate(event.info.metadata);
    return Return<void>();
}

Return<void> RadioHalHidl::Tuner::afSwitch(const ProgramInfo& info)
{
    ALOGV("%s IN", __FUNCTION__);
    radio_hal_event_t event;
    memset(&event, 0, sizeof(radio_hal_event_t));
    radio_hal_event_t event = {};
    RadioMetadataWrapper metadataWrapper(&event.info.metadata);

    event.type = RADIO_EVENT_AF_SWITCH;
    HidlUtils::convertProgramInfoFromHal(&event.info, &info);
    onCallback(&event);
    if (event.info.metadata != NULL) {
        radio_metadata_deallocate(event.info.metadata);
    }
    return Return<void>();
}

@@ -319,14 +317,12 @@ Return<void> RadioHalHidl::Tuner::newMetadata(uint32_t channel, uint32_t subChan
                                          const ::android::hardware::hidl_vec<MetaData>& metadata)
{
    ALOGV("%s IN", __FUNCTION__);
    radio_hal_event_t event;
    memset(&event, 0, sizeof(radio_hal_event_t));
    radio_hal_event_t event = {};
    RadioMetadataWrapper metadataWrapper(&event.info.metadata);

    event.type = RADIO_EVENT_METADATA;
    HidlUtils::convertMetaDataFromHal(&event.metadata, metadata, channel, subChannel);
    onCallback(&event);
    if (event.metadata != NULL) {
        radio_metadata_deallocate(event.info.metadata);
    }
    return Return<void>();
}