~ubuntu-branches/ubuntu/raring/flac/raring

« back to all changes in this revision

Viewing changes to src/libFLAC/stream_encoder_framing.c

  • Committer: Bazaar Package Importer
  • Author(s): Joshua Kwan
  • Date: 2007-05-29 22:56:36 UTC
  • mfrom: (1.1.4 upstream)
  • Revision ID: james.westby@ubuntu.com-20070529225636-ljeff8xxip09qaap
Tags: 1.1.4-1
* New upstream release. closes: #405167, #411311
  - libOggFLAC and libOggFLAC++ have been merged into libFLAC, so
    remove their corresponding packages.
  - Because of the API changes required to effect the above, there has
    been yet another soname bump. libflac7 -> libflac8 and
    libflac++5 -> libflac++6. Emails have been dispatched to the
    maintainers of dependent packages.
* Some notes on patches that were removed:
  - 02_stdin_stdout, 06_manpage_mention_utf8_convert: merged upstream
  - 08_manpage_warnings: Upstream has changed the manpage so it defintely
    can't fit in in 80 cols, so just forget about it. We'll live.
  - 05_eof_warnings_are_errors: Upstream decided to add a -w option to
    flac to treat all warnings as errors. I am going to defer to that
    for now, but if people think it's stupid let me know and I'll port
    the patch forward.
  - 04_stack_smasher: was a backport from 1.1.3, so it's obsolete.

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,2004,2005  Josh Coalson
 
2
 * Copyright (C) 2000,2001,2002,2003,2004,2005,2006,2007  Josh Coalson
3
3
 *
4
4
 * Redistribution and use in source and binary forms, with or without
5
5
 * modification, are permitted provided that the following conditions
29
29
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
30
 */
31
31
 
 
32
#if HAVE_CONFIG_H
 
33
#  include <config.h>
 
34
#endif
 
35
 
32
36
#include <stdio.h>
33
37
#include <string.h> /* for strlen() */
34
38
#include "private/stream_encoder_framing.h"
40
44
#endif
41
45
#define max(x,y) ((x)>(y)?(x):(y))
42
46
 
43
 
static FLAC__bool add_entropy_coding_method_(FLAC__BitBuffer *bb, const FLAC__EntropyCodingMethod *method);
44
 
static FLAC__bool add_residual_partitioned_rice_(FLAC__BitBuffer *bb, const FLAC__int32 residual[], const unsigned residual_samples, const unsigned predictor_order, const unsigned rice_parameters[], const unsigned raw_bits[], const unsigned partition_order);
 
47
static FLAC__bool add_entropy_coding_method_(FLAC__BitWriter *bw, const FLAC__EntropyCodingMethod *method);
 
48
static FLAC__bool add_residual_partitioned_rice_(FLAC__BitWriter *bw, const FLAC__int32 residual[], const unsigned residual_samples, const unsigned predictor_order, const unsigned rice_parameters[], const unsigned raw_bits[], const unsigned partition_order);
45
49
 
46
 
FLAC__bool FLAC__add_metadata_block(const FLAC__StreamMetadata *metadata, FLAC__BitBuffer *bb)
 
