~ubuntu-branches/ubuntu/quantal/linphone/quantal

« back to all changes in this revision

Viewing changes to ffmpeg/libavcodec/libac3/bitstream.c

  • Committer: Bazaar Package Importer
  • Author(s): Samuel Mimram
  • Date: 2006-11-15 10:34:50 UTC
  • mfrom: (1.2.1 upstream) (2.1.8 feisty)
  • Revision ID: james.westby@ubuntu.com-20061115103450-qgafwcks2lkhctlj
* New upstream release.
* Enable video support.
* Fix mismatched #endif in mscommon.h, closes: #398307.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/* 
2
 
 *  bitstream.c
3
 
 *
4
 
 *      Copyright (C) Aaron Holtzman - Dec 1999
5
 
 *
6
 
 *  This file is part of ac3dec, a free AC-3 audio decoder
7
 
 *      
8
 
 *  ac3dec is free software; you can redistribute it and/or modify
9
 
 *  it under the terms of the GNU General Public License as published by
10
 
 *  the Free Software Foundation; either version 2, or (at your option)
11
 
 *  any later version.
12
 
 *   
13
 
 *  ac3dec is distributed in the hope that it will be useful,
14
 
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
15
 
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
 
 *  GNU General Public License for more details.
17
 
 *   
18
 
 *  You should have received a copy of the GNU General Public License
19
 
 *  along with GNU Make; see the file COPYING.  If not, write to
20
 
 *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. 
21
 
 *
22
 
 */
23
 
 
24
 
#include "../common.h"
25
 
#include "ac3.h"
26
 
#include "ac3_internal.h"
27
 
#include "bitstream.h"
28
 
 
29
 
#define BUFFER_SIZE 4096
30
 
 
31
 
static uint8_t *buffer_start;
32
 
 
33
 
uint32_t bits_left;
34
 
uint32_t current_word;
35
 
 
36
 
void bitstream_set_ptr (uint8_t * buf)
37
 
{
38
 
    buffer_start = buf;
39
 
    bits_left = 0;
40
 
}
41
 
 
42
 
static inline void
43
 
bitstream_fill_current()
44
 
{
45
 
    current_word = *((uint32_t*)buffer_start)++;
46
 
    current_word = swab32(current_word);
47
 
}
48
 
 
49
 
//
50
 
// The fast paths for _get is in the
51
 
// bitstream.h header file so it can be inlined.
52
 
//
53
 
// The "bottom half" of this routine is suffixed _bh
54
 
//
55
 
// -ah
56
 
//
57
 
 
58
 
uint32_t
59
 
bitstream_get_bh(uint32_t num_bits)
60
 
{
61
 
    uint32_t result;
62
 
 
63
 
    num_bits -= bits_left;
64
 
    result = (current_word << (32 - bits_left)) >> (32 - bits_left);
65
 
 
66
 
    bitstream_fill_current();
67
 
 
68
 
    if(num_bits != 0)
69
 
        result = (result << num_bits) | (current_word >> (32 - num_bits));
70
 
        
71
 
    bits_left = 32 - num_bits;
72
 
 
73
 
    return result;
74
 
}