1/*
2 * Copyright (C) 2008-2009 SVOX AG, Baslerstr. 30, 8048 Zuerich, Switzerland
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *     http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16/**
17 * @file picokpdf.h
18 *
19 * knowledge handling for pdf
20 *
21 * Copyright (C) 2008-2009 SVOX AG, Baslerstr. 30, 8048 Zuerich, Switzerland
22 * All rights reserved.
23 *
24 * History:
25 * - 2009-04-20 -- initial version
26 *
27 */
28
29#ifndef PICOKPDF_H_
30#define PICOKPDF_H_
31
32#include "picoos.h"
33#include "picoknow.h"
34
35#ifdef __cplusplus
36extern "C" {
37#endif
38#if 0
39}
40#endif
41
42
43/* ************************************************************/
44/**
45 * @addtogroup picokpdf
46 *
47   Two specialized pdf kb types are provided by this knowledge
48   handling module:
49
50   - pdf dur:     ...kpdf_DUR         (for dur)
51   - pdf mul:     ...kpdf_MUL         (for lfz and mgc)
52   - pdf phs:     ...kpdf_PHS         (for phase)
53
54*/
55/* ************************************************************/
56
57
58/* ************************************************************/
59/* defines and functions to create specialized kb, */
60/* to be used by picorsrc only */
61/* ************************************************************/
62
63#define PICOKPDF_MAX_NUM_STATES 10
64
65#define PICOKPDF_MAX_MUL_LFZ_CEPORDER 1
66#define PICOKPDF_MAX_MUL_MGC_CEPORDER 25
67
68/* trade accuracy against computation: more long multiplications.
69 * Maximum is 15 when invdiag0=(1<<(2*bigpow))/diag0 used
70 * currently observing instability in mlpg when bigpow >= 14, this needs to be investigated */
71
72#define PICOKPDF_BIG_POW 12
73
74typedef enum {
75    PICOKPDF_KPDFTYPE_DUR,
76    PICOKPDF_KPDFTYPE_MUL,
77    PICOKPDF_KPDFTYPE_PHS
78} picokpdf_kpdftype_t;
79
80pico_status_t picokpdf_specializePdfKnowledgeBase(picoknow_KnowledgeBase this,
81                                              picoos_Common common,
82                                              const picokpdf_kpdftype_t type);
83
84
85/* ************************************************************/
86/* pdf types and get Pdf functions */
87/* ************************************************************/
88
89/** object       : PdfDur, PdfMUL
90 *  shortcut     : kpdf*
91 *  derived from : picoknow_KnowledgeBase
92 */
93
94typedef struct picokpdf_pdfdur *picokpdf_PdfDUR;
95typedef struct picokpdf_pdfmul *picokpdf_PdfMUL;
96typedef struct picokpdf_pdfphs *picokpdf_PdfPHS;
97
98/* subobj specific for pdf dur type */
99typedef struct picokpdf_pdfdur {
100    picoos_uint16 numframes;
101    picoos_uint8 vecsize;
102    picoos_uint8 sampperframe;
103    picoos_uint8 phonquantlen;
104    picoos_uint8 *phonquant;
105    picoos_uint8 statequantlen;
106    picoos_uint8 *statequant;
107    picoos_uint8 *content;
108} picokpdf_pdfdur_t;
109
110/* subobj specific for pdf mul type */
111typedef struct picokpdf_pdfmul {
112    picoos_uint16 numframes;
113    picoos_uint8 vecsize;
114    picoos_uint8 numstates;
115    picoos_uint16 stateoffset[PICOKPDF_MAX_NUM_STATES]; /* offset within a phone to find the state ? */
116    picoos_uint8 ceporder;
117    picoos_uint8 numvuv;
118    picoos_uint8 numdeltas;
119    picoos_uint8 meanpow;
120    picoos_uint8 bigpow;
121    picoos_uint8 amplif;
122    picoos_uint8 *meanpowUm;  /* KPDF_NUMSTREAMS x ceporder values */
123    picoos_uint8 *ivarpow;    /* KPDF_NUMSTREAMS x ceporder values */
124    picoos_uint8 *content;
125} picokpdf_pdfmul_t;
126
127/* subobj specific for pdf phs type */
128typedef struct picokpdf_pdfphs {
129    picoos_uint16 numvectors;
130    picoos_uint8 *indexBase;
131    picoos_uint8 *contentBase;
132} picokpdf_pdfphs_t;
133
134/* return kb pdf for usage in PU */
135picokpdf_PdfDUR picokpdf_getPdfDUR(picoknow_KnowledgeBase this);
136picokpdf_PdfMUL picokpdf_getPdfMUL(picoknow_KnowledgeBase this);
137picokpdf_PdfPHS picokpdf_getPdfPHS(picoknow_KnowledgeBase this);
138
139
140/* ************************************************************/
141/* PDF DUR functions */
142/* ************************************************************/
143
144/* e.g. */
145/*picoos_uint8 picokpdf_pdfDURgetEle(const picokpdf_PdfDUR this,
146                                   const picoos_uint16 row,
147                                   const picoos_uint16 col,
148                                   picoos_uint16 *val);
149*/
150
151/* ************************************************************/
152/* PDF MUL functions */
153/* ************************************************************/
154
155#ifdef __cplusplus
156}
157#endif
158
159
160#endif /*PICOKPDF_H_*/
161