ti nda material tms320dm355 codec engine details
Post on 22-Dec-2015
229 views
TRANSCRIPT
![Page 1: TI NDA Material TMS320DM355 Codec Engine Details](https://reader036.vdocuments.net/reader036/viewer/2022062421/56649d7e5503460f94a611a9/html5/thumbnails/1.jpg)
TI NDA Material
TMS320DM355
Codec Engine Details
![Page 2: TI NDA Material TMS320DM355 Codec Engine Details](https://reader036.vdocuments.net/reader036/viewer/2022062421/56649d7e5503460f94a611a9/html5/thumbnails/2.jpg)
Application Layer
User Interface Processing Thread (s) Network Services (NDK) Other
VPSS (VPFE, VPBE) IIC, McASP, McBSP, UART EMAC (NDK Socket I/F)
I/O LayerEPSI API
TMS320DM355 Software Overview
Operating System Layer (DSP BIOS and/or uC Linux)
VIS
A A
PI
Signal Processing Layer
Video
Image
Speech
Audio
User-defined
![Page 3: TI NDA Material TMS320DM355 Codec Engine Details](https://reader036.vdocuments.net/reader036/viewer/2022062421/56649d7e5503460f94a611a9/html5/thumbnails/3.jpg)
Outline
VISA API
Codec Engine Details
Codec Engine Configuration
Where to Go for More Information
![Page 4: TI NDA Material TMS320DM355 Codec Engine Details](https://reader036.vdocuments.net/reader036/viewer/2022062421/56649d7e5503460f94a611a9/html5/thumbnails/4.jpg)
Linux/ARM® Programmer Complexities of Signal Processing Layer
(SPL) are abstracted into four functions:_create_delete_process_control
VISA = 4 processing domains : Video Imaging Speech Audio
Separate API set for encode and decode thus, a total of 8 API classes:VIDENC IMGENC SPHENC AUDENCVIDDEC IMGDEC SPHDEC AUDDEC
VISA Interface
create()
control()
process()
delete()
Video
Imaging
Speech
AudioVISAAPI
VIDENC_process()
TI’s Codec Engine (CE) provides abstraction between VISA and algorithms
Application programmers can purchase xDM algorithms from TI third party vendors
Alternatively, DSP programmers can create xDM compliant algos
Author your own algos or purchase depending on your DSP needs and skills
Signal Processing Layer (SPL)
Complexity
Codec Engine
TI authored framework
xDM algo 1 xDM algo 2 xDM algo 3xDM algo Q
Reducing dozens of API to 4
![Page 5: TI NDA Material TMS320DM355 Codec Engine Details](https://reader036.vdocuments.net/reader036/viewer/2022062421/56649d7e5503460f94a611a9/html5/thumbnails/5.jpg)
Audio EncodingVoid taskFunction(…){
aiHandle = SIO_create(…);SIO_issue(aiHandle, bufPtr, size, NULL);
CERuntime_init();myCE = Engine_open(…);myVE = VIDENC_create(myCE,…);
while (‘condition’){SIO_put(aiHandle, &bufPtr);AUDENC_process(myVE, …);/* Store result somewhere */
}
VIDENC_delete(myVE); Engine_close(myCE);
SIO_reclaim(aiHandle, &bufPtr, NULL);
SIO_delete(aiHandle);}
Initialize CE environment, open Engine, create codec
Process audio buffer and store
Return codec and engine resources to system
![Page 6: TI NDA Material TMS320DM355 Codec Engine Details](https://reader036.vdocuments.net/reader036/viewer/2022062421/56649d7e5503460f94a611a9/html5/thumbnails/6.jpg)
AUDENC_create()
Engine and Codec names are declared during the Engine build phase as we will see in the following section.
Engine_Handle myCE;
AUDENC_Handle myAE;
AUDENC_Params params;
CERuntime_init();
myCE = Engine_open(“myEngine”, NULL);
// Fill in params here
myAE = AUDENC_create(myCE, “myEnc1”,params);
![Page 7: TI NDA Material TMS320DM355 Codec Engine Details](https://reader036.vdocuments.net/reader036/viewer/2022062421/56649d7e5503460f94a611a9/html5/thumbnails/7.jpg)
AUDENC_processXDM_BufDesc inBufDesc, outBufDesc;AUDENC_InArgs encInArgs;AUDENC_OutArgs encOutArgs;Int status;
encInArgs.size = sizeof(encInArgs);encOutArgs.size = sizeof(encOutArgs);
// fill in remaining encInArgs values // fill in Buffer Descriptor values
status = AUDENC_process(myAE, &inBufDesc, &OutBufDesc, &encInArgs, &encOutArgs);
if(status !=0) doerror(status);
![Page 8: TI NDA Material TMS320DM355 Codec Engine Details](https://reader036.vdocuments.net/reader036/viewer/2022062421/56649d7e5503460f94a611a9/html5/thumbnails/8.jpg)
Buffer Descriptors
typedef struct XDM_BufDesc{
XDAS_Int32 numBufs;
XDAS_Int32 *bufSizes;
XDAS_Int8 **bufs;
}
= 3
2
6
4
xDM Buffer Descriptors are used to pass buffers to and from the _process() function
Provides a standardized way for passing any number of arbitrarily sized buffers
AUDENC_process(myAE, &ibuf, &obuf, &myInArgs, &myRetVals);
![Page 9: TI NDA Material TMS320DM355 Codec Engine Details](https://reader036.vdocuments.net/reader036/viewer/2022062421/56649d7e5503460f94a611a9/html5/thumbnails/9.jpg)
Allocate Buffers XDAS_Int8 buf0[2];XDAS_Int8 buf1[6];XDAS_Int8 buf2[4];
Allocate Buffer Descriptor
XDM_BufDesc inBufDesc;XDAS_Int32 inBufSizes[3];XDAS_Int8 *inBufPtrs[3];
Build Buffer Descriptor
inBufDesc.numBufs = 3;inBufDesc.bufSizes = inBufSizes;inBufDesc.bufs = inBufPtrs;
Set size & Pointer Arrays
inBufSizes[0] = sizeof(buf0);inBufSizes[1] = sizeof(buf1);inBufSizes[2] = sizeof(buf2);inBufPtrs[0] = buf0;inBufPtrs[1] = buf1;inBufPtrs[2] = buf2;
![Page 10: TI NDA Material TMS320DM355 Codec Engine Details](https://reader036.vdocuments.net/reader036/viewer/2022062421/56649d7e5503460f94a611a9/html5/thumbnails/10.jpg)
Calling AUDENC_control()AUDENC_Status status;
AUDENC_DynParams dynParams;
Int retVal;
retVal = AUDENC_control(myAE, XDM_GETSTATUS,
&dynParams, &status);
if(retVal !=0) printf(“AUDENC_control Returned extended
error %d\n”, status.extendedError);
Calling AUDENC_delete()AUDENC_delete(myAE);
![Page 11: TI NDA Material TMS320DM355 Codec Engine Details](https://reader036.vdocuments.net/reader036/viewer/2022062421/56649d7e5503460f94a611a9/html5/thumbnails/11.jpg)
Outline VISA API
Codec Engine Details
Codec Engine Configuration
Where to Go for More Information
![Page 12: TI NDA Material TMS320DM355 Codec Engine Details](https://reader036.vdocuments.net/reader036/viewer/2022062421/56649d7e5503460f94a611a9/html5/thumbnails/12.jpg)
Codec Engine Benefits Multiple algorithm channels (instances) Dynamic (run-time) algorithm instantiation
Plug-and-play for algorithms of the same class (inheritance) Sharing of memory and DMA channel resources Algorithm interoperability with any CE-based Framework Same API, no new learning curve for TMS320DM644x, DM643x users Provided by TI!
Many of these benefits are a direct result of the
object-oriented structure of the codec engine
![Page 13: TI NDA Material TMS320DM355 Codec Engine Details](https://reader036.vdocuments.net/reader036/viewer/2022062421/56649d7e5503460f94a611a9/html5/thumbnails/13.jpg)
xDM vs C++ Objectsclass algo{
public:
// methods
int method1(int param);
int method2(int param);
// attributes
int attr1;
int attr2;
}
typedef struct {
// methods
int (*method1) (int param);
int (*method2) (int param);
// attributes
int attr1;
int attr2;
} algo;
xDAIS and xDM provide a C++-like object implemented in C.
Because C does not support classes, structs are used. Because structs do not support methods, function pointers
are used.
![Page 14: TI NDA Material TMS320DM355 Codec Engine Details](https://reader036.vdocuments.net/reader036/viewer/2022062421/56649d7e5503460f94a611a9/html5/thumbnails/14.jpg)
xDM vs C++ MethodsConstructor
algo::algo(algo_params params)
VIDENC_create(VIDENC_params params)
Destructor
algo::~algo()
VIDENC_delete()
Generic Methods
algo::myMethod1(method_params params)
VIDENC_process(…)
VIDENC_control(…)
Note: with xDM, the CE Framework allocates resources on algorithm request, as opposed to a C++ constructor, which allocates its own resources.
![Page 15: TI NDA Material TMS320DM355 Codec Engine Details](https://reader036.vdocuments.net/reader036/viewer/2022062421/56649d7e5503460f94a611a9/html5/thumbnails/15.jpg)
Codec Engine
Engine
Linux or DSP/BIOS
Engine API
EngineSPI
OSAL
codectable
VISA API
xDM Codec
xDM Codec
App
Create and Delete The application creates a local (or
remote) video encoder instance through the VIDENC_create API
The VIDENC_create or VIDENC_delete function passes the request to the Engine, which determines if the requested
codec is local via the codec table
And, if the codec is local, grants or frees resources such as memory and DMA channels to/from the algorithm
These resources ultimately come from the Linux O/S, which the Engine accesses via its O/S Abstraction Layer
![Page 16: TI NDA Material TMS320DM355 Codec Engine Details](https://reader036.vdocuments.net/reader036/viewer/2022062421/56649d7e5503460f94a611a9/html5/thumbnails/16.jpg)
Codec Creation: xDAIS
Create Phase
algNumAlloc
algAlloc
algInit
Execute Phase
algActivate
algDeactivate
(algMoved)
Delete Phase
algNumAlloc
algFree
Create phase functions use a handshaking mechanism to request memory from the framework
algActivate and algDeactivate are used for scratch memory sharing between algorithms.
When an algorithm instance is deleted, memory resources are returned to the framework.
xDM inherits xDAIS instantiation functions
![Page 17: TI NDA Material TMS320DM355 Codec Engine Details](https://reader036.vdocuments.net/reader036/viewer/2022062421/56649d7e5503460f94a611a9/html5/thumbnails/17.jpg)
memTab
Algorithm• Knows memory requirements• Requests appropriate resources from Application
Application (CE Framework) • Manages memory requests
• Determines what memories are available to which algorithms - and when
Physical Memory “space”:External (slow, plentiful, less cost)Internal (fast, limited, higher cost) SARAM, DARAM
3
4
2
1
Params
size
alignment
space
attrs
size
alignment
space
attrs
size
alignment
...
address0
address1
7
8
The xDAIS Transaction
sizeOf
*coeffPtr
filterLen
frameLen
5 6
![Page 18: TI NDA Material TMS320DM355 Codec Engine Details](https://reader036.vdocuments.net/reader036/viewer/2022062421/56649d7e5503460f94a611a9/html5/thumbnails/18.jpg)
Control and Process The application accesses a codec
instance through VIDENC_control and VIDENC_process API
The VIDENC_control and VIDENC_process functions call corresponding control or process function from the Codec.
Control and process calls made via a function pointer in the VIDENC_object
Reason for this extra mechanism will become more clear when we study remote codecsEngine
Linux or DSP/BIOS
Engine API
EngineSPI
OSAL
codectable
App
Codec Engine
VISA API
xDM Codec
xDM Codec
![Page 19: TI NDA Material TMS320DM355 Codec Engine Details](https://reader036.vdocuments.net/reader036/viewer/2022062421/56649d7e5503460f94a611a9/html5/thumbnails/19.jpg)
xDAIS for Digital Media “xDM”
A simple extension of xDAIS (i.e. the iAlg interface.) Ensures algorithm will integrate into the CODEC
engine
typedef struct IVIDENC_Fxns {
IALG_Fxns ialg;
XDAS_Int32 (*process)( IVIDDEC_Handle, XDM_BufDesc *, XDM_BufDesc *, IVIDDEC_InArgs *, IVIDDEC_OutArgs *);
XDAS_Int32 (*control) ( IVIDDEC_Handle, IVIDDEC_Cmd, IVIDDEC_DynamicParams *, IVIDDEC_Status *);
} IVIDENC_Fxns;
![Page 20: TI NDA Material TMS320DM355 Codec Engine Details](https://reader036.vdocuments.net/reader036/viewer/2022062421/56649d7e5503460f94a611a9/html5/thumbnails/20.jpg)
Outline VISA API
Codec Engine Details
Codec Engine Configuration Where to Go for More Information
![Page 21: TI NDA Material TMS320DM355 Codec Engine Details](https://reader036.vdocuments.net/reader036/viewer/2022062421/56649d7e5503460f94a611a9/html5/thumbnails/21.jpg)
Configuro
<name>_<targ>.c
myCfg.cfgmyCfg.cfgtarget
<name>_<targ>.xdlConfiguro
platform
xdcpaths
Makefile rule #1 – builds <name>_<targ>.c and <name>_<targ>.xdl by invoking configuro with xdcpaths, target, platform and myCfg.cfg as command line options
Makefile rules #2,#3 – compile <name>_<targ>.c and link result, with <name>_<targ>.xdl and application files.
![Page 22: TI NDA Material TMS320DM355 Codec Engine Details](https://reader036.vdocuments.net/reader036/viewer/2022062421/56649d7e5503460f94a611a9/html5/thumbnails/22.jpg)
Target – a familiar concept
![Page 23: TI NDA Material TMS320DM355 Codec Engine Details](https://reader036.vdocuments.net/reader036/viewer/2022062421/56649d7e5503460f94a611a9/html5/thumbnails/23.jpg)
What does the target provide?
Default Build Profiles
Tool Invokations
Default Build Options
![Page 24: TI NDA Material TMS320DM355 Codec Engine Details](https://reader036.vdocuments.net/reader036/viewer/2022062421/56649d7e5503460f94a611a9/html5/thumbnails/24.jpg)
Platform - another familiar concept
![Page 25: TI NDA Material TMS320DM355 Codec Engine Details](https://reader036.vdocuments.net/reader036/viewer/2022062421/56649d7e5503460f94a611a9/html5/thumbnails/25.jpg)
What does the platform provide?
Global SettingsMemory Map
![Page 26: TI NDA Material TMS320DM355 Codec Engine Details](https://reader036.vdocuments.net/reader036/viewer/2022062421/56649d7e5503460f94a611a9/html5/thumbnails/26.jpg)
Configurationvar osal = xdc.useModule(‘ti.sdo.ce.osal.Global’);
osal.runtimeEnv = osalGlobal.Linux;
var audEnc1 = xdc.useModule(‘codecs.audenc1.AUDENC1’);
var audEnc2 = xdc.useModule(‘codecs.audenc2.AUDENC2’);
var Engine = xdc.useModule(‘ti.sdo.ce.Engine’);
var myEng = Engine.create(“myEngine”, [
{name: “myEnc1”, mod: audEnc1, local: true},
{name: “myEnc2”, mod: audEnc2, local: true},
] );
Engine Configuration File app.cfg
Engine
Linux or DSP/BIOS
App
Engine API
EngineSPI
OSAL
codectable
VISA API
xDM Codec
xDM Codec
![Page 27: TI NDA Material TMS320DM355 Codec Engine Details](https://reader036.vdocuments.net/reader036/viewer/2022062421/56649d7e5503460f94a611a9/html5/thumbnails/27.jpg)
var osal = xdc.useModule(‘ti.sdo.ce.osal.Global’);
osal.runtimeEnv = osalGlobal.LINUX;
var audEnc1 = xdc.useModule(‘codecs.audenc1.AUDENC1’);
var audEnc2 = xdc.useModule(‘codecs.audenc2.AUDENC2’);
var Engine = xdc.useModule(‘ti.sdo.ce.Engine’);
var myEng = Engine.create(“myEngine”, [
{name: “myEnc1”, mod: audEnc1, local: true},
{name: “myEnc2”, mod: audEnc2, local: true},
] );
Engine
Linux or DSP/BIOS
App
Engine API
EngineSPI
OSAL
codectable
VISA API
xDM Codec
xDM Codec
Engine Configuration File app.cfg
Configuration
![Page 28: TI NDA Material TMS320DM355 Codec Engine Details](https://reader036.vdocuments.net/reader036/viewer/2022062421/56649d7e5503460f94a611a9/html5/thumbnails/28.jpg)
var osal = xdc.useModule(‘ti.sdo.ce.osal.Global’);
osal.runtimeEnv = osalGlobal.LINUX;
var audEnc1 = xdc.useModule(‘codecs.audenc1.AUDENC1’);
var audEnc2 = xdc.useModule(‘codecs.audenc2.AUDENC2’);
var Engine = xdc.useModule(‘ti.sdo.ce.Engine’);
var myEng = Engine.create(“myEngine”, [
{name: “myEnc1”, mod: audEnc1, local: true},
{name: “myEnc2”, mod: audEnc2, local: true},
] );
Configuration
Engine
Linux or DSP/BIOS
App
Engine API
EngineSPI
OSAL
codectable
VISA API
xDM Codec
xDM Codec
Engine Configuration File app.cfg
![Page 29: TI NDA Material TMS320DM355 Codec Engine Details](https://reader036.vdocuments.net/reader036/viewer/2022062421/56649d7e5503460f94a611a9/html5/thumbnails/29.jpg)
Engine Names
var myEng = Engine.create(“myEngine”, [
{name: “myEnc1”, mod: audEnc1, local: true},
{name: “myEnc2”, mod: audEnc2, local: true},
] );
Engine configuration file
CERuntime_init();
myCE = Engine_open(“myEngine”, myCEAttrs);
myAE = AUDENC_create(myCE, “myEnc1”, params);
AUDENC_control(myAE, …);
AUDENC_process(myAE, …);
VIDENC_delete(myAE);
Engine_close(myCE);
Application Source File (app.c)
![Page 30: TI NDA Material TMS320DM355 Codec Engine Details](https://reader036.vdocuments.net/reader036/viewer/2022062421/56649d7e5503460f94a611a9/html5/thumbnails/30.jpg)
DMAN3
Initialization Phase (config-time) Usage Phase (run-time)
DMAN3PaRam:#’s 63-127
tcc:#’s 32-63
Physical DMAchannels
DMAN3
Alg2:2 PaRam,1 tcc1 DMA ch
Alg1:2 PaRam,1 tcc1 DMA ch
One last detail: The engine allocates resources to the codecs. How does it know which resources are available?
![Page 31: TI NDA Material TMS320DM355 Codec Engine Details](https://reader036.vdocuments.net/reader036/viewer/2022062421/56649d7e5503460f94a611a9/html5/thumbnails/31.jpg)
DMAN3 configvar DMAN3 = xdc.useModule('ti.sdo.fc.dman3.DMAN3');
DMAN3.idma3Internal = false;DMAN3.heapInternal = "L1DSRAM";DMAN3.heapExternal = "DDR";
DMAN3.PaRamBaseIndex = 78;DMAN3.numPaRamEntries = 48;
DMAN3.numQdmaChannels = 8;DMAN3.qdmaChannels = [0,1,2,3,4,5,6,7];DMAN3.numPaRamGroup[0] = 48;
DMAN3.tccAllocationMaskL = 0;DMAN3.tccAllocationMaskH = 0xff;DMAN3.numTccGroup[0] = 8;
if( this.prog.build.profile == "debug")DMAN3.debug = true;
In addition to physical DMA resources, module needs some memory for storing PaRam shadows and other channel configuration states.
PaRam granted to the DMAN3 module by base index and number
tcc’s are granted by bit mask
Up to 8 QDMA channels available on 644x
![Page 32: TI NDA Material TMS320DM355 Codec Engine Details](https://reader036.vdocuments.net/reader036/viewer/2022062421/56649d7e5503460f94a611a9/html5/thumbnails/32.jpg)
Outline
VISA API
Codec Engine Details
Codec Engine Configuration
Where to Go for More Information
![Page 33: TI NDA Material TMS320DM355 Codec Engine Details](https://reader036.vdocuments.net/reader036/viewer/2022062421/56649d7e5503460f94a611a9/html5/thumbnails/33.jpg)
Codec Engine InformationCodec Engine Application Developer’s Guide
Literature number: sprue67
http://focus.ti.com/lit/ug/sprue67c/sprue67c.pdf
Codec Engine Algorithm Creator User’s Guide
Literature number: sprued6
http://focus.ti.com/lit/ug/sprued6b/sprued6b.pdf
Codec Engine Server Integrator’s User’s Guide
Literature number: sprued5a.pdf
http://focus.ti.com/lit/ug/sprued5a/sprued5a.pdf
xDAIS-DM (Digital Media) User Guide
Literature number: spruec8
http://focus.ti.com/lit/ug/spruec8b/spruec8b.pdf