Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion src/utils/Makefile.am
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
bin_PROGRAMS = cplay crecord
bin_PROGRAMS = cplay crecord sofprobeclient

cplay_SOURCES = cplay.c wave.c
crecord_SOURCES = crecord.c wave.c
sofprobeclient_SOURCES = sofprobeclient.c probes_demux.c

cplay_CFLAGS = -I$(top_srcdir)/include
crecord_CFLAGS = -I$(top_srcdir)/include
sofprobeclient_CFLAGS = -I$(top_srcdir)/include


cplay_LDADD = $(top_builddir)/src/lib/libtinycompress.la
crecord_LDADD = $(top_builddir)/src/lib/libtinycompress.la
sofprobeclient_LDADD = $(top_builddir)/src/lib/libtinycompress.la
92 changes: 92 additions & 0 deletions src/utils/probe_dma_frame.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
/* SPDX-License-Identifier: BSD-3-Clause
*
* Copyright(c) 2022 Intel Corporation. All rights reserved.
*
* Local copy of ipc/probe_dma_frame.h with MASK defined inline
* so it can be built without SOF RTOS headers.
*/

#ifndef __PROBE_DMA_FRAME_H__
#define __PROBE_DMA_FRAME_H__

#include <stdint.h>

#ifndef MASK
#define MASK(b_hi, b_lo) \
(((1ULL << ((b_hi) - (b_lo) + 1ULL)) - 1ULL) << (b_lo))
#endif

/**
* Header for data packets sent via compressed PCM from extraction probes
*/
struct probe_data_packet {
uint32_t sync_word; /**< PROBE_EXTRACT_SYNC_WORD */
uint32_t buffer_id; /**< Buffer ID from which data was extracted */
uint32_t format; /**< Encoded data format */
uint32_t timestamp_low; /**< Low 32 bits of timestamp in us */
uint32_t timestamp_high; /**< High 32 bits of timestamp in us */
uint32_t data_size_bytes; /**< Size of following audio data */
uint8_t data[]; /**< Audio data extracted from buffer */
} __attribute__((packed, aligned(4)));

#define PROBE_EXTRACT_SYNC_WORD 0xBABEBEBA

/**
* \brief Definitions of shifts and masks for format encoding in probe
* extraction stream
*
* Audio format from extraction probes is encoded as 32 bit value. Following
* graphic explains encoding.
*
* A|BBBB|CCCC|DDDD|EEEEE|FF|GG|H|I|J|XXXXXXX
* A - 1 bit - Specifies Type Encoding - 1 for Standard encoding
* B - 4 bits - Specify Standard Type - 0 for Audio
* C - 4 bits - Specify Audio format - 0 for PCM
* D - 4 bits - Specify Sample Rate - value enumerating standard sample rates:
* 8000 Hz = 0x0
* 11025 Hz = 0x1
* 12000 Hz = 0x2
* 16000 Hz = 0x3
* 22050 Hz = 0x4
* 24000 Hz = 0x5
* 32000 Hz = 0x6
* 44100 Hz = 0x7
* 48000 Hz = 0x8
* 64000 Hz = 0x9
* 88200 Hz = 0xA
* 96000 Hz = 0xB
* 128000 Hz = 0xC
* 176400 Hz = 0xD
* 192000 Hz = 0xE
* none of the above = 0xF
* E - 5 bits - Specify Number of Channels minus 1
* F - 2 bits - Specify Sample Size, number of valid sample bytes minus 1
* G - 2 bits - Specify Container Size, number of container bytes minus 1
* H - 1 bit - Specifies Sample Format - 0 for Integer, 1 for Floating point
* I - 1 bit - Specifies Sample Endianness - 0 for LE
* J - 1 bit - Specifies Interleaving - 1 for Sample Interleaving
*/

#define PROBE_SHIFT_FMT_TYPE 31
#define PROBE_SHIFT_STANDARD_TYPE 27
#define PROBE_SHIFT_AUDIO_FMT 23
#define PROBE_SHIFT_SAMPLE_RATE 19
#define PROBE_SHIFT_NB_CHANNELS 14
#define PROBE_SHIFT_SAMPLE_SIZE 12
#define PROBE_SHIFT_CONTAINER_SIZE 10
#define PROBE_SHIFT_SAMPLE_FMT 9
#define PROBE_SHIFT_SAMPLE_END 8
#define PROBE_SHIFT_INTERLEAVING_ST 7

#define PROBE_MASK_FMT_TYPE MASK(31, 31)
#define PROBE_MASK_STANDARD_TYPE MASK(30, 27)
#define PROBE_MASK_AUDIO_FMT MASK(26, 23)
#define PROBE_MASK_SAMPLE_RATE MASK(22, 19)
#define PROBE_MASK_NB_CHANNELS MASK(18, 14)
#define PROBE_MASK_SAMPLE_SIZE MASK(13, 12)
#define PROBE_MASK_CONTAINER_SIZE MASK(11, 10)
#define PROBE_MASK_SAMPLE_FMT MASK(9, 9)
#define PROBE_MASK_SAMPLE_END MASK(8, 8)
#define PROBE_MASK_INTERLEAVING_ST MASK(7, 7)

#endif /* __PROBE_DMA_FRAME_H__ */
Loading