diff options
-rw-r--r-- | apps/codecs/libffmpegFLAC/bitstream.h | 2 | ||||
-rw-r--r-- | apps/codecs/libffmpegFLAC/main.c | 25 |
2 files changed, 22 insertions, 5 deletions
diff --git a/apps/codecs/libffmpegFLAC/bitstream.h b/apps/codecs/libffmpegFLAC/bitstream.h index 668e23a836..288d839c4a 100644 --- a/apps/codecs/libffmpegFLAC/bitstream.h +++ b/apps/codecs/libffmpegFLAC/bitstream.h | |||
@@ -15,7 +15,7 @@ | |||
15 | #include <stdio.h> | 15 | #include <stdio.h> |
16 | #define IBSS_ATTR | 16 | #define IBSS_ATTR |
17 | #define ICONST_ATTR | 17 | #define ICONST_ATTR |
18 | 18 | #define ICODE_ATTR | |
19 | #endif | 19 | #endif |
20 | 20 | ||
21 | /* Endian conversion routines for standalone compilation */ | 21 | /* Endian conversion routines for standalone compilation */ |
diff --git a/apps/codecs/libffmpegFLAC/main.c b/apps/codecs/libffmpegFLAC/main.c index eea97f4f18..c1d562664e 100644 --- a/apps/codecs/libffmpegFLAC/main.c +++ b/apps/codecs/libffmpegFLAC/main.c | |||
@@ -138,6 +138,10 @@ static bool flac_init(int fd, FLACContext* fc) | |||
138 | bool found_streaminfo=false; | 138 | bool found_streaminfo=false; |
139 | int endofmetadata=0; | 139 | int endofmetadata=0; |
140 | int blocklength; | 140 | int blocklength; |
141 | uint32_t* p; | ||
142 | uint32_t seekpoint_lo,seekpoint_hi; | ||
143 | uint32_t offset_lo,offset_hi; | ||
144 | int n; | ||
141 | 145 | ||
142 | if (lseek(fd, 0, SEEK_SET) < 0) | 146 | if (lseek(fd, 0, SEEK_SET) < 0) |
143 | { | 147 | { |
@@ -196,9 +200,22 @@ static bool flac_init(int fd, FLACContext* fc) | |||
196 | found_streaminfo=true; | 200 | found_streaminfo=true; |
197 | } else if ((buf[0] & 0x7f) == 3) { /* 3 is the SEEKTABLE block */ | 201 | } else if ((buf[0] & 0x7f) == 3) { /* 3 is the SEEKTABLE block */ |
198 | fprintf(stderr,"Seektable length = %d bytes\n",blocklength); | 202 | fprintf(stderr,"Seektable length = %d bytes\n",blocklength); |
199 | if (lseek(fd, blocklength, SEEK_CUR) < 0) { | 203 | while (blocklength >= 18) { |
200 | return false; | 204 | n=read(fd,buf,18); |
201 | } | 205 | if (n < 18) return false; |
206 | blocklength-=n; | ||
207 | |||
208 | p=(uint32_t*)buf; | ||
209 | seekpoint_hi=betoh32(*(p++)); | ||
210 | seekpoint_lo=betoh32(*(p++)); | ||
211 | offset_hi=betoh32(*(p++)); | ||
212 | offset_lo=betoh32(*(p++)); | ||
213 | |||
214 | if ((seekpoint_hi != 0xffffffff) && (seekpoint_lo != 0xffffffff)) { | ||
215 | fprintf(stderr,"Seekpoint: %u, Offset=%u\n",seekpoint_lo,offset_lo); | ||
216 | } | ||
217 | } | ||
218 | lseek(fd, blocklength, SEEK_CUR); | ||
202 | } else { | 219 | } else { |
203 | /* Skip to next metadata block */ | 220 | /* Skip to next metadata block */ |
204 | if (lseek(fd, blocklength, SEEK_CUR) < 0) | 221 | if (lseek(fd, blocklength, SEEK_CUR) < 0) |
@@ -227,7 +244,7 @@ int main(int argc, char* argv[]) { | |||
227 | int i; | 244 | int i; |
228 | int bytesleft; | 245 | int bytesleft; |
229 | int consumed; | 246 | int consumed; |
230 | char buf[MAX_FRAMESIZE]; /* The input buffer */ | 247 | unsigned char buf[MAX_FRAMESIZE]; /* The input buffer */ |
231 | /* The output buffers containing the decoded samples (channels 0 and 1) */ | 248 | /* The output buffers containing the decoded samples (channels 0 and 1) */ |
232 | int32_t decoded0[MAX_BLOCKSIZE]; | 249 | int32_t decoded0[MAX_BLOCKSIZE]; |
233 | int32_t decoded1[MAX_BLOCKSIZE]; | 250 | int32_t decoded1[MAX_BLOCKSIZE]; |