annotate src/flac/libflac/ogg_helper.c @ 997:e46b98155d5d trunk

[svn] - fix a bug which counts number of frames twice in handling xing header. - now fileinfo dialog calculates play length even though TLEN tag exists so that it can overwrite wrong TLEN tag.
author yaz
date Tue, 01 May 2007 12:49:27 -0700
parents 454ad11020ec
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
715
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
1 /* libFLAC - Free Lossless Audio Codec
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
2 * Copyright (C) 2004,2005,2006,2007 Josh Coalson
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
3 *
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
4 * Redistribution and use in source and binary forms, with or without
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
5 * modification, are permitted provided that the following conditions
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
6 * are met:
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
7 *
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
8 * - Redistributions of source code must retain the above copyright
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
9 * notice, this list of conditions and the following disclaimer.
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
10 *
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
11 * - Redistributions in binary form must reproduce the above copyright
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
12 * notice, this list of conditions and the following disclaimer in the
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
13 * documentation and/or other materials provided with the distribution.
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
14 *
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
15 * - Neither the name of the Xiph.org Foundation nor the names of its
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
16 * contributors may be used to endorse or promote products derived from
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
17 * this software without specific prior written permission.
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
18 *
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
20 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
21 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
22 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
23 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
24 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
25 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
26 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
27 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
28 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
29 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
30 */
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
31
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
32 #if HAVE_CONFIG_H
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
33 # include <config.h>
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
34 #endif
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
35
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
36 #include <stdlib.h> /* for malloc() */
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
37 #include <string.h> /* for memcmp(), memcpy() */
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
38 #include "FLAC/assert.h"
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
39 #include "private/ogg_helper.h"
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
40 #include "protected/stream_encoder.h"
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
41
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
42
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
43 static FLAC__bool full_read_(FLAC__StreamEncoder *encoder, FLAC__byte *buffer, size_t bytes, FLAC__StreamEncoderReadCallback read_callback, void *client_data)
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
44 {
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
45 while(bytes > 0) {
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
46 size_t bytes_read = bytes;
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
47 switch(read_callback(encoder, buffer, &bytes_read, client_data)) {
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
48 case FLAC__STREAM_ENCODER_READ_STATUS_CONTINUE:
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
49 bytes -= bytes_read;
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
50 buffer += bytes_read;
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
51 break;
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
52 case FLAC__STREAM_ENCODER_READ_STATUS_END_OF_STREAM:
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
53 if(bytes_read == 0) {
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
54 encoder->protected_->state = FLAC__STREAM_ENCODER_OGG_ERROR;
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
55 return false;
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
56 }
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
57 bytes -= bytes_read;
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
58 buffer += bytes_read;
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
59 break;
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
60 case FLAC__STREAM_ENCODER_READ_STATUS_ABORT:
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
61 encoder->protected_->state = FLAC__STREAM_ENCODER_CLIENT_ERROR;
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
62 return false;
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
63 case FLAC__STREAM_ENCODER_READ_STATUS_UNSUPPORTED:
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
64 return false;
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
65 default:
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
66 /* double protection: */
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
67 FLAC__ASSERT(0);
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
68 encoder->protected_->state = FLAC__STREAM_ENCODER_CLIENT_ERROR;
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
69 return false;
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
70 }
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
71 }
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
72
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
73 return true;
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
74 }
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
75
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
76 void simple_ogg_page__init(ogg_page *page)
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
77 {
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
78 page->header = 0;
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
79 page->header_len = 0;
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
80 page->body = 0;
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
81 page->body_len = 0;
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
82 }
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
83
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
84 void simple_ogg_page__clear(ogg_page *page)
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
85 {
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
86 if(page->header)
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
87 free(page->header);
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
88 if(page->body)
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
89 free(page->body);
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
90 simple_ogg_page__init(page);
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
91 }
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
92
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
93 FLAC__bool simple_ogg_page__get_at(FLAC__StreamEncoder *encoder, FLAC__uint64 position, ogg_page *page, FLAC__StreamEncoderSeekCallback seek_callback, FLAC__StreamEncoderReadCallback read_callback, void *client_data)
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
94 {
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
95 static const unsigned OGG_HEADER_FIXED_PORTION_LEN = 27;
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
96 static const unsigned OGG_MAX_HEADER_LEN = 27/*OGG_HEADER_FIXED_PORTION_LEN*/ + 255;
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
97 FLAC__byte crc[4];
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
98 FLAC__StreamEncoderSeekStatus seek_status;
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
99
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
100 FLAC__ASSERT(page->header == 0);
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
101 FLAC__ASSERT(page->header_len == 0);
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
102 FLAC__ASSERT(page->body == 0);
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
103 FLAC__ASSERT(page->body_len == 0);
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
104
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
105 /* move the stream pointer to the supposed beginning of the page */
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
106 if(0 == seek_callback)
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
107 return false;
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
108 if((seek_status = seek_callback((FLAC__StreamEncoder*)encoder, position, client_data)) != FLAC__STREAM_ENCODER_SEEK_STATUS_OK) {
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
109 if(seek_status == FLAC__STREAM_ENCODER_SEEK_STATUS_ERROR)
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
110 encoder->protected_->state = FLAC__STREAM_ENCODER_CLIENT_ERROR;
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
111 return false;
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
112 }
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
113
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
114 /* allocate space for the page header */
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
115 if(0 == (page->header = (unsigned char *)malloc(OGG_MAX_HEADER_LEN))) {
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
116 encoder->protected_->state = FLAC__STREAM_ENCODER_MEMORY_ALLOCATION_ERROR;
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
117 return false;
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
118 }
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
119
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
120 /* read in the fixed part of the page header (up to but not including
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
121 * the segment table */
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
122 if(!full_read_(encoder, page->header, OGG_HEADER_FIXED_PORTION_LEN, read_callback, client_data))
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
123 return false;
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
124
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
125 page->header_len = OGG_HEADER_FIXED_PORTION_LEN + page->header[26];
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
126
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
127 /* check to see if it's a correct, "simple" page (one packet only) */
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
128 if(
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
129 memcmp(page->header, "OggS", 4) || /* doesn't start with OggS */
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
130 (page->header[5] & 0x01) || /* continued packet */
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
131 memcmp(page->header+6, "\0\0\0\0\0\0\0\0", 8) || /* granulepos is non-zero */
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
132 page->header[26] == 0 /* packet is 0-size */
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
133 ) {
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
134 encoder->protected_->state = FLAC__STREAM_ENCODER_OGG_ERROR;
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
135 return false;
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
136 }
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
137
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
138 /* read in the segment table */
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
139 if(!full_read_(encoder, page->header + OGG_HEADER_FIXED_PORTION_LEN, page->header[26], read_callback, client_data))
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
140 return false;
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
141
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
142 {
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
143 unsigned i;
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
144
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
145 /* check to see that it specifies a single packet */
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
146 for(i = 0; i < (unsigned)page->header[26] - 1; i++) {
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
147 if(page->header[i + OGG_HEADER_FIXED_PORTION_LEN] != 255) {
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
148 encoder->protected_->state = FLAC__STREAM_ENCODER_OGG_ERROR;
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
149 return false;
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
150 }
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
151 }
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
152
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
153 page->body_len = 255 * i + page->header[i + OGG_HEADER_FIXED_PORTION_LEN];
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
154 }
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
155
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
156 /* allocate space for the page body */
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
157 if(0 == (page->body = (unsigned char *)malloc(page->body_len))) {
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
158 encoder->protected_->state = FLAC__STREAM_ENCODER_MEMORY_ALLOCATION_ERROR;
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
159 return false;
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
160 }
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
161
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
162 /* read in the page body */
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
163 if(!full_read_(encoder, page->body, page->body_len, read_callback, client_data))
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
164 return false;
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
165
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
166 /* check the CRC */
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
167 memcpy(crc, page->header+22, 4);
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
168 ogg_page_checksum_set(page);
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
169 if(memcmp(crc, page->header+22, 4)) {
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
170 encoder->protected_->state = FLAC__STREAM_ENCODER_OGG_ERROR;
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
171 return false;
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
172 }
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
173
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
174 return true;
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
175 }
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
176
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
177 FLAC__bool simple_ogg_page__set_at(FLAC__StreamEncoder *encoder, FLAC__uint64 position, ogg_page *page, FLAC__StreamEncoderSeekCallback seek_callback, FLAC__StreamEncoderWriteCallback write_callback, void *client_data)
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
178 {
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
179 FLAC__StreamEncoderSeekStatus seek_status;
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
180
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
181 FLAC__ASSERT(page->header != 0);
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
182 FLAC__ASSERT(page->header_len != 0);
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
183 FLAC__ASSERT(page->body != 0);
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
184 FLAC__ASSERT(page->body_len != 0);
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
185
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
186 /* move the stream pointer to the supposed beginning of the page */
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
187 if(0 == seek_callback)
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
188 return false;
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
189 if((seek_status = seek_callback((FLAC__StreamEncoder*)encoder, position, client_data)) != FLAC__STREAM_ENCODER_SEEK_STATUS_OK) {
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
190 if(seek_status == FLAC__STREAM_ENCODER_SEEK_STATUS_ERROR)
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
191 encoder->protected_->state = FLAC__STREAM_ENCODER_CLIENT_ERROR;
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
192 return false;
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
193 }
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
194
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
195 ogg_page_checksum_set(page);
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
196
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
197 /* re-write the page */
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
198 if(write_callback((FLAC__StreamEncoder*)encoder, page->header, page->header_len, 0, 0, client_data) != FLAC__STREAM_ENCODER_WRITE_STATUS_OK) {
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
199 encoder->protected_->state = FLAC__STREAM_ENCODER_CLIENT_ERROR;
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
200 return false;
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
201 }
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
202 if(write_callback((FLAC__StreamEncoder*)encoder, page->body, page->body_len, 0, 0, client_data) != FLAC__STREAM_ENCODER_WRITE_STATUS_OK) {
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
203 encoder->protected_->state = FLAC__STREAM_ENCODER_CLIENT_ERROR;
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
204 return false;
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
205 }
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
206
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
207 return true;
a9b178bc4ae4 [svn] Import flac. Please test.
js
parents:
diff changeset
208 }