50
FLAC__bool FLAC__add_metadata_block(const FLAC__StreamMetadata *metadata, FLAC__BitWriter *bw)
47
51
{
48
52
        unsigned i, j;
49
53
        const unsigned vendor_string_length = (unsigned)strlen(FLAC__VENDOR_STRING);
50
54
 
51
 
        if(!FLAC__bitbuffer_write_raw_uint32(bb, metadata->is_last, FLAC__STREAM_METADATA_IS_LAST_LEN))
 
55
        if(!FLAC__bitwriter_write_raw_uint32(bw, metadata->is_last, FLAC__STREAM_METADATA_IS_LAST_LEN))
52
56
                return false;
53
57
 
54
 
        if(!FLAC__bitbuffer_write_raw_uint32(bb, metadata->type, FLAC__STREAM_METADATA_TYPE_LEN))
 
58
        if(!FLAC__bitwriter_write_raw_uint32(bw, metadata->type, FLAC__STREAM_METADATA_TYPE_LEN))
55
59
                return false;
56
60
 
57
61
        /*
64
68
                i += vendor_string_length;
65
69
        }
66
70
        FLAC__ASSERT(i < (1u << FLAC__STREAM_METADATA_LENGTH_LEN));
67
 
        if(!FLAC__bitbuffer_write_raw_uint32(bb, i, FLAC__STREAM_METADATA_LENGTH_LEN))
 
71
        if(!FLAC__bitwriter_write_raw_uint32(bw, i, FLAC__STREAM_METADATA_LENGTH_LEN))
68
72
                return false;
69
73
 
70
74
        switch(metadata->type) {
71
75
                case FLAC__METADATA_TYPE_STREAMINFO:
72
76
                        FLAC__ASSERT(metadata->data.stream_info.min_blocksize < (1u << FLAC__STREAM_METADATA_STREAMINFO_MIN_BLOCK_SIZE_LEN));
73
 
                        if(!FLAC__bitbuffer_write_raw_uint32(bb, metadata->data.stream_info.min_blocksize, FLAC__STREAM_METADATA_STREAMINFO_MIN_BLOCK_SIZE_LEN))
 
77
                        if(!FLAC__bitwriter_write_raw_uint32(bw, metadata->data.stream_info.min_blocksize, FLAC__STREAM_METADATA_STREAMINFO_MIN_BLOCK_SIZE_LEN))
74
78
                                return false;
75
79
                        FLAC__ASSERT(metadata->data.stream_info.max_blocksize < (1u << FLAC__STREAM_METADATA_STREAMINFO_MAX_BLOCK_SIZE_LEN));
76
 
                        if(!FLAC__bitbuffer_write_raw_uint32(bb, metadata->data.stream_info.max_blocksize, FLAC__STREAM_METADATA_STREAMINFO_MAX_BLOCK_SIZE_LEN))
 
80
                        if(!FLAC__bitwriter_write_raw_uint32(bw, metadata->data.stream_info.max_blocksize, FLAC__STREAM_METADATA_STREAMINFO_MAX_BLOCK_SIZE_LEN))
77
81
                                return false;
78
82
                        FLAC__ASSERT(metadata->data.stream_info.min_framesize < (1u << FLAC__STREAM_METADATA_STREAMINFO_MIN_FRAME_SIZE_LEN));
79
 
                        if(!FLAC__bitbuffer_write_raw_uint32(bb, metadata->data.stream_info.min_framesize, FLAC__STREAM_METADATA_STREAMINFO_MIN_FRAME_SIZE_LEN))
 
83
                        if(!FLAC__bitwriter_write_raw_uint32(bw, metadata->data.stream_info.min_framesize, FLAC__STREAM_METADATA_STREAMINFO_MIN_FRAME_SIZE_LEN))
80
84
                                return false;
81
85
                        FLAC__ASSERT(metadata->data.stream_info.max_framesize < (1u << FLAC__STREAM_METADATA_STREAMINFO_MAX_FRAME_SIZE_LEN));
82
 
                        if(!FLAC__bitbuffer_write_raw_uint32(bb, metadata->data.stream_info.max_framesize, FLAC__STREAM_METADATA_STREAMINFO_MAX_FRAME_SIZE_LEN))
 
86
                        if(!FLAC__bitwriter_write_raw_uint32(bw, metadata->data.stream_info.max_framesize, FLAC__STREAM_METADATA_STREAMINFO_MAX_FRAME_SIZE_LEN))
83
87
                                return false;
84
88
                        FLAC__ASSERT(FLAC__format_sample_rate_is_valid(metadata->data.stream_info.sample_rate));
85
 
                        if(!FLAC__bitbuffer_write_raw_uint32(bb, metadata->data.stream_info.sample_rate, FLAC__STREAM_METADATA_STREAMINFO_SAMPLE_RATE_LEN))
 
89
                        if(!FLAC__bitwriter_write_raw_uint32(bw, metadata->data.stream_info.sample_rate, FLAC__STREAM_METADATA_STREAMINFO_SAMPLE_RATE_LEN))
86
90
                                return false;
87
91
                        FLAC__ASSERT(metadata->data.stream_info.channels > 0);
88
92
                        FLAC__ASSERT(metadata->data.stream_info.channels <= (1u << FLAC__STREAM_METADATA_STREAMINFO_CHANNELS_LEN));
89
 
                        if(!FLAC__bitbuffer_write_raw_uint32(bb, metadata->data.stream_info.channels-1, FLAC__STREAM_METADATA_STREAMINFO_CHANNELS_LEN))
 
93
                        if(!FLAC__bitwriter_write_raw_uint32(bw, metadata->data.stream_info.channels-1, FLAC__STREAM_METADATA_STREAMINFO_CHANNELS_LEN))
90
94
                                return false;
91
95
                        FLAC__ASSERT(metadata->data.stream_info.bits_per_sample > 0);
92
96
                        FLAC__ASSERT(metadata->data.stream_info.bits_per_sample <= (1u << FLAC__STREAM_METADATA_STREAMINFO_BITS_PER_SAMPLE_LEN));
93
 
                        if(!FLAC__bitbuffer_write_raw_uint32(bb, metadata->data.stream_info.bits_per_sample-1, FLAC__STREAM_METADATA_STREAMINFO_BITS_PER_SAMPLE_LEN))
94
 
                                return false;
95
 
                        if(!FLAC__bitbuffer_write_raw_uint64(bb, metadata->data.stream_info.total_samples, FLAC__STREAM_METADATA_STREAMINFO_TOTAL_SAMPLES_LEN))
96
 
                                return false;
97
 
                        if(!FLAC__bitbuffer_write_byte_block(bb, metadata->data.stream_info.md5sum, 16))
 
97
                        if(!FLAC__bitwriter_write_raw_uint32(bw, metadata->data.stream_info.bits_per_sample-1, FLAC__STREAM_METADATA_STREAMINFO_BITS_PER_SAMPLE_LEN))
 
98
                                return false;
 
99
                        if(!FLAC__bitwriter_write_raw_uint64(bw, metadata->data.stream_info.total_samples, FLAC__STREAM_METADATA_STREAMINFO_TOTAL_SAMPLES_LEN))
 
100
                                return false;
 
101
                        if(!FLAC__bitwriter_write_byte_block(bw, metadata->data.stream_info.md5sum, 16))
98
102
                                return false;
99
103
                        break;
100
104
                case FLAC__METADATA_TYPE_PADDING:
101
 
                        if(!FLAC__bitbuffer_write_zeroes(bb, metadata->length * 8))
 
105
                        if(!FLAC__bitwriter_write_zeroes(bw, metadata->length * 8))
102
106
                                return false;
103
107
                        break;
104
108
                case FLAC__METADATA_TYPE_APPLICATION:
105
 
                        if(!FLAC__bitbuffer_write_byte_block(bb, metadata->data.application.id, FLAC__STREAM_METADATA_APPLICATION_ID_LEN / 8))
 
109
                        if(!FLAC__bitwriter_write_byte_block(bw, metadata->data.application.id, FLAC__STREAM_METADATA_APPLICATION_ID_LEN / 8))
106
110
                                return false;
107
 
                        if(!FLAC__bitbuffer_write_byte_block(bb, metadata->data.application.data, metadata->length - (FLAC__STREAM_METADATA_APPLICATION_ID_LEN / 8)))
 
111
                        if(!FLAC__bitwriter_write_byte_block(bw, metadata->data.application.data, metadata->length - (FLAC__STREAM_METADATA_APPLICATION_ID_LEN / 8)))
108
112
                                return false;
109
113
                        break;
110
114
                case FLAC__METADATA_TYPE_SEEKTABLE:
111
115
                        for(i = 0; i < metadata->data.seek_table.num_points; i++) {
112
 
                                if(!FLAC__bitbuffer_write_raw_uint64(bb, metadata->data.seek_table.points[i].sample_number, FLAC__STREAM_METADATA_SEEKPOINT_SAMPLE_NUMBER_LEN))
113
 
                                        return false;
114
 
                                if(!FLAC__bitbuffer_write_raw_uint64(bb, metadata->data.seek_table.points[i].stream_offset, FLAC__STREAM_METADATA_SEEKPOINT_STREAM_OFFSET_LEN))
115
 
                                        return false;
116
 
                                if(!FLAC__bitbuffer_write_raw_uint32(bb, metadata->data.seek_table.points[i].frame_samples, FLAC__STREAM_METADATA_SEEKPOINT_FRAME_SAMPLES_LEN))
 
116
                                if(!FLAC__bitwriter_write_raw_uint64(bw, metadata->data.seek_table.points[i].sample_number, FLAC__STREAM_METADATA_SEEKPOINT_SAMPLE_NUMBER_LEN))
 
117
                                        return false;
 
118
                                if(!FLAC__bitwriter_write_raw_uint64(bw, metadata->data.seek_table.points[i].stream_offset, FLAC__STREAM_METADATA_SEEKPOINT_STREAM_OFFSET_LEN))
 
119
                                        return false;
 
120
                                if(!FLAC__bitwriter_write_raw_uint32(bw, metadata->data.seek_table.points[i].frame_samples, FLAC__STREAM_METADATA_SEEKPOINT_FRAME_SAMPLES_LEN))
117
121
                                        return false;
118
122
                        }
119
123
                        break;
120
124
                case FLAC__METADATA_TYPE_VORBIS_COMMENT:
121
 
                        if(!FLAC__bitbuffer_write_raw_uint32_little_endian(bb, vendor_string_length))
122
 
                                return false;
123
 
                        if(!FLAC__bitbuffer_write_byte_block(bb, (const FLAC__byte*)FLAC__VENDOR_STRING, vendor_string_length))
124
 
                                return false;
125
 
                        if(!FLAC__bitbuffer_write_raw_uint32_little_endian(bb, metadata->data.vorbis_comment.num_comments))
 
125
                        if(!FLAC__bitwriter_write_raw_uint32_little_endian(bw, vendor_string_length))
 
126
                                return false;
 
127
                        if(!FLAC__bitwriter_write_byte_block(bw, (const FLAC__byte*)FLAC__VENDOR_STRING, vendor_string_length))
 
128
                                return false;
 
129
                        if(!FLAC__bitwriter_write_raw_uint32_little_endian(bw, metadata->data.vorbis_comment.num_comments))
126
130
                                return false;
127
131
                        for(i = 0; i < metadata->data.vorbis_comment.num_comments; i++) {
128
 
                                if(!FLAC__bitbuffer_write_raw_uint32_little_endian(bb, metadata->data.vorbis_comment.comments[i].length))
 
132
                                if(!FLAC__bitwriter_write_raw_uint32_little_endian(bw, metadata->data.vorbis_comment.comments[i].length))
129
133
                                        return false;
130
 
                                if(!FLAC__bitbuffer_write_byte_block(bb, metadata->data.vorbis_comment.comments[i].entry, metadata->data.vorbis_comment.comments[i].length))
 
134
                                if(!FLAC__bitwriter_write_byte_block(bw, metadata->data.vorbis_comment.comments[i].entry, metadata->data.vorbis_comment.comments[i].length))
131
135
                                        return false;
132
136
                        }
133
137
                        break;
134
138
                case FLAC__METADATA_TYPE_CUESHEET:
135
139
                        FLAC__ASSERT(FLAC__STREAM_METADATA_CUESHEET_MEDIA_CATALOG_NUMBER_LEN % 8 == 0);
136
 
                        if(!FLAC__bitbuffer_write_byte_block(bb, (const FLAC__byte*)metadata->data.cue_sheet.media_catalog_number, FLAC__STREAM_METADATA_CUESHEET_MEDIA_CATALOG_NUMBER_LEN/8))
137
 
                                return false;
138
 
                        if(!FLAC__bitbuffer_write_raw_uint64(bb, metadata->data.cue_sheet.lead_in, FLAC__STREAM_METADATA_CUESHEET_LEAD_IN_LEN))
139
 
                                return false;
140
 
                        if(!FLAC__bitbuffer_write_raw_uint32(bb, metadata->data.cue_sheet.is_cd? 1 : 0, FLAC__STREAM_METADATA_CUESHEET_IS_CD_LEN))
141
 
                                return false;
142
 
                        if(!FLAC__bitbuffer_write_zeroes(bb, FLAC__STREAM_METADATA_CUESHEET_RESERVED_LEN))
143
 
                                return false;
144
 
                        if(!FLAC__bitbuffer_write_raw_uint32(bb, metadata->data.cue_sheet.num_tracks, FLAC__STREAM_METADATA_CUESHEET_NUM_TRACKS_LEN))
 
140
                        if(!FLAC__bitwriter_write_byte_block(bw, (const FLAC__byte*)metadata->data.cue_sheet.media_catalog_number, FLAC__STREAM_METADATA_CUESHEET_MEDIA_CATALOG_NUMBER_LEN/8))
 
141
                                return false;
 
142
                        if(!FLAC__bitwriter_write_raw_uint64(bw, metadata->data.cue_sheet.lead_in, FLAC__STREAM_METADATA_CUESHEET_LEAD_IN_LEN))
 
143
                                return false;
 
144
                        if(!FLAC__bitwriter_write_raw_uint32(bw, metadata->data.cue_sheet.is_cd? 1 : 0, FLAC__STREAM_METADATA_CUESHEET_IS_CD_LEN))
 
145
                                return false;
 
146
                        if(!FLAC__bitwriter_write_zeroes(bw, FLAC__STREAM_METADATA_CUESHEET_RESERVED_LEN))
 
147
                                return false;
 
148
                        if(!FLAC__bitwriter_write_raw_uint32(bw, metadata->data.cue_sheet.num_tracks, FLAC__STREAM_METADATA_CUESHEET_NUM_TRACKS_LEN))
145
149
                                return false;
146
150
                        for(i = 0; i < metadata->data.cue_sheet.num_tracks; i++) {
147
151
                                const FLAC__StreamMetadata_CueSheet_Track *track = metadata->data.cue_sheet.tracks + i;
148
152
 
149
 
                                if(!FLAC__bitbuffer_write_raw_uint64(bb, track->offset, FLAC__STREAM_METADATA_CUESHEET_TRACK_OFFSET_LEN))
 
153
                                if(!FLAC__bitwriter_write_raw_uint64(bw, track->offset, FLAC__STREAM_METADATA_CUESHEET_TRACK_OFFSET_LEN))
150
154
                                        return false;
151
 
                                if(!FLAC__bitbuffer_write_raw_uint32(bb, track->number, FLAC__STREAM_METADATA_CUESHEET_TRACK_NUMBER_LEN))
 
155
                                if(!FLAC__bitwriter_write_raw_uint32(bw, track->number, FLAC__STREAM_METADATA_CUESHEET_TRACK_NUMBER_LEN))
152
156
                                        return false;
153
157
                                FLAC__ASSERT(FLAC__STREAM_METADATA_CUESHEET_TRACK_ISRC_LEN % 8 == 0);
154
 
                                if(!FLAC__bitbuffer_write_byte_block(bb, (const FLAC__byte*)track->isrc, FLAC__STREAM_METADATA_CUESHEET_TRACK_ISRC_LEN/8))
155
 
                                        return false;
156
 
                                if(!FLAC__bitbuffer_write_raw_uint32(bb, track->type, FLAC__STREAM_METADATA_CUESHEET_TRACK_TYPE_LEN))
157
 
                                        return false;
158
 
                                if(!FLAC__bitbuffer_write_raw_uint32(bb, track->pre_emphasis, FLAC__STREAM_METADATA_CUESHEET_TRACK_PRE_EMPHASIS_LEN))
159
 
                                        return false;
160
 
                                if(!FLAC__bitbuffer_write_zeroes(bb, FLAC__STREAM_METADATA_CUESHEET_TRACK_RESERVED_LEN))
161
 
                                        return false;
162
 
                                if(!FLAC__bitbuffer_write_raw_uint32(bb, track->num_indices, FLAC__STREAM_METADATA_CUESHEET_TRACK_NUM_INDICES_LEN))
 
158
                                if(!FLAC__bitwriter_write_byte_block(bw, (const FLAC__byte*)track->isrc, FLAC__STREAM_METADATA_CUESHEET_TRACK_ISRC_LEN/8))
 
159
                                        return false;
 
160
                                if(!FLAC__bitwriter_write_raw_uint32(bw, track->type, FLAC__STREAM_METADATA_CUESHEET_TRACK_TYPE_LEN))
 
161
                                        return false;
 
162
                                if(!FLAC__bitwriter_write_raw_uint32(bw, track->pre_emphasis, FLAC__STREAM_METADATA_CUESHEET_TRACK_PRE_EMPHASIS_LEN))
 
163
                                        return false;
 
164
                                if(!FLAC__bitwriter_write_zeroes(bw, FLAC__STREAM_METADATA_CUESHEET_TRACK_RESERVED_LEN))
 
165
                                        return false;
 
166
                                if(!FLAC__bitwriter_write_raw_uint32(bw, track->num_indices, FLAC__STREAM_METADATA_CUESHEET_TRACK_NUM_INDICES_LEN))
163
167
                                        return false;
164
168
                                for(j = 0; j < track->num_indices; j++) {
165
169
                                        const FLAC__StreamMetadata_CueSheet_Index *index = track->indices + j;
166
170
 
167
 
                                        if(!FLAC__bitbuffer_write_raw_uint64(bb, index->offset, FLAC__STREAM_METADATA_CUESHEET_INDEX_OFFSET_LEN))
168
 
                                                return false;
169
 
                                        if(!FLAC__bitbuffer_write_raw_uint32(bb, index->number, FLAC__STREAM_METADATA_CUESHEET_INDEX_NUMBER_LEN))
170
 
                                                return false;
171
 
                                        if(!FLAC__bitbuffer_write_zeroes(bb, FLAC__STREAM_METADATA_CUESHEET_INDEX_RESERVED_LEN))
 
171
                                        if(!FLAC__bitwriter_write_raw_uint64(bw, index->offset, FLAC__STREAM_METADATA_CUESHEET_INDEX_OFFSET_LEN))
 
172
                                                return false;
 
173
                                        if(!FLAC__bitwriter_write_raw_uint32(bw, index->number, FLAC__STREAM_METADATA_CUESHEET_INDEX_NUMBER_LEN))
 
174
                                                return false;
 
175
                                        if(!FLAC__bitwriter_write_zeroes(bw, FLAC__STREAM_METADATA_CUESHEET_INDEX_RESERVED_LEN))
172
176
                                                return false;
173
177
                                }
174
178
                        }
175
179
                        break;
 
180
                case FLAC__METADATA_TYPE_PICTURE:
 
181
                        {
 
182
                                size_t len;
 
183
                                if(!FLAC__bitwriter_write_raw_uint32(bw, metadata->data.picture.type, FLAC__STREAM_METADATA_PICTURE_TYPE_LEN))
 
184
                                        return false;
 
185
                                len = strlen(metadata->data.picture.mime_type);
 
186
                                if(!FLAC__bitwriter_write_raw_uint32(bw, len, FLAC__STREAM_METADATA_PICTURE_MIME_TYPE_LENGTH_LEN))
 
187
                                        return false;
 
188
                                if(!FLAC__bitwriter_write_byte_block(bw, (const FLAC__byte*)metadata->data.picture.mime_type, len))
 
189
                                        return false;
 
190
                                len = strlen((const char *)metadata->data.picture.description);
 
191
                                if(!FLAC__bitwriter_write_raw_uint32(bw, len, FLAC__STREAM_METADATA_PICTURE_DESCRIPTION_LENGTH_LEN))
 
192
                                        return false;
 
193
                                if(!FLAC__bitwriter_write_byte_block(bw, metadata->data.picture.description, len))
 
194
                                        return false;
 
195
                                if(!FLAC__bitwriter_write_raw_uint32(bw, metadata->data.picture.width, FLAC__STREAM_METADATA_PICTURE_WIDTH_LEN))
 
196
                                        return false;
 
197
                                if(!FLAC__bitwriter_write_raw_uint32(bw, metadata->data.picture.height, FLAC__STREAM_METADATA_PICTURE_HEIGHT_LEN))
 
198
                                        return false;
 
199
                                if(!FLAC__bitwriter_write_raw_uint32(bw, metadata->data.picture.depth, FLAC__STREAM_METADATA_PICTURE_DEPTH_LEN))
 
200
                                        return false;
 
201
                                if(!FLAC__bitwriter_write_raw_uint32(bw, metadata->data.picture.colors, FLAC__STREAM_METADATA_PICTURE_COLORS_LEN))
 
202
                                        return false;
 
203
                                if(!FLAC__bitwriter_write_raw_uint32(bw, metadata->data.picture.data_length, FLAC__STREAM_METADATA_PICTURE_DATA_LENGTH_LEN))
 
204
                                        return false;
 
205
                                if(!FLAC__bitwriter_write_byte_block(bw, metadata->data.picture.data, metadata->data.picture.data_length))
 
206
                                        return false;
 
207
                        }
 
208
                        break;
176
209
                default:
177
 
                        if(!FLAC__bitbuffer_write_byte_block(bb, metadata->data.unknown.data, metadata->length))
 
210
                        if(!FLAC__bitwriter_write_byte_block(bw, metadata->data.unknown.data, metadata->length))
178
211
                                return false;
179
212
                        break;
180
213
        }
181
214
 
182
 
        FLAC__ASSERT(FLAC__bitbuffer_is_byte_aligned(bb));
 
215
        FLAC__ASSERT(FLAC__bitwriter_is_byte_aligned(bw));
183
216
        return true;
184
217
}
185
218
 
186
 
FLAC__bool FLAC__frame_add_header(const FLAC__FrameHeader *header, FLAC__bool streamable_subset, FLAC__BitBuffer *bb)
 
219
FLAC__bool FLAC__frame_add_header(const FLAC__FrameHeader *header, FLAC__BitWriter *bw)
187
220
{
188
221
        unsigned u, blocksize_hint, sample_rate_hint;
189
 
 
190
 
        FLAC__ASSERT(FLAC__bitbuffer_is_byte_aligned(bb));
191
 
 
192
 
        if(!FLAC__bitbuffer_write_raw_uint32(bb, FLAC__FRAME_HEADER_SYNC, FLAC__FRAME_HEADER_SYNC_LEN))
 
222
        FLAC__byte crc;
 
223
 
 
224
        FLAC__ASSERT(FLAC__bitwriter_is_byte_aligned(bw));
 
225
 
 
226
        if(!FLAC__bitwriter_write_raw_uint32(bw, FLAC__FRAME_HEADER_SYNC, FLAC__FRAME_HEADER_SYNC_LEN))
193
227
                return false;
194
228
 
195
 
        if(!FLAC__bitbuffer_write_raw_uint32(bb, 0, FLAC__FRAME_HEADER_RESERVED_LEN))
 
229
        if(!FLAC__bitwriter_write_raw_uint32(bw, 0, FLAC__FRAME_HEADER_RESERVED_LEN))
196
230
                return false;
197
231
 
198
232
        FLAC__ASSERT(header->blocksize > 0 && header->blocksize <= FLAC__MAX_BLOCK_SIZE);
218
252
                                blocksize_hint = u = 6;
219
253
                        else if(header->blocksize <= 0x10000)
220
254
                                blocksize_hint = u = 7;
221
 
                        else {
222
 
                                FLAC__ASSERT(0);
223
 
                                return false;
224
 
                        }
 
255
                        else
 
256
                                u = 0;
225
257
                        break;
226
258
        }
227
 
        if(!FLAC__bitbuffer_write_raw_uint32(bb, u, FLAC__FRAME_HEADER_BLOCK_SIZE_LEN))
 
259
        if(!FLAC__bitwriter_write_raw_uint32(bw, u, FLAC__FRAME_HEADER_BLOCK_SIZE_LEN))
228
260
                return false;
229
261
 
230
262
        FLAC__ASSERT(FLAC__format_sample_rate_is_valid(header->sample_rate));
245
277
                                sample_rate_hint = u = 14;
246
278
                        else if(header->sample_rate <= 0xffff)
247
279
                                sample_rate_hint = u = 13;
248
 
                        else if(streamable_subset) {
249
 
                                FLAC__ASSERT(0);
250
 
                                return false;
251
 
                        }
252
280
                        else
253
281
                                u = 0;
254
282
                        break;
255
283
        }
256
 
        if(!FLAC__bitbuffer_write_raw_uint32(bb, u, FLAC__FRAME_HEADER_SAMPLE_RATE_LEN))
 
284
        if(!FLAC__bitwriter_write_raw_uint32(bw, u, FLAC__FRAME_HEADER_SAMPLE_RATE_LEN))
257
285
                return false;
258
286
 
259
287
        FLAC__ASSERT(header->channels > 0 && header->channels <= (1u << FLAC__STREAM_METADATA_STREAMINFO_CHANNELS_LEN) && header->channels <= FLAC__MAX_CHANNELS);
276
304
                default:
277
305
                        FLAC__ASSERT(0);
278
306
        }
279
 
        if(!FLAC__bitbuffer_write_raw_uint32(bb, u, FLAC__FRAME_HEADER_CHANNEL_ASSIGNMENT_LEN))
 
307
        if(!FLAC__bitwriter_write_raw_uint32(bw, u, FLAC__FRAME_HEADER_CHANNEL_ASSIGNMENT_LEN))
280
308
                return false;
281
309
 
282
310
        FLAC__ASSERT(header->bits_per_sample > 0 && header->bits_per_sample <= (1u << FLAC__STREAM_METADATA_STREAMINFO_BITS_PER_SAMPLE_LEN));
288
316
                case 24: u = 6; break;
289
317
                default: u = 0; break;
290
318
        }
291
 
        if(!FLAC__bitbuffer_write_raw_uint32(bb, u, FLAC__FRAME_HEADER_BITS_PER_SAMPLE_LEN))
 
319
        if(!FLAC__bitwriter_write_raw_uint32(bw, u, FLAC__FRAME_HEADER_BITS_PER_SAMPLE_LEN))
292
320
                return false;
293
321
 
294
 
        if(!FLAC__bitbuffer_write_raw_uint32(bb, 0, FLAC__FRAME_HEADER_ZERO_PAD_LEN))
 
322
        if(!FLAC__bitwriter_write_raw_uint32(bw, 0, FLAC__FRAME_HEADER_ZERO_PAD_LEN))
295
323
                return false;
296
324
 
297
325
        FLAC__ASSERT(header->number_type == FLAC__FRAME_NUMBER_TYPE_FRAME_NUMBER);
298
 
        if(!FLAC__bitbuffer_write_utf8_uint32(bb, header->number.frame_number))
 
326
        if(!FLAC__bitwriter_write_utf8_uint32(bw, header->number.frame_number))
299
327
                return false;
300
328
 
301
329
        if(blocksize_hint)
302
 
                if(!FLAC__bitbuffer_write_raw_uint32(bb, header->blocksize-1, (blocksize_hint==6)? 8:16))
 
330
                if(!FLAC__bitwriter_write_raw_uint32(bw, header->blocksize-1, (blocksize_hint==6)? 8:16))
303
331
                        return false;
304
332
 
305
333
        switch(sample_rate_hint) {
306
334
                case 12:
307
 
                        if(!FLAC__bitbuffer_write_raw_uint32(bb, header->sample_rate / 1000, 8))
 
335
                        if(!FLAC__bitwriter_write_raw_uint32(bw, header->sample_rate / 1000, 8))
308
336
                                return false;
309
337
                        break;
310
338
                case 13:
311
 
                        if(!FLAC__bitbuffer_write_raw_uint32(bb, header->sample_rate, 16))
 
339
                        if(!FLAC__bitwriter_write_raw_uint32(bw, header->sample_rate, 16))
312
340
                                return false;
313
341
                        break;
314
342
                case 14:
315
 
                        if(!FLAC__bitbuffer_write_raw_uint32(bb, header->sample_rate / 10, 16))
 
343
                        if(!FLAC__bitwriter_write_raw_uint32(bw, header->sample_rate / 10, 16))
316
344
                                return false;
317
345
                        break;
318
346
        }
319
347
 
320
348
        /* write the CRC */
321
 
        if(!FLAC__bitbuffer_write_raw_uint32(bb, FLAC__bitbuffer_get_write_crc8(bb), FLAC__FRAME_HEADER_CRC_LEN))
 
349
        if(!FLAC__bitwriter_get_write_crc8(bw, &crc))
 
350
                return false;
 
351
        if(!FLAC__bitwriter_write_raw_uint32(bw, crc, FLAC__FRAME_HEADER_CRC_LEN))
322
352
                return false;
323
353
 
324
354
        return true;
325
355
}
326
356
 
