08.09.2014 Views

ハイエンド・オーディオ機能を手軽に実現する ソフトウェア ... - Synopsys

ハイエンド・オーディオ機能を手軽に実現する ソフトウェア ... - Synopsys

ハイエンド・オーディオ機能を手軽に実現する ソフトウェア ... - Synopsys

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

White Paper<br />

<br />

<br />

SoC<br />

20123<br />

Author<br />

Ruud Derwig<br />

Senior Staff,<br />

<strong>Synopsys</strong>, Inc.<br />

<br />

CPU<br />

Blu-ray<br />

24/192kHz HDHigh-Definition<br />

9.1Pro Logic IIz<br />

DesignWare ARC AS211SFX/<br />

AS221BD 1 DSPDigital<br />

Signal ProcessorCPU<br />

<br />

<br />

Linux<br />

Android<br />

/<br />

<br />

<br />

1<br />

<br />

<br />

<br />

DSP<br />

DSP<br />

1<br />

<br />

CPUDSP


2<br />

SMP<br />

<br />

<br />

DSPDSP<br />

DSPCPU<br />

<br />

SMP<br />

<br />

<br />

CPU<br />

<br />

<br />

1<br />

2<br />

DSP<br />

<br />

<br />

<br />

<br />

<br />

<br />

+<br />

<br />

<br />

<br />

<br />

+<br />

<br />

OS<br />

<br />

<br />

<br />

ARC AS211SFX<br />

AS221BD<br />

<br />

<br />

<br />

2DSP<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

DSP<br />

Khronos OpenMAX-IL 2<br />

<br />

API<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

CPU<br />

DSP<br />

<br />

<br />

ARC AS211SFX/AS221BD<br />

1DSP<br />

API


OpenMAX<br />

LinuxGStreamer3<br />

Android<br />

Google/Open Handset AllianceStagefright<br />

43<br />

DSP<br />

ARC AS211SFX/AS211BD<br />

SoC<br />

<br />

<br />

<br />

1DSPCPUAPIApplication<br />

Programming Interface<br />

1APIAPI<br />

APICPUDSP<br />

DSP<br />

API<br />

DSP<br />

API 2 API <br />

<br />

API<br />

API<br />

CPU DSP<br />

API APIAPI<br />

API<br />

MP3<br />

API<br />

<br />

<br />

API 1<br />

<br />

DSP DSP <br />

DSPDSP <br />

DSP <br />

<br />

<br />

3<br />

DSP<br />

DSP<br />

3


MSF<br />

<br />

RPC/<br />

IPC<br />

<br />

RPC/<br />

IPC<br />

MSF<br />

<br />

MQX OS<br />

<br />

ARC AS211SFX/AS221BD<br />

3<br />

DSP<br />

DSP3<br />

<br />

OSDesignWare SoundWave 5<br />

ARC MQX<br />

MSF<br />

/<br />

API<br />

<br />

End-of-Stream<br />

DesignWare SoundWaveARC<br />

ARC MSFMSF<br />

<br />

API<br />

4MP3<br />

<br />

MP3<br />

<br />

// Step #1 – creating modules<br />

msf_api_source_module_create(“Source”, … ,&source_module_id);<br />

msf_api_audio_api_module_create(“MP3 Decoder”, … , &audio_api_module_id);<br />

msf_api_sink_module_create(“Sink”, … , &sink_module_id);<br />

// Step #2 – connecting modules<br />

msf_api_connect_pins(source_module_id, audio_api_module_id, …);<br />

msf_api_connect_pins(audio_api_module_id, sink_module_id, …);<br />

// Step #3 – starting data processing by sending START_PLAYBACK message<br />

msf_api_message_send_to_module(source_module_id,<br />

MSF_MESSAGE_CONTROL_CMD_START_PLAYBACK, …);<br />

4MSF<br />

4


RPC/IPCIPC<br />

API <br />

<br />

IPC<br />

<br />

<br />

IPC<br />

RPCIPC IPC<br />

<br />

CC++ <br />

RPC<br />

<br />

1<br />

<br />

DesignWare SoundWave <br />

RPC<br />

<br />

<br />

1<br />

<br />

CPUDSPC<br />

<br />

<br />

DSPDSP<br />

DSPintrinsic<br />

DSP<br />

DSP<br />

