summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/codecs/flac.c20
1 files changed, 13 insertions, 7 deletions
diff --git a/apps/codecs/flac.c b/apps/codecs/flac.c
index 4782c95d55..fa263c1095 100644
--- a/apps/codecs/flac.c
+++ b/apps/codecs/flac.c
@@ -86,7 +86,6 @@ static bool flac_init(FLACContext* fc, int first_frame_offset)
86 int endofmetadata=0; 86 int endofmetadata=0;
87 int blocklength; 87 int blocklength;
88 int n; 88 int n;
89 uint32_t* p;
90 89
91 ci->memset(fc,0,sizeof(FLACContext)); 90 ci->memset(fc,0,sizeof(FLACContext));
92 nseekpoints=0; 91 nseekpoints=0;
@@ -152,12 +151,19 @@ static bool flac_init(FLACContext* fc, int first_frame_offset)
152 if (n < 18) return false; 151 if (n < 18) return false;
153 blocklength-=n; 152 blocklength-=n;
154 153
155 p=(uint32_t*)buf; 154 seekpoint_hi=(buf[0] << 24) | (buf[1] << 16) |
156 seekpoint_hi=betoh32(*(p++)); 155 (buf[2] << 8) | buf[3];
157 seekpoint_lo=betoh32(*(p++)); 156 seekpoint_lo=(buf[4] << 24) | (buf[5] << 16) |
158 offset_hi=betoh32(*(p++)); 157 (buf[6] << 8) | buf[7];
159 offset_lo=betoh32(*(p++)); 158 offset_hi=(buf[8] << 24) | (buf[9] << 16) |
160 159 (buf[10] << 8) | buf[11];
160 offset_lo=(buf[12] << 24) | (buf[13] << 16) |
161 (buf[14] << 8) | buf[15];
162
163 /* The final two bytes contain the number of samples in the
164 target frame - but we don't care about that. */
165
166 /* Only store seekpoints where the high 32 bits are zero */
161 if ((seekpoint_hi == 0) && (seekpoint_lo != 0xffffffff) && 167 if ((seekpoint_hi == 0) && (seekpoint_lo != 0xffffffff) &&
162 (offset_hi == 0)) { 168 (offset_hi == 0)) {
163 seekpoints[nseekpoints].sample=seekpoint_lo; 169 seekpoints[nseekpoints].sample=seekpoint_lo;