327
 
FLAC__bool FLAC__subframe_add_constant(const FLAC__Subframe_Constant *subframe, unsigned subframe_bps, unsigned wasted_bits, FLAC__BitBuffer *bb)
 
357
FLAC__bool FLAC__subframe_add_constant(const FLAC__Subframe_Constant *subframe, unsigned subframe_bps, unsigned wasted_bits, FLAC__BitWriter *bw)
328
358
{
329
359
        FLAC__bool ok;
330
360
 
331
361
        ok =
332
 
                FLAC__bitbuffer_write_raw_uint32(bb, FLAC__SUBFRAME_TYPE_CONSTANT_BYTE_ALIGNED_MASK | (wasted_bits? 1:0), FLAC__SUBFRAME_ZERO_PAD_LEN + FLAC__SUBFRAME_TYPE_LEN + FLAC__SUBFRAME_WASTED_BITS_FLAG_LEN) &&
333
 
                (wasted_bits? FLAC__bitbuffer_write_unary_unsigned(bb, wasted_bits-1) : true) &&
334
 
                FLAC__bitbuffer_write_raw_int32(bb, subframe->value, subframe_bps)
 
362
                FLAC__bitwriter_write_raw_uint32(bw, FLAC__SUBFRAME_TYPE_CONSTANT_BYTE_ALIGNED_MASK | (wasted_bits? 1:0), FLAC__SUBFRAME_ZERO_PAD_LEN + FLAC__SUBFRAME_TYPE_LEN + FLAC__SUBFRAME_WASTED_BITS_FLAG_LEN) &&
 
363
                (wasted_bits? FLAC__bitwriter_write_unary_unsigned(bw, wasted_bits-1) : true) &&
 
364
                FLAC__bitwriter_write_raw_int32(bw, subframe->value, subframe_bps)
335
365
        ;
336
366
 
337
367
        return ok;
338
368
}
339
369
 