<br />

<br />

DSP<br />

<br />

3<br />

<br />

GUI<br />

///<br />

<br />

<br />

SD<br />

<br />

/<br />

<br />

<br />

DACRaw<br />

HDMII/O<br />

3Linux<br />

WindowsiOS<br />

5


MSFDSPRPC/IPCRPC/IPC<br />

MSFDSP<br />

MSFDSP<br />

<br />

MSF<br />

<br />

3<br />

DSP<br />

<br />

API<br />

<br />

GStreamerStagefrightOpenMAX-IL3<br />

<br />

GStreamer<br />

GStreamer<br />

LGPLv2<br />

<br />

GStreamer<br />

GStreamer<br />

<br />

<br />

<br />

GStreamer<br />

<br />

gst-launch playbin uri=file:<br />

<br />

GStreamer<br />

<br />

gst-inspect<br />

gst-launch<br />

gst-editor<br />

<br />

<br />

VoIP<br />

<br />

<br />

<br />

<br />

<br />

(...)<br />

GStreamer<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

- file:<br />

- http:<br />

- rtsp:<br />

- ...<br />

<br />

- alsa<br />

- v4l2<br />

- tcp/upd<br />

- ...<br />

<br />

- avi<br />

- mp4<br />

- ogg<br />

- ...<br />

<br />

- mp3<br />

- mpeg4<br />

- vorbis<br />

- ...<br />

<br />

- converters<br />

- mixers<br />

- effects<br />

- ...<br />

<br />

- alsa<br />

- xvideo<br />

- tcp/udp<br />

- ...<br />

(...)<br />

GStreamer<br />

GStreamer150<br />

<br />

<br />

5GStreamer<br />

6


Stagefright<br />

Stagefright Android 6 Android <br />

<br />

Android <br />

Java <br />

Android<br />

<br />

Stagefright<br />

<br />

GStreamer<br />

SoC GStreamer Android 6GStreamer<br />

7<br />

JAVA<br />

<br />

<br />

<br />

<br />

<br />

Linux<br />

...<br />

<br />

<br />

<br />

Stagefright<br />

<br />

GStreamer<br />

<br />

AudioFlinger<br />

OpenCore<br />

<br />

MIDI<br />

<br />

Vorbis<br />

<br />

<br />

<br />

Linux<br />

Alsa<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

->SurfaceFlinger<br />

<br />

<br />

<br />

->AudioFlinger<br />

6Android<br />

Stagefright AndroidApache 2.0<br />

OpenCoreGoogleAndroid<br />

Blu-<br />

Ray HDStagefright<br />

GStreamer Stagefright<br />

<br />

Audioflinger<br />

<br />

Stagefright<br />

<br />

StagefrightAPI<br />

OpenMAX-IL<br />

7


OpenMAX-IL<br />

3OpenMAX-IL<br />

APIKhronos<br />

KhronosOpenGL<br />

OpenMAX-ILIntegration Layer<br />

3API2<br />

OpenMAX-ALApplication LayerDCT<br />

OpenMAX-DLDevelopment Layer<br />

<br />

7OpenMAX-IL<br />

OpenMAX-ILGStreamer<br />

OpenMAX-<br />

IL /MP3<br />

<br />

IL<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

OpenMAX<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

IPC<br />

<br />

<br />

<br />

IPC<br />

<br />

7: OpenMAX-IL<br />

OpenMAX-IL<br />

<br />

CPU<br />

3<br />

<br />

<br />

<br />

72<br />

1OpenMAX-IL<br />

1<br />

<br />

<br />

8


1<br />

DSP<br />

2GStreamerStagefrightOpenMAX-IL<br />

OpenMAX<br />

SoC<br />

GStreamer OpenMAXGStreamer<br />

30%<br />

OpenMAX<br />

Stagefright OpenMAX<br />

DSP<br />

<br />

API<br />

GStreamer Stagefright OpenMAX-IL<br />

<br />

OMX<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

1 <br />

DSP<br />

3<br />

OpenMAX-IL<br />

<br />

<br />

GStreamerOpenMAX<br />

Stagefright<br />

AudioFlingerGStreamerOpenMAX<br />

<br />

SoC <br />

DSPSoC<br />

<br />

CPU<br />

/<br />

1DSPARC AS211SFX/AS221BD<br />

