Skip to content
Merged
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
11 changes: 6 additions & 5 deletions zh-cn/device_dev_guide/build/Kconfig.md
Original file line number Diff line number Diff line change
Expand Up @@ -66,15 +66,15 @@ openvela 在首次启动编译时,通过指定的 `arch` 和 `board` 参数找
使用如下命令完成编译过程:

```Bash
./build.sh vendor/sim/boards/openvela/config/openvela menuconfig
./build.sh vendor/sim/boards/openvela/config/openvela -j8
./build.sh vendor/sim/boards/vela/config/vela menuconfig
./build.sh vendor/sim/boards/vela/config/vela -j8
```

### 3、文件路径示例

根据 openvela simulator 环境,各文件的典型路径如下:

- `defconfig` 文件路径:`vendor/sim/boards/openvela/configs/openvela/defconfig`
- `defconfig` 文件路径:`vendor/sim/boards/vela/configs/vela/defconfig`
- `.config` 文件路径:`nuttx/.config`
- `config.h` 文件路径:`nuttx/include/config.h`

Expand All @@ -91,7 +91,7 @@ openvela 在首次启动编译时,通过指定的 `arch` 和 `board` 参数找
使用 `menuconfig` 命令可打开可视化的配置界面,例如:

```Bash
./build.sh vendor/sim/boards/openvela/configs/openvela menuconfig
./build.sh vendor/sim/boards/vela/configs/vela menuconfig
```

![img](./figures/007.png)
Expand Down Expand Up @@ -127,6 +127,7 @@ openvela 在首次启动编译时,通过指定的 `arch` 和 `board` 参数找

- 整型(int):需要输入具体的整数值。
- 布尔型(bool):通过按下 `y`(选择)或空格键来切换状态。

![img](./figures/012.png)

- 字符串型:直接输入字符串作为配置值。
Expand All @@ -142,4 +143,4 @@ openvela 在首次启动编译时,通过指定的 `arch` 和 `board` 参数找