340
 
FLAC__bool FLAC__subframe_add_fixed(const FLAC__Subframe_Fixed *subframe, unsigned residual_samples, unsigned subframe_bps, unsigned wasted_bits, FLAC__BitBuffer *bb)
341
 
{
342
 
        unsigned i;
343
 
 
344
 
        if(!FLAC__bitbuffer_write_raw_uint32(bb, FLAC__SUBFRAME_TYPE_FIXED_BYTE_ALIGNED_MASK | (subframe->order<<1) | (wasted_bits? 1:0), FLAC__SUBFRAME_ZERO_PAD_LEN + FLAC__SUBFRAME_TYPE_LEN + FLAC__SUBFRAME_WASTED_BITS_FLAG_LEN))
345
 
                return false;
346
 
        if(wasted_bits)
347
 
                if(!FLAC__bitbuffer_write_unary_unsigned(bb, wasted_bits-1))
348
 
                        return false;
349
 
 
350
 
        for(i = 0; i < subframe->order; i++)
351
 
                if(!FLAC__bitbuffer_write_raw_int32(bb, subframe->warmup[i], subframe_bps))
352
 
                        return false;
353
 
 
354
 
        if(!add_entropy_coding_method_(bb, &subframe->entropy_coding_method))
355
 
                return false;
356
 
        switch(subframe->entropy_coding_method.type) {
357
 
                case FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE:
358
 
                        if(!add_residual_partitioned_rice_(bb, subframe->residual, residual_samples, subframe->order, subframe->entropy_coding_method.data.partitioned_rice.contents->parameters, subframe->entropy_coding_method.data.partitioned_rice.contents->raw_bits, subframe->entropy_coding_method.data.partitioned_rice.order))
359
 
                                return false;
360
 
                        break;
361
 
                default:
362
 
                        FLAC__ASSERT(0);
363
 
        }
364
 
 
365
 
        return true;
366
 
}
367
 
 
368
 
