summaryrefslogtreecommitdiff
path: root/lib/rbcodec/codecs/alac.c
diff options
context:
space:
mode:
authorSolomon Peachy <pizza@shaftnet.org>2018-10-15 17:59:13 -0400
committerSolomon Peachy <pizza@shaftnet.org>2018-10-29 19:50:34 +0100
commit20b91a83d3078eeabc02a4d214f6d44c64282f89 (patch)
tree00a182ef2240e6edc5a88ae4cf037479f5fa042c /lib/rbcodec/codecs/alac.c
parent0120ecd651a2ff3f8e202a704d6e73b705cf81d0 (diff)
downloadrockbox-20b91a83d3078eeabc02a4d214f6d44c64282f89.tar.gz
rockbox-20b91a83d3078eeabc02a4d214f6d44c64282f89.zip
codecs: Fix elapsed time calculation for large files
In particular, this solves seeking glitches seen in ~6 hr mp3 files. (Patch taken from Igor Poretsky's tree) Change-Id: Id65b6726146b6d2d1a223e90b88e401d1b2d597a
Diffstat (limited to 'lib/rbcodec/codecs/alac.c')
-rw-r--r--lib/rbcodec/codecs/alac.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/lib/rbcodec/codecs/alac.c b/lib/rbcodec/codecs/alac.c
index 35c3645657..903ea2850e 100644
--- a/lib/rbcodec/codecs/alac.c
+++ b/lib/rbcodec/codecs/alac.c
@@ -104,7 +104,7 @@ enum codec_status codec_run(void)
104 } 104 }
105 } 105 }
106 106
107 elapsedtime = (samplesdone*10)/(ci->id3->frequency/100); 107 elapsedtime = samplesdone * 1000LL / ci->id3->frequency;
108 ci->set_elapsed(elapsedtime); 108 ci->set_elapsed(elapsedtime);
109 109
110 /* The main decoding loop */ 110 /* The main decoding loop */
@@ -119,7 +119,7 @@ enum codec_status codec_run(void)
119 if (m4a_seek(&demux_res, &input_stream, 119 if (m4a_seek(&demux_res, &input_stream,
120 (param/10) * (ci->id3->frequency/100), 120 (param/10) * (ci->id3->frequency/100),
121 &samplesdone, (int *)&i)) { 121 &samplesdone, (int *)&i)) {
122 elapsedtime=(samplesdone*10)/(ci->id3->frequency/100); 122 elapsedtime=samplesdone*1000LL/ci->id3->frequency;
123 } 123 }
124 ci->set_elapsed(elapsedtime); 124 ci->set_elapsed(elapsedtime);
125 ci->seek_complete(); 125 ci->seek_complete();
@@ -140,7 +140,7 @@ enum codec_status codec_run(void)
140 140
141 /* Update the elapsed-time indicator */ 141 /* Update the elapsed-time indicator */
142 samplesdone+=samplesdecoded; 142 samplesdone+=samplesdecoded;
143 elapsedtime=(samplesdone*10)/(ci->id3->frequency/100); 143 elapsedtime=samplesdone*1000LL/ci->id3->frequency;
144 ci->set_elapsed(elapsedtime); 144 ci->set_elapsed(elapsedtime);
145 145
146 i++; 146 i++;