tracker r2621 - in trunk: . src/tracker-extract
- From: mottela svn gnome org
- To: svn-commits-list gnome org
- Subject: tracker r2621 - in trunk: . src/tracker-extract
- Date: Mon, 1 Dec 2008 13:52:31 +0000 (UTC)
Author: mottela
Date: Mon Dec 1 13:52:31 2008
New Revision: 2621
URL: http://svn.gnome.org/viewvc/tracker?rev=2621&view=rev
Log:
Bug fix and improvements to mp3 duration calculation
Modified:
trunk/ChangeLog
trunk/src/tracker-extract/tracker-extract-mp3.c
Modified: trunk/src/tracker-extract/tracker-extract-mp3.c
==============================================================================
--- trunk/src/tracker-extract/tracker-extract-mp3.c (original)
+++ trunk/src/tracker-extract/tracker-extract-mp3.c Mon Dec 1 13:52:31 2008
@@ -42,9 +42,16 @@
#include "tracker-extract.h"
#include "tracker-albumart.h"
-#define MAX_FILE_READ 1024 * 1024 * 10
+/* FIXME The max file read is not a good idea as basic
+ * id3 are the _last_ 128 bits of the file. We should
+ * probably read 2 buffers (beginning, end) instead.
+*/
+#define MAX_FILE_READ 1024 * 1024 * 20
#define MAX_MP3_SCAN_DEEP 16768
+#define MAX_FRAMES_SCAN 1024 * 3
+#define VBR_THRESHOLD 64
+
typedef struct {
gchar *text;
gchar *type;
@@ -232,8 +239,6 @@
"Synthpop"
};
-static const guint max_frames_scan = 1024;
-
static const guint sync_mask = 0xE0FF;
static const guint mpeg_ver_mask = 0x1800;
static const guint mpeg_layer_mask = 0x600;
@@ -459,9 +464,9 @@
frame_size = 144 * bitrate / (sample_rate ? sample_rate : 1) + ((header & pad_mask) >> 17);
avg_bps += bitrate / 1000;
- pos += frame_size - 4;
+ pos += frame_size;
- if (frames > max_frames_scan) {
+ if (frames > MAX_FRAMES_SCAN) {
/* Optimization */
break;
}
@@ -475,6 +480,10 @@
break;
}
+ if ((!vbr_flag) && (frames > VBR_THRESHOLD)) {
+ break;
+ }
+
memcpy(&header, &data[pos], sizeof (header));
} while ((header & sync_mask) == sync_mask);
@@ -485,8 +494,8 @@
avg_bps /= frames;
- if (max_frames_scan) {
- /* If not all frames scaned */
+ if ((!vbr_flag || frames > VBR_THRESHOLD) || (frames > MAX_FRAMES_SCAN)) {
+ /* If not all frames scanned */
length = size / (avg_bps ? avg_bps : bitrate ? bitrate : 0xFFFFFFFF) / 125;
} else{
length = 1152 * frames / (sample_rate ? sample_rate : 0xFFFFFFFF);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]