FLAC__bool FLAC__subframe_add_lpc(const FLAC__Subframe_LPC *subframe, unsigned residual_samples, unsigned subframe_bps, unsigned wasted_bits, FLAC__BitBuffer *bb)
369
 
{
370
 
        unsigned i;
371
 
 
372
 
        if(!FLAC__bitbuffer_write_raw_uint32(bb, FLAC__SUBFRAME_TYPE_LPC_BYTE_ALIGNED_MASK | ((subframe->order-1)<<1) | (wasted_bits? 1:0), FLAC__SUBFRAME_ZERO_PAD_LEN + FLAC__SUBFRAME_TYPE_LEN + FLAC__SUBFRAME_WASTED_BITS_FLAG_LEN))
373
 
                return false;
374
 
        if(wasted_bits)
375
 
                if(!FLAC__bitbuffer_write_unary_unsigned(bb, wasted_bits-1))
376
 
                        return false;
377
 
 
378
 
        for(i = 0; i < subframe->order; i++)
379
 
                if(!FLAC__bitbuffer_write_raw_int32(bb, subframe->warmup[i], subframe_bps))
380
 
                        return false;
381
 
 
382
 
        if(!FLAC__bitbuffer_write_raw_uint32(bb, subframe->qlp_coeff_precision-1, FLAC__SUBFRAME_LPC_QLP_COEFF_PRECISION_LEN))
383
 
                return false;
384
 
        if(!FLAC__bitbuffer_write_raw_int32(bb, subframe->quantization_level, FLAC__SUBFRAME_LPC_QLP_SHIFT_LEN))
385
 
                return false;
386
 
        for(i = 0; i < subframe->order; i++)
387
 
                if(!FLAC__bitbuffer_write_raw_int32(bb, subframe->qlp_coeff[i], subframe->qlp_coeff_precision))
388
 
                        return false;
389
 
 
390
 
        if(!add_entropy_coding_method_(bb, &subframe->entropy_coding_method))
391
 
                return false;
392
 
        switch(subframe->entropy_coding_method.type) {
393
 
                case FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE:
394
 
                        if(!add_residual_partitioned_rice_(bb, subframe->residual, residual_samples, subframe->order, subframe->entropy_coding_method.data.partitioned_rice.contents->parameters, subframe->entropy_coding_method.data.partitioned_rice.contents->raw_bits, subframe->entropy_coding_method.data.partitioned_rice.order))
395
 
                                return false;
396
 
                        break;
397
 
                default:
398
 
                        FLAC__ASSERT(0);
399
 
        }
400
 
 
401
 
        return true;
402
 
}
403
 
 
404
 