I/ODSP<br />

82DSP<br />

<br />

<br />

<br />

DSP 8<br />

G<br />

RPC/IPC <br />

DSP 8M<br />

9


DSP MSFDSP <br />

<br />

<br />

<br />

<br />

<br />

G<br />

CPU<br />

G<br />

G<br />

G<br />

FIFO<br />

-ARC<br />

<br />

<br />

M M M<br />

<br />

FIFO<br />

ARC-ARC<br />

<br />

ARC#0<br />

ARC#1<br />

ARC AS221BD<br />

<br />

<br />

8SoC<br />

<br />

GStreamerStagefrightOpenMAX-IL<br />

OpenMAX-IL<br />

<br />

RPC/IPCDSP MSFDSP<br />

GStreamer<br />

MSF<br />

OpenMAX-ILMSF<br />

Android<br />

<br />

StagefrightOpenMAX-IL<br />

<br />

/HD/<br />

StagefrightAndroid GStreamer<br />

Google TV<br />

<br />

10


connect_msf_outpin (GstPad* pad)<br />

{<br />

GstAudioModule *filter = …; // this elements private data<br />

if (!pad_is_deeptunnel(pad))<br />

{<br />

/* create sink module for connection to CPU->DSP fifo */<br />

msf_api_sink_module_create(filter->msf_coreid, "Sink module",<br />

filter->output_fifo_buffer, ... , &sink_module_id);<br />

msf_api_connect_pins(filter->msf_moduleid, sink_module_id, ...);<br />

} else if (pad_is_corecrossing(pad))<br />

{<br />

/* create sink module for connection to DSP->DSP fifo */<br />

msf_api_sink_module_create(filter->msf_coreid, "Sink module",<br />

filter->msf_sharedfifo, ... , &sink_module_id);<br />

msf_api_connect_pins(filter->msf_moduleid, sink_module_id, ...);<br />

} else<br />

{<br />

/* deep-tunnel AND no core-crossing */<br />

/* get the module id of the peer MSF module */<br />

g_object_get(G_OBJECT(peerelement),"msf_moduleid",<br />

&peer_module_id,…);<br />

msf_api_connect_pins(filter->msf_moduleid, peer_module_id, ...);<br />

}<br />

}<br />

9GStreamer<br />

9DSPAPI<br />

APIDesignWare SoundWave<br />

GStreamer<br />

2GStreamer<br />

<br />

<br />

GStreamer<br />

CPUDSP<br />

<br />

<br />

<br />

<br />

ARC AS211SFX/AS221BD<br />

DSP<br />

<br />

OS<br />

IPCAPI<br />

<br />

SoC<br />

<br />

11


1 Wolf, P., van der (2012). Audio Subsystems for Efficient SoC Integration; Integrating High-Definition<br />

Multi-Channel Audio Solutions at the Speed of Sound. White Paper, <strong>Synopsys</strong>, Inc.<br />

2 The Khronos group (2008). OpenMAX Integration Layer Application Programming Interface<br />

Specification. http://www.khronos.org/registry/omxil/specs/OpenMAX_IL_1_1_2_Specification.pdf<br />

3 GStreamer<br />

http://gstreamer.freedesktop.org<br />

4 StagefrightAndroid<br />

http://developer.android.com<br />

5 DesignWare SoundWaveIP<br />

http://www.synopsys.com/dw/ipdir.php?ds=audio_subsystem<br />

6 Gaignard, B. (2010). Android and GStreamer. Conference presentation, Embedded Linux Conference<br />

Europe, October 2010, Cambridge.<br />

http://elinux.org/images/a/a4/Android_and_Gstreamer.ppt, ST-Ericson.<br />

7 GStreamer Android<br />

http://gstreamer.freedesktop.org/wiki/GstreamerAndroid_InstallInstructions.<br />

<br />

158-0094<br />

531-0072<br />

2211<br />

319313<br />

TEL.03-6746-3500 FAX.03-6746-3535<br />

TEL.06-6359-8139FAX.06-6359-8149<br />

© <strong>Synopsys</strong>, Inc. All rights reserved.<strong>Synopsys</strong><strong>Synopsys</strong>, Inc.<br />

http://www.synopsys.com/Company/Pages/Trademarks.aspx <br />

03/12.AP.CS1444.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!