• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* ------------------------------------------------------------------
2  * Copyright (C) 1998-2009 PacketVideo
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
13  * express or implied.
14  * See the License for the specific language governing permissions
15  * and limitations under the License.
16  * -------------------------------------------------------------------
17  */
18 
19 
20 #include "textsampleentry.h"
21 #include "atomutils.h"
22 #include "a_atomdefs.h"
23 #include "boxrecord.h"
24 #include "stylerecord.h"
25 #include "fonttableatom.h"
26 #include "textsampledescinfo.h"
27 
28 
29 
30 // Constructor
PVA_FF_TextSampleEntry()31 PVA_FF_TextSampleEntry::PVA_FF_TextSampleEntry()
32         : PVA_FF_SampleEntry(TEXT_SAMPLE_ENTRY)
33 {
34 
35     init();
36     recomputeSize();
37 
38 
39 }
40 
41 // Destructor
~PVA_FF_TextSampleEntry()42 PVA_FF_TextSampleEntry::~PVA_FF_TextSampleEntry()
43 {
44     if (_pBackgroundRGBA)
45     {
46         OSCL_FREE(_pBackgroundRGBA);
47         _pBackgroundRGBA = NULL;
48     }
49     PV_MP4_FF_DELETE(NULL, PVA_FF_BoxRecord, _pBoxRecord);
50     PV_MP4_FF_DELETE(NULL, PVA_FF_StyleRecord, _pStyleRecord);
51     PV_MP4_FF_DELETE(NULL, PVA_FF_FontTableAtom, _pFontTableAtom);
52 }
53 
init()54 void PVA_FF_TextSampleEntry::init()
55 {
56     for (int i = 0; i < 6; i++)
57     {
58         _reserved[i] = 0;
59     }
60     _dataReferenceIndex = 1;
61     _preDefined1 = 0;
62     _reserved1 = 0;
63 
64     for (int j = 0; j < 3; j++)
65     {
66         _predefined2[j] = 0;
67     }
68 
69     _reserved2 = 0;
70     _preDefined2 = 0;
71     _predefined3 = -1;
72 
73     PV_MP4_FF_NEW(fp->auditCB, PVA_FF_BoxRecord, (), _pBoxRecord);
74     PV_MP4_FF_NEW(fp->auditCB, PVA_FF_StyleRecord, (), _pStyleRecord);
75     PV_MP4_FF_NEW(fp->auditCB, PVA_FF_FontTableAtom, (), _pFontTableAtom);
76 
77 }
78 
79 
addTextDecoderSpecificInfo(PVA_FF_TextSampleDescInfo * pinfo)80 void PVA_FF_TextSampleEntry::addTextDecoderSpecificInfo(PVA_FF_TextSampleDescInfo *pinfo)
81 {
82     _displayFlags = pinfo->display_flags;
83     _horzJustification = pinfo->hJust;
84     _vertJustification = pinfo->vJust;
85 
86     _pBackgroundRGBA = (uint8 *)(OSCL_MALLOC(4 * sizeof(uint8)));
87     _pBackgroundRGBA[0] = pinfo->bkRgba[0];
88     _pBackgroundRGBA[1] = pinfo->bkRgba[1];
89     _pBackgroundRGBA[2] = pinfo->bkRgba[2];
90     _pBackgroundRGBA[3] = pinfo->bkRgba[3];
91 
92     _start_sample_num = pinfo->start_sample_num;
93     _end_sample_num = pinfo->end_sample_num;
94     _sdIndex = pinfo->sdindex;
95 
96     int16 top = pinfo->top;
97     _pBoxRecord->setBoxTop(top);
98 
99     int16 left = pinfo->left;
100     _pBoxRecord->setBoxLeft(left);
101 
102     int16 bottom = pinfo->bottom;
103     _pBoxRecord->setBoxBottom(bottom);
104 
105     int16 right = pinfo->right;
106     _pBoxRecord->setBoxRight(right);
107 
108     uint16 startchar = pinfo->startChar;
109     _pStyleRecord->setStartChar(startchar);
110 
111     uint16 endchar = pinfo->endChar;
112     _pStyleRecord->setEndChar(endchar);
113 
114     uint16 fontid = pinfo->font_id;
115     _pStyleRecord->setFontID(fontid);
116 
117     uint8 fontsize_flag = pinfo->fontSizeFlags;
118     _pStyleRecord->setFontStyleFlags(fontsize_flag);
119 
120     uint8 fontsize = pinfo->fontSize;
121     _pStyleRecord->setFontSize(fontsize);
122 
123     uint8* tRGBA = pinfo->tRgba;
124     _pStyleRecord->setTextColourRGBA(tRGBA);
125 
126     uint16 fontlistsize = pinfo->fontListSize;
127     _pFontTableAtom->setFontListSize(fontlistsize);
128 
129     uint16 Fontlistid = pinfo->fontListID;
130     uint16 FontID = pinfo->fontID;
131     int8 Fontlength = pinfo->font_length;
132     uint8* Fontname = pinfo->font_name;
133     _pFontTableAtom->setFontRecord(Fontlistid, FontID, Fontlength, Fontname);
134 
135 
136 }
137 
138 
139 // Rendering the PVA_FF_Atom in proper format (bitlengths, etc.) to an ostream
renderToFileStream(MP4_AUTHOR_FF_FILE_IO_WRAP * fp)140 bool PVA_FF_TextSampleEntry::renderToFileStream(MP4_AUTHOR_FF_FILE_IO_WRAP *fp)
141 {
142 
143     int32 rendered = 0;
144     if (!renderAtomBaseMembers(fp))
145     {
146         return false;
147     }
148     rendered += getDefaultSize();
149 
150     // From PVA_FF_SampleEntry base class
151     for (int k = 0; k < 6; k++)
152     {
153         if (!PVA_FF_AtomUtils::render8(fp, _reserved[k]))
154         {
155             return false;
156         }
157         rendered += 1;
158     }
159 
160 
161     if (!PVA_FF_AtomUtils::render16(fp, _dataReferenceIndex))
162     {
163         return false;
164     }
165     rendered  += 2;
166     if (!PVA_FF_AtomUtils::render32(fp, _displayFlags))
167     {
168         return false;
169     }
170     rendered  += 4;
171     if (!PVA_FF_AtomUtils::render8(fp, _horzJustification))
172     {
173         return false;
174     }
175     rendered  += 1;
176     if (!PVA_FF_AtomUtils::render8(fp, _vertJustification))
177     {
178         return false;
179     }
180     rendered  += 1;
181     if (!PVA_FF_AtomUtils::renderByteData(fp, 4, (uint8 *)_pBackgroundRGBA))
182     {
183         return false;
184     }
185     rendered  += 4;
186 
187     if (!_pBoxRecord->renderToFileStream(fp))
188     {
189         return false;
190     }
191     rendered += _pBoxRecord->getSize();
192 
193     if (!_pStyleRecord->renderToFileStream(fp))
194     {
195         return false;
196     }
197     rendered += _pStyleRecord->getSize();
198 
199     if (!_pFontTableAtom->renderToFileStream(fp))
200     {
201         return false;
202     }
203     rendered += _pFontTableAtom->getSize();
204     return true;
205 }
206 
recomputeSize()207 void PVA_FF_TextSampleEntry::recomputeSize()
208 {
209     int32 size = getDefaultSize();
210 
211     size += 8; // For reserved and dataRefIndex of PVA_FF_SampleEntry base class
212 
213     size += 4;
214     size += 1;
215     size += 1;
216     size += 4;
217     size += _pBoxRecord->getSize();
218     size += _pStyleRecord->getSize();
219     size += _pFontTableAtom->getSize();
220     _size = size;
221 
222     // Update size of parent
223     if (_pparent != NULL)
224     {
225         _pparent->recomputeSize();
226     }
227 }
228