FLAC__bool FLAC__subframe_add_verbatim(const FLAC__Subframe_Verbatim *subframe, unsigned samples, unsigned subframe_bps, unsigned wasted_bits, FLAC__BitBuffer *bb)
 
370
FLAC__bool FLAC__subframe_add_fixed(const FLAC__Subframe_Fixed *subframe, unsigned residual_samples, unsigned subframe_bps, unsigned wasted_bits, FLAC__BitWriter *bw)
 
371
{
 
372
        unsigned i;
 
373
 
 
374
        if(!FLAC__bitwriter_write_raw_uint32(bw, FLAC__SUBFRAME_TYPE_FIXED_BYTE_ALIGNED_MASK | (subframe->order<<1) | (wasted_bits? 1:0), FLAC__SUBFRAME_ZERO_PAD_LEN + FLAC__SUBFRAME_TYPE_LEN + FLAC__SUBFRAME_WASTED_BITS_FLAG_LEN))
 
375
                return false;
 
376
        if(wasted_bits)
 
377
                if(!FLAC__bitwriter_write_unary_unsigned(bw, wasted_bits-1))
 
378
                        return false;
 
379
 
 
380
        for(i = 0; i < subframe->order; i++)
 
381
                if(!FLAC__bitwriter_write_raw_int32(bw, subframe->warmup[i], subframe_bps))
 
382
                        return false;
 
383
 
 
384
        if(!add_entropy_coding_method_(bw, &subframe->entropy_coding_method))
 
385
                return false;
 
386
        switch(subframe->entropy_coding_method.type) {
 
387
                case FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE:
 
388
                        if(!add_residual_partitioned_rice_(bw, subframe->residual, residual_samples, subframe->order, subframe->entropy_coding_method.data.partitioned_rice.contents->parameters, subframe->entropy_coding_method.data.partitioned_rice.contents->raw_bits, subframe->entropy_coding_method.data.partitioned_rice.order))
 
389
                                return false;
 
390
                        break;
 
391
                default:
 
392
                        FLAC__ASSERT(0);
 
393
        }
 
394
 
 
395
        return true;
 
396
}
 
