~ubuntu-branches/ubuntu/karmic/flac/karmic

« back to all changes in this revision

Viewing changes to src/libFLAC/stream_encoder_framing.c

  • Committer: Bazaar Package Importer
  • Author(s): Matt Zimmerman
  • Date: 2005-01-08 15:08:22 UTC
  • mto: (8.1.1 lenny)
  • mto: This revision was merged to the branch mainline in revision 4.
  • Revision ID: james.westby@ubuntu.com-20050108150822-yvinilrafylazcyv
Tags: upstream-1.1.1
ImportĀ upstreamĀ versionĀ 1.1.1

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
/* libFLAC - Free Lossless Audio Codec library
2
 
 * Copyright (C) 2000,2001,2002,2003  Josh Coalson
3
 
 *
4
 
 * This library is free software; you can redistribute it and/or
5
 
 * modify it under the terms of the GNU Library General Public
6
 
 * License as published by the Free Software Foundation; either
7
 
 * version 2 of the License, or (at your option) any later version.
8
 
 *
9
 
 * This library is distributed in the hope that it will be useful,
10
 
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11
 
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12
 
 * Library General Public License for more details.
13
 
 *
14
 
 * You should have received a copy of the GNU Library General Public
15
 
 * License along with this library; if not, write to the
16
 
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17
 
 * Boston, MA  02111-1307, USA.
 
2
 * Copyright (C) 2000,2001,2002,2003,2004  Josh Coalson
 
3
 *
 
4
 * Redistribution and use in source and binary forms, with or without
 
5
 * modification, are permitted provided that the following conditions
 
6
 * are met:
 
7
 *
 
8
 * - Redistributions of source code must retain the above copyright
 
9
 * notice, this list of conditions and the following disclaimer.
 
10
 *
 
11
 * - Redistributions in binary form must reproduce the above copyright
 
12
 * notice, this list of conditions and the following disclaimer in the
 
13
 * documentation and/or other materials provided with the distribution.
 
14
 *
 
15
 * - Neither the name of the Xiph.org Foundation nor the names of its
 
16
 * contributors may be used to endorse or promote products derived from
 
17
 * this software without specific prior written permission.
 
18
 *
 
19
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 
20
 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 
21
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 
22
 * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
 
23
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 
24
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 
25
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 
26
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 
27
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 
28
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 
29
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
18
30
 */
19
31
 
20
32
#include <stdio.h>
171
183
        return true;
172
184
}
173
185
 
174
 
FLAC__bool FLAC__frame_add_header(const FLAC__FrameHeader *header, FLAC__bool streamable_subset, FLAC__bool is_last_block, FLAC__BitBuffer *bb)
 
186
FLAC__bool FLAC__frame_add_header(const FLAC__FrameHeader *header, FLAC__bool streamable_subset, FLAC__BitBuffer *bb)
175
187
{
176
188
        unsigned u, blocksize_hint, sample_rate_hint;
177
189
 
184
196
                return false;
185
197
 
186
198
        FLAC__ASSERT(header->blocksize > 0 && header->blocksize <= FLAC__MAX_BLOCK_SIZE);
 
199
        /* when this assertion holds true, any legal blocksize can be expressed in the frame header */
 
200
        FLAC__ASSERT(FLAC__MAX_BLOCK_SIZE <= 65535u);
187
201
        blocksize_hint = 0;
188
202
        switch(header->blocksize) {
189
203
                case   192: u = 1; break;
200
214
                case 16384: u = 14; break;
201
215
                case 32768: u = 15; break;
202
216
                default:
203
 
                        if(streamable_subset || is_last_block) {
204
 
                                if(header->blocksize <= 0x100)
205
 
                                        blocksize_hint = u = 6;
206
 
                                else
207
 
                                        blocksize_hint = u = 7;
 
217
                        if(header->blocksize <= 0x100)
 
218
                                blocksize_hint = u = 6;
 
219
                        else if(header->blocksize <= 0x10000)
 
220
                                blocksize_hint = u = 7;
 
221
                        else {
 
222
                                FLAC__ASSERT(0);
 
223
                                return false;
208
224
                        }
209
 
                        else
210
 
                                u = 0;
211
225
                        break;
212
226
        }
213
227
        if(!FLAC__bitbuffer_write_raw_uint32(bb, u, FLAC__FRAME_HEADER_BLOCK_SIZE_LEN))
225
239
                case 48000: u = 10; break;
226
240
                case 96000: u = 11; break;
227
241
                default:
228
 
                        if(streamable_subset) {
229
 
                                if(header->sample_rate % 1000 == 0)
230
 
                                        sample_rate_hint = u = 12;
231
 
                                else if(header->sample_rate % 10 == 0)
232
 
                                        sample_rate_hint = u = 14;
233
 
                                else
234
 
                                        sample_rate_hint = u = 13;
 
242
                        if(header->sample_rate <= 255000 && header->sample_rate % 1000 == 0)
 
243
                                sample_rate_hint = u = 12;
 
244
                        else if(header->sample_rate % 10 == 0)
 
245
                                sample_rate_hint = u = 14;
 
246
                        else if(header->sample_rate <= 0xffff)
 
247
                                sample_rate_hint = u = 13;
 
248
                        else if(streamable_subset) {
 
249
                                FLAC__ASSERT(0);
 
250
                                return false;
235
251
                        }
236
252
                        else
237
253
                                u = 0;