- [Zephyr 项目 - Kconfig Tips](https://docs.zephyrproject.org/latest/build/kconfig/tips.html)
- [Zephyr 项目 - Kconfig Extensions](https://docs.zephyrproject.org/latest/build/kconfig/extensions.html)
- [Kernel Documentation - Kconfig Language](https://www.kernel.org/doc/html/latest/kbuild/kconfig-language.html)
- [Kernel Documentation - Kconfig Language](https://www.kernel.org/doc/html/latest/kbuild/kconfig-language.html)
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,13 @@ openvela 基于 OpenAMP 实现了完整的 VirtIO 框架。该框架在上层支
1. 驱动层:

驱动层负责将 VirtIO 与 openvela 驱动框架对接。驱动层通过调用 VirtIO 提供的统一接口,完成设备的初始化和数据交互。

2. VirtIO 层:

VirtIO 层为驱动提供统一的接口,支持 Driver 和 Device 的注册、卸载以及匹配机制。

3. 传输层:

传输层提供对不同传输方式的支持,包括 MMIO、RemoteProc 和 PCI 等。

![img](./figures/011.svg)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,19 +14,25 @@ VirtIO 于 2008 年提出,当时 Linux 系统中针对不同虚拟化平台(
为实现上述目标,VirtIO 提出了以下两种核心机制:

1. 特性扩展机制。
- 提供适用于所有驱动的 feature 扩展机制,便于扩展 VirtIO driver 的功能。
- 支持 feature 的协商,确保向前和向后兼容性。

- 提供适用于所有驱动的 feature 扩展机制,便于扩展 VirtIO driver 的功能。
- 支持 feature 的协商,确保向前和向后兼容性。

2. Buffer 传输机制(vring/virtqueue)。
- 适用于所有驱动,设计简单,支持零拷贝和无锁操作。

- 适用于所有驱动,设计简单,支持零拷贝和无锁操作。

### 3、本文结构

本文档将分为以下两部分对 VirtIO 进行详细介绍:

1. 第一部分:
- 介绍 Virtqueue 的数据结构、两端的数据发送流程,以及为性能优化设计的高级特性。

- 介绍 Virtqueue 的数据结构、两端的数据发送流程,以及为性能优化设计的高级特性。

2. 第二部分:
- 说明 VirtIO Device 的基础概念。

- 说明 VirtIO Device 的基础概念。

本文档所有代码基于 OpenAMP 实现进行说明。其他操作系统(如 FreeBSD 和 Linux)的实现可能略有差异,但整体思路类似。

Expand Down Expand Up @@ -177,16 +183,16 @@ struct virtq_avail {

4. used_event:

- 当启用 VIRTIO_F_EVENT_IDX 特性时,`flags` 中的 VIRTQ_AVAIL_F_NO_INTERRUPT 无效。
- Device 的通知行为由 `avail.used_event` 决定:
- 当启用 VIRTIO_F_EVENT_IDX 特性时,`flags` 中的 VIRTQ_AVAIL_F_NO_INTERRUPT 无效。
- Device 的通知行为由 `avail.used_event` 决定:

- 当 Device 写入 used ring 时,如果 `used_ring.idx == used_event`,则发送通知;否则不发送。
- 当 Device 写入 used ring 时,如果 `used_ring.idx == used_event`,则发送通知;否则不发送。

- 该机制用于控制 Device 通知的节奏,减少不必要的中断。
- 该机制用于控制 Device 通知的节奏,减少不必要的中断。

##### Available Ring 示例

![img](./figures/003.svg)
![img](./figures/004.svg)

#### 4.3 Used Ring

Expand Down
3 changes: 2 additions & 1 deletion zh-cn/device_dev_guide/media/client/media_client.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,8 +63,9 @@ Client 端的 Media Policy 提供了设置和获取各种 Media Policy 参数的
- 同步接口:
- **media_policy.c** 提供管理 Policy 的同步接口,客户端可方便设置和获取各种媒体相关参数。
- 支持管理静音模式、订阅 Policy 变化、控制音频设备使用接口以及设置音量等。

- 异步接口:
- **media_uv_policy.c** 提供 Client 以异步方式设置和获取各种Policy相关参数的接口
- **media_uv_policy.c** 提供 Client 以异步方式设置和获取各种 Policy 相关参数的接口
- 支持获取音频模式、设备使用状态等。

### 4、**Media Session**
Expand Down
120 changes: 74 additions & 46 deletions zh-cn/device_dev_guide/media/mediatool_zh-cn.md
Original file line number Diff line number Diff line change
@@ -1,108 +1,136 @@
# **Mediatool 工具说明**
# Mediatool 工具使用指南

[[English](./mediatool.md) | 简体中文]

采用 Mediatool 测试程序,用于测试 Media Framework API,可模拟实际使用场景。
Mediatool 是一款测试程序,用于验证 Media Framework API 的功能,可基于模拟的实际使用场景测试媒体框架。

## 一、**配置 Mediatool 工具**
## 一、配置 Mediatool 工具

配置使用 mediatool 工具的 CPU ,比如 AP :
### 1、配置使用 Mediatool 的 CPU

以下配置适用于需要使用 Mediatool 的 CPU,例如 AP:

```shell
CONFIG_MEDIA=y // 需要使用 Media 功能的 cpu, enable 该选项
CONFIG_MEDIA_TOOL=y // 开启mediatool 工具
CONFIG_MEDIA_SERVER_CPUNAME='audio' // 提供Media 能力的 cpu name
CONFIG_MEDIA=y # 启用需要使用 Media 功能的 CPU
CONFIG_MEDIA_TOOL=y # 启用 Mediatool 工具
CONFIG_MEDIA_SERVER_CPUNAME='audio' # 提供 Media 功能的 CPU 名称
```

提供 media 能力(运行着 mediad )的 CPU, 比如 AUDIO:
### 2、配置提供 Media 功能的 CPU

以下配置适用于运行 mediad(提供 Media 能力)的 CPU,例如 AUDIO:

```shell
CONFIG_MEDIA_SERVER=y // 提供 Media 能力的 cpu, enable 该选项
CONFIG_MEDIA_SERVER_CONFIG_PATH="/etc/media/" // 设置media相关配置文件放置目录, 默认
CONFIG_MEDIA_SERVER_PROGNAME="mediad" // media deamon 程序名字,默认
CONFIG_MEDIA_SERVER=y # 启用提供 Media 功能的 CPU
CONFIG_MEDIA_SERVER_CONFIG_PATH="/etc/media/" # 配置文件默认放置目录
CONFIG_MEDIA_SERVER_PROGNAME="mediad" # Media deamon 程序名称
CONFIG_LIB_FFMPEG=y
CONFIG_LIB_FFMPEG_CONFIGURATION="--disable-sse --enable-avcodec
--enable-avdevice --enable-avfilter --enable-avformat --enable-decoder='aac,aac_latm,flac,mp3float,pcm_s16le,libopus,libfluoride_sbc,libfluoride_sbc_packed' --enable-demuxer='aac,mp3,pcm_s16le,flac,mov,ogg,wav' --enable-encoder='aac,pcm_s16le,libopus,libfluoride_sbc' --enable-hardcoded-tables --enable-indev=nuttx --enable-ffmpeg --enable-ffprobe --enable-filter='adevsrc,adevsink,afade,amix,amovie_async,amoviesink_async,astats,astreamselect,aresample,volume' --enable-libopus --enable-muxer='opus,opusraw,pcm_s16le,wav' --enable-outdev=bluelet,nuttx --enable-parser='aac,flac' --enable-protocol='cache,file,http,https,rpmsg,tcp,unix' --enable-swresample --tmpdir='/log'"
CONFIG_LIB_PFW=y
```

## 二、**Sim 环境运行 Mediatool**
## 二、Sim 模拟环境运行 Mediatool

通过配置以下步骤运行 Mediatool 测试工具,验证模拟运行环境中的媒体功能。

1. 运行 ap ,audio 虚拟机:
1. 启动 AP 和 AUDIO 虚拟机:

```shell
sudo ./nuttx
```

2. 挂载目录,/music 存放媒体文件,首先把host路径挂载当前核上(ap)
2. 挂载目录:将 `host` 路径挂载到当前核(AP)上的 `/music`,用于存放媒体文件

```shell
ap>mount -t hostfs -o fs=/home/jhd/music /music
```

3. 运行 mediatool 工具
3. 启动 Mediatool 工具运行测试

```shell
ap>mediatool
```

## 三、**测试方法**
## 三、测试方法

以下是使用 Mediatool 工具的常见操作方法,包括媒体文件的播放、录制以及调试指令。

### 1、播放音频文件

- 播放音频文件( URL 模式 )
- URL 模式播放

```shell
open Music
prepare 0 url music/1.mp3 //采用 URL 模式播放
start 0 //启动播放
stop 0 //停止播放
close 0 //关闭播放
open Music
prepare 0 url music/1.mp3 # 采用 URL 模式播放
start 0 # 启动播放
stop 0 # 停止播放
close 0 # 关闭播放
```

- 播放音频文件(Buffer模式)
- Buffer 模式播放

```shell
open Music
prepare 0 buffer /music/1.mp3 //采用 Buffer 模式播放
start 0
stop 0
close 0
open Music
prepare 0 buffer /music/1.mp3 # 采用 Buffer 模式播放
start 0
stop 0
close 0
```

- 录制音频文件(URL模式):
### 2、录制音频文件

- URL 模式录制:

```shell
copen cap
prepare 0 url music/2.opus
start 0 //启动录制
stop 0 //停止录制
close 0 //关闭录制
copen cap
prepare 0 url music/2.opus
start 0 # 启动录制
stop 0 # 停止录制
close 0 # 关闭录制
```

- 录制音频文件(Buffer模式)
- Buffer 模式录制

```shell
copen cap
prepare 0 buffer /music/b3.opus format=opus:sample_rate=16000:ch_layout=mono
start 0
stop 0
close 0
copen cap
prepare 0 buffer /music/b3.opus format=opus:sample_rate=16000:ch_layout=mono
start 0
stop 0
close 0
```

- 播放控制:
### 3、播放控制指令

- 暂停播放:

```shell
pause 0 //暂停播放
resume 0 //恢复播放
seek 0 1000 //跳转到1000ms处播放
pause 0 # 暂停播放
```

- 调整音量:
- 恢复播放:

```shell
resume 0 # 恢复播放
```

- 快速跳转播放:

```shell
seek 0 1000 # 跳转到 1000ms 处播放
```

### 4、调节音量指令

- 设置音量大小:

```shell
volume 0 50 //设置音量为50%
```

- mediatool 提供 debug 指令,方便日志调试:
### 5、调试指令

- 使用 mediatool 提供的调试命令,方便查看日志,排查问题:

```shell
mediatool>dump
Expand Down
Loading