397
 
 
398
FLAC__bool FLAC__subframe_add_lpc(const FLAC__Subframe_LPC *subframe, unsigned residual_samples, unsigned subframe_bps, unsigned wasted_bits, FLAC__BitWriter *bw)
 
399
{
 
400
        unsigned i;
 
401
 
 
402
        if(!FLAC__bitwriter_write_raw_uint32(bw, FLAC__SUBFRAME_TYPE_LPC_BYTE_ALIGNED_MASK | ((subframe->order-1)<<1) | (wasted_bits? 1:0), FLAC__SUBFRAME_ZERO_PAD_LEN + FLAC__SUBFRAME_TYPE_LEN + FLAC__SUBFRAME_WASTED_BITS_FLAG_LEN))
 
403
                return false;
 
404
        if(wasted_bits)
 
405
                if(!FLAC__bitwriter_write_unary_unsigned(bw, wasted_bits-1))
 
406
                        return false;
 
407
 
 
408
        for(i = 0; i < subframe->order; i++)
 
409
                if(!FLAC__bitwriter_write_raw_int32(bw, subframe->warmup[i], subframe_bps))
 
410
                        return false;
 
411
 
 
412
        if(!FLAC__bitwriter_write_raw_uint32(bw, subframe->qlp_coeff_precision-1, FLAC__SUBFRAME_LPC_QLP_COEFF_PRECISION_LEN))
 
413
                return false;
 
414
        if(!FLAC__bitwriter_write_raw_int32(bw, subframe->quantization_level, FLAC__SUBFRAME_LPC_QLP_SHIFT_LEN))
 
415
                return false;
 
416
        for(i = 0; i < subframe->order; i++)
 
417
                if(!FLAC__bitwriter_write_raw_int32(bw, subframe->qlp_coeff[i], subframe->qlp_coeff_precision))
 
418
                        return false;
 
419
 
 
420
        if(!add_entropy_coding_method_(bw, &subframe->entropy_coding_method))
 
421
                return false;
 
422
        switch(subframe->entropy_coding_method.type) {
 
423
                case FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE:
 
424
                        if(!add_residual_partitioned_rice_(bw, subframe->residual, residual_samples, subframe->order, subframe->entropy_coding_method.data.partitioned_rice.contents->parameters, subframe->entropy_coding_method.data.partitioned_rice.contents->raw_bits, subframe->entropy_coding_method.data.partitioned_rice.order))
 
425
                                return false;
 
426
                        break;
 
427
                default:
 
428
                        FLAC__ASSERT(0);
 
429
        }
 
430
 
 
431
        return true;
 
432
}
 
433
 
 
434
FLAC__bool FLAC__subframe_add_verbatim(const FLAC__Subframe_Verbatim *subframe, unsigned samples, unsigned subframe_bps, unsigned wasted_bits, FLAC__BitWriter *bw)
405
435
{
406
436
        unsigned i;
407
437
        const FLAC__int32 *signal = subframe->data;
408
438
 
409
 
        if(!FLAC__bitbuffer_write_raw_uint32(bb, FLAC__SUBFRAME_TYPE_VERBATIM_BYTE_ALIGNED_MASK | (wasted_bits? 1:0), FLAC__SUBFRAME_ZERO_PAD_LEN + FLAC__SUBFRAME_TYPE_LEN + FLAC__SUBFRAME_WASTED_BITS_FLAG_LEN))
 
439
        if(!FLAC__bitwriter_write_raw_uint32(bw, FLAC__SUBFRAME_TYPE_VERBATIM_BYTE_ALIGNED_MASK | (wasted_bits? 1:0), FLAC__SUBFRAME_ZERO_PAD_LEN + FLAC__SUBFRAME_TYPE_LEN + FLAC__SUBFRAME_WASTED_BITS_FLAG_LEN))
410
440
                return false;
411
441
        if(wasted_bits)
412
 
                if(!FLAC__bitbuffer_write_unary_unsigned(bb, wasted_bits-1))
 
442
                if(!FLAC__bitwriter_write_unary_unsigned(bw, wasted_bits-1))
413
443
                        return false;
414
444
 
415
445
        for(i = 0; i < samples; i++)
416
 
                if(!FLAC__bitbuffer_write_raw_int32(bb, signal[i], subframe_bps))
 
446
                if(!FLAC__bitwriter_write_raw_int32(bw, signal[i], subframe_bps))
417
447
                        return false;
418
448
 
419
449
        return true;
420
450
}
421
451
 
