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

Commit 8471e805 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "hal: Correct PCM offload fragment size"

parents cfe34543 b57da78a
Loading
Loading
Loading
Loading
+12 −5
Original line number Diff line number Diff line
@@ -50,15 +50,15 @@
#define COMPRESS_OFFLOAD_FRAGMENT_SIZE (32 * 1024)

/* Used in calculating fragment size for pcm offload */
#define PCM_OFFLOAD_BUFFER_DURATION_FOR_AV 2000 /* 2 secs */
#define PCM_OFFLOAD_BUFFER_DURATION_FOR_AV_STREAMING 100 /* 100 millisecs */
#define PCM_OFFLOAD_BUFFER_DURATION_FOR_AV 1000 /* 1 sec */
#define PCM_OFFLOAD_BUFFER_DURATION_FOR_AV_STREAMING 80 /* 80 millisecs */

/* MAX PCM fragment size cannot be increased  further due
 * to flinger's cblk size of 1mb,and it has to be a multiple of
 * 24 - lcm of channels supported by DSP
 */
#define MAX_PCM_OFFLOAD_FRAGMENT_SIZE (240 * 1024)
#define MIN_PCM_OFFLOAD_FRAGMENT_SIZE (32 * 1024)
#define MIN_PCM_OFFLOAD_FRAGMENT_SIZE (4 * 1024)

#define ALIGN( num, to ) (((num) + (to-1)) & (~(to-1)))
/*
@@ -2022,16 +2022,23 @@ uint32_t platform_get_pcm_offload_buffer_size(audio_offload_info_t* info)
    } else if (info->has_video && info->is_streaming) {
        fragment_size = (PCM_OFFLOAD_BUFFER_DURATION_FOR_AV_STREAMING
                                     * info->sample_rate
                                     * bits_per_sample
                                     * (bits_per_sample >> 3)
                                     * popcount(info->channel_mask))/1000;

    } else if (info->has_video) {
        fragment_size = (PCM_OFFLOAD_BUFFER_DURATION_FOR_AV
                                     * info->sample_rate
                                     * bits_per_sample
                                     * (bits_per_sample >> 3)
                                     * popcount(info->channel_mask))/1000;
    }

    char value[PROPERTY_VALUE_MAX] = {0};
    if((property_get("audio.offload.pcm.buffer.size", value, "")) &&
            atoi(value)) {
        fragment_size =  atoi(value) * 1024;
        ALOGV("Using buffer size from sys prop %d", fragment_size);
    }

    fragment_size = ALIGN( fragment_size, 1024);

    if(fragment_size < MIN_PCM_OFFLOAD_FRAGMENT_SIZE)