annotate dirac.h @ 10874:bcfe2acbf190 libavcodec

AAC: Compress codebook tables and optimise sign bit handling The codebooks each consist of small number of values repeated in groups of 2 or 4. Storing the codebooks as a packed list of 2- or 4-bit indexes into a table reduces their size substantially (from 7.5k to 1.5k), resulting in less cache pressure. For the band types with sign bits in the bitstream, storing the number and position of non-zero codebook values using a few bits avoids multiple get_bits() calls and floating-point comparisons which gcc handles miserably. Some float/int type punning also avoids gcc brain damage. Overall speedup 20-35% on Cortex-A8, 20% on Core i7.
author mru
date Wed, 13 Jan 2010 16:46:28 +0000
parents 95dac0e4703b
children 7dd2a45249a9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10838
95dac0e4703b Add a function to parse Dirac's sequence header
conrad
parents:
diff changeset
1 /*
95dac0e4703b Add a function to parse Dirac's sequence header
conrad
parents:
diff changeset
2 * Copyright (C) 2007 Marco Gerards <marco@gnu.org>
95dac0e4703b Add a function to parse Dirac's sequence header
conrad
parents:
diff changeset
3 * Copyright (C) 2009 David Conrad
95dac0e4703b Add a function to parse Dirac's sequence header
conrad
parents:
diff changeset
4 *
95dac0e4703b Add a function to parse Dirac's sequence header
conrad
parents:
diff changeset
5 * This file is part of FFmpeg.
95dac0e4703b Add a function to parse Dirac's sequence header
conrad
parents:
diff changeset
6 *
95dac0e4703b Add a function to parse Dirac's sequence header
conrad
parents:
diff changeset
7 * FFmpeg is free software; you can redistribute it and/or
95dac0e4703b Add a function to parse Dirac's sequence header
conrad
parents:
diff changeset
8 * modify it under the terms of the GNU Lesser General Public
95dac0e4703b Add a function to parse Dirac's sequence header
conrad
parents:
diff changeset
9 * License as published by the Free Software Foundation; either
95dac0e4703b Add a function to parse Dirac's sequence header
conrad
parents:
diff changeset
10 * version 2.1 of the License, or (at your option) any later version.
95dac0e4703b Add a function to parse Dirac's sequence header
conrad
parents:
diff changeset
11 *
95dac0e4703b Add a function to parse Dirac's sequence header
conrad
parents:
diff changeset
12 * FFmpeg is distributed in the hope that it will be useful,
95dac0e4703b Add a function to parse Dirac's sequence header
conrad
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
95dac0e4703b Add a function to parse Dirac's sequence header
conrad
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
95dac0e4703b Add a function to parse Dirac's sequence header
conrad
parents:
diff changeset
15 * Lesser General Public License for more details.
95dac0e4703b Add a function to parse Dirac's sequence header
conrad
parents:
diff changeset
16 *
95dac0e4703b Add a function to parse Dirac's sequence header
conrad
parents:
diff changeset
17 * You should have received a copy of the GNU Lesser General Public
95dac0e4703b Add a function to parse Dirac's sequence header
conrad
parents:
diff changeset
18 * License along with FFmpeg; if not, write to the Free Software
95dac0e4703b Add a function to parse Dirac's sequence header
conrad
parents:
diff changeset
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
95dac0e4703b Add a function to parse Dirac's sequence header
conrad
parents:
diff changeset
20 */
95dac0e4703b Add a function to parse Dirac's sequence header
conrad
parents:
diff changeset
21
95dac0e4703b Add a function to parse Dirac's sequence header
conrad
parents:
diff changeset
22 #ifndef AVCODEC_DIRAC_H
95dac0e4703b Add a function to parse Dirac's sequence header
conrad
parents:
diff changeset
23 #define AVCODEC_DIRAC_H
95dac0e4703b Add a function to parse Dirac's sequence header
conrad
parents:
diff changeset
24
95dac0e4703b Add a function to parse Dirac's sequence header
conrad
parents:
diff changeset
25 /**
95dac0e4703b Add a function to parse Dirac's sequence header
conrad
parents:
diff changeset
26 * @file libavcodec/dirac.h
95dac0e4703b Add a function to parse Dirac's sequence header
conrad
parents:
diff changeset
27 * Interfaces to Dirac Decoder/Encoder
95dac0e4703b Add a function to parse Dirac's sequence header
conrad
parents:
diff changeset
28 * @author Marco Gerards <marco@gnu.org>
95dac0e4703b Add a function to parse Dirac's sequence header
conrad
parents:
diff changeset
29 */
95dac0e4703b Add a function to parse Dirac's sequence header
conrad
parents:
diff changeset
30
95dac0e4703b Add a function to parse Dirac's sequence header
conrad
parents:
diff changeset
31 #include "avcodec.h"
95dac0e4703b Add a function to parse Dirac's sequence header
conrad
parents:
diff changeset
32 #include "get_bits.h"
95dac0e4703b Add a function to parse Dirac's sequence header
conrad
parents:
diff changeset
33
95dac0e4703b Add a function to parse Dirac's sequence header
conrad
parents:
diff changeset
34 typedef struct {
95dac0e4703b Add a function to parse Dirac's sequence header
conrad
parents:
diff changeset
35 unsigned width;
95dac0e4703b Add a function to parse Dirac's sequence header
conrad
parents:
diff changeset
36 unsigned height;
95dac0e4703b Add a function to parse Dirac's sequence header
conrad
parents:
diff changeset
37 uint8_t chroma_format; ///< 0: 444 1: 422 2: 420
95dac0e4703b Add a function to parse Dirac's sequence header
conrad
parents:
diff changeset
38
95dac0e4703b Add a function to parse Dirac's sequence header
conrad
parents:
diff changeset
39 uint8_t interlaced;
95dac0e4703b Add a function to parse Dirac's sequence header
conrad
parents:
diff changeset
40 uint8_t top_field_first;
95dac0e4703b Add a function to parse Dirac's sequence header
conrad
parents:
diff changeset
41
95dac0e4703b Add a function to parse Dirac's sequence header
conrad
parents:
diff changeset
42 uint8_t frame_rate_index; ///< index into dirac_frame_rate[]
95dac0e4703b Add a function to parse Dirac's sequence header
conrad
parents:
diff changeset
43 uint8_t aspect_ratio_index; ///< index into dirac_aspect_ratio[]
95dac0e4703b Add a function to parse Dirac's sequence header
conrad
parents:
diff changeset
44
95dac0e4703b Add a function to parse Dirac's sequence header
conrad
parents:
diff changeset
45 uint16_t clean_width;
95dac0e4703b Add a function to parse Dirac's sequence header
conrad
parents:
diff changeset
46 uint16_t clean_height;
95dac0e4703b Add a function to parse Dirac's sequence header
conrad
parents:
diff changeset
47 uint16_t clean_left_offset;
95dac0e4703b Add a function to parse Dirac's sequence header
conrad
parents:
diff changeset
48 uint16_t clean_right_offset;
95dac0e4703b Add a function to parse Dirac's sequence header
conrad
parents:
diff changeset
49
95dac0e4703b Add a function to parse Dirac's sequence header
conrad
parents:
diff changeset
50 uint8_t pixel_range_index; ///< index into dirac_pixel_range_presets[]
95dac0e4703b Add a function to parse Dirac's sequence header
conrad
parents:
diff changeset
51 uint8_t color_spec_index; ///< index into dirac_color_spec_presets[]
95dac0e4703b Add a function to parse Dirac's sequence header
conrad
parents:
diff changeset
52 } dirac_source_params;
95dac0e4703b Add a function to parse Dirac's sequence header
conrad
parents:
diff changeset
53
95dac0e4703b Add a function to parse Dirac's sequence header
conrad
parents:
diff changeset
54 int ff_dirac_parse_sequence_header(AVCodecContext *avctx, GetBitContext *gb,
95dac0e4703b Add a function to parse Dirac's sequence header
conrad
parents:
diff changeset
55 dirac_source_params *source);
95dac0e4703b Add a function to parse Dirac's sequence header
conrad
parents:
diff changeset
56
95dac0e4703b Add a function to parse Dirac's sequence header
conrad
parents:
diff changeset
57 #endif /* AVCODEC_DIRAC_H */