422
 
FLAC__bool add_entropy_coding_method_(FLAC__BitBuffer *bb, const FLAC__EntropyCodingMethod *method)
 
452
FLAC__bool add_entropy_coding_method_(FLAC__BitWriter *bw, const FLAC__EntropyCodingMethod *method)
423
453
{
424
 
        if(!FLAC__bitbuffer_write_raw_uint32(bb, method->type, FLAC__ENTROPY_CODING_METHOD_TYPE_LEN))
 
454
        if(!FLAC__bitwriter_write_raw_uint32(bw, method->type, FLAC__ENTROPY_CODING_METHOD_TYPE_LEN))
425
455
                return false;
426
456
        switch(method->type) {
427
457
                case FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE:
428
 
                        if(!FLAC__bitbuffer_write_raw_uint32(bb, method->data.partitioned_rice.order, FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_ORDER_LEN))
 
458
                        if(!FLAC__bitwriter_write_raw_uint32(bw, method->data.partitioned_rice.order, FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_ORDER_LEN))
429
459
                                return false;
430
460
                        break;
431
461
                default:
434
464
        return true;
435
465
}
436
466
 
437
 
FLAC__bool add_residual_partitioned_rice_(FLAC__BitBuffer *bb, const FLAC__int32 residual[], const unsigned residual_samples, const unsigned predictor_order, const unsigned rice_parameters[], const unsigned raw_bits[], const unsigned partition_order)
 
467
FLAC__bool add_residual_partitioned_rice_(FLAC__BitWriter *bw, const FLAC__int32 residual[], const unsigned residual_samples, const unsigned predictor_order, const unsigned rice_parameters[], const unsigned raw_bits[], const unsigned partition_order)
438
468
{
439
469
        if(partition_order == 0) {
440
470
                unsigned i;
441
471
 
442
 
                if(!FLAC__bitbuffer_write_raw_uint32(bb, rice_parameters[0], FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_PARAMETER_LEN))
 
472
                if(!FLAC__bitwriter_write_raw_uint32(bw, rice_parameters[0], FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_PARAMETER_LEN))
443
473
                        return false;
444
474
                if(rice_parameters[0] < FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_ESCAPE_PARAMETER) {
445
 
                        for(i = 0; i < residual_samples; i++) {
446
 
#ifdef FLAC__SYMMETRIC_RICE
447
 
                                if(!FLAC__bitbuffer_write_symmetric_rice_signed(bb, residual[i], rice_parameters[0]))
448
 
                                        return false;
449
 
#else
450
 
                                if(!FLAC__bitbuffer_write_rice_signed(bb, residual[i], rice_parameters[0]))
451
 
                                        return false;
452
 
#endif
453
 
                        }
 
475
                        if(!FLAC__bitwriter_write_rice_signed_block(bw, residual, residual_samples, rice_parameters[0]))
 
476
                                return false;
454
477
                }
455
478
                else {
456
 
                        if(!FLAC__bitbuffer_write_raw_uint32(bb, raw_bits[0], FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_RAW_LEN))
 
479
                        if(!FLAC__bitwriter_write_raw_uint32(bw, raw_bits[0], FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_RAW_LEN))
457
480
                                return false;
458
481
                        for(i = 0; i < residual_samples; i++) {
459
 
                                if(!FLAC__bitbuffer_write_raw_int32(bb, residual[i], raw_bits[0]))
 
482
                                if(!FLAC__bitwriter_write_raw_int32(bw, residual[i], raw_bits[0]))
460
483
                                        return false;
461
484
                        }
462
485
                }
467
490
                unsigned partition_samples;
468
491
                const unsigned default_partition_samples = (residual_samples+predictor_order) >> partition_order;
469
492
                for(i = 0; i < (1u<<partition_order); i++) {
470
 
                        if(!FLAC__bitbuffer_write_raw_uint32(bb, rice_parameters[i], FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_PARAMETER_LEN))
 
493
                        if(!FLAC__bitwriter_write_raw_uint32(bw, rice_parameters[i], FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_PARAMETER_LEN))
471
494
                                return false;
472
495
                        partition_samples = default_partition_samples;
473
496
                        if(i == 0)
474
497
                                partition_samples -= predictor_order;
475
498
                        k += partition_samples;
476
499
                        if(rice_parameters[i] < FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_ESCAPE_PARAMETER) {
477
 
                                for(j = k_last; j < k; j++) {
478
 
#ifdef FLAC__SYMMETRIC_RICE
479
 
                                        if(!FLAC__bitbuffer_write_symmetric_rice_signed(bb, residual[j], rice_parameters[i]))
480
 
                                                return false;
481
 
#else
482
 
                                        if(!FLAC__bitbuffer_write_rice_signed(bb, residual[j], rice_parameters[i]))
483
 
                                                return false;
484
 
#endif
485
 
                                }
 
500
                                if(!FLAC__bitwriter_write_rice_signed_block(bw, residual+k_last, k-k_last, rice_parameters[i]))
 
501
                                        return false;
486
502
                        }
487
503
                        else {
488
 
                                if(!FLAC__bitbuffer_write_raw_uint32(bb, raw_bits[i], FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_RAW_LEN))
 
504
                                if(!FLAC__bitwriter_write_raw_uint32(bw, raw_bits[i], FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_RAW_LEN))
489
505
                                        return false;
490
506
                                for(j = k_last; j < k; j++) {
491
 
                                        if(!FLAC__bitbuffer_write_raw_int32(bb, residual[j], raw_bits[i]))
 
507
                                        if(!FLAC__bitwriter_write_raw_int32(bw, residual[j], raw_bits[i]))
492
508
                                                return false;
493
509
                                }
494
510
                        }