commit 3b069f77a5022a4779ee7e473656b9c7938c1be6
Author: phantomjinx <p.g...@ph...>
Date: Mon Aug 6 09:58:02 2012 +0100
fix m4a track length value
* The duration value read by atomic parsley is stored in the mp4 in its
moov->mdia->timescale atom. The duration must be divided by this value
to get the duration in seconds. In addition, gtkpod stores the track
length in ms so the duration must be multiplied by 1000.
* Fixes #3537899
https://sourceforge.net/tracker/?func=detail&atid=519273&aid=3537899&group_id=67873
libs/atomic-parsley/AtomicParsleyBridge.cpp | 11 ++++++++---
1 files changed, 8 insertions(+), 3 deletions(-)
---
diff --git a/libs/atomic-parsley/AtomicParsleyBridge.cpp b/libs/atomic-parsley/AtomicParsleyBridge.cpp
index 4fe40f5..052f47f 100644
--- a/libs/atomic-parsley/AtomicParsleyBridge.cpp
+++ b/libs/atomic-parsley/AtomicParsleyBridge.cpp
@@ -156,13 +156,18 @@ void AP_read_metadata(const char *filePath, Track *track) {
&& ((info->track_type & AUDIO_TRACK) || (info->track_type & VIDEO_TRACK)
|| (info->track_type & DRM_PROTECTED_TRACK))) {
- track->tracklen = info->duration;
+ /*
+ * the info->duration is in the track's timescale units so must be divided by that
+ * value to get seconds, while track->tracklen in gtkpod is in ms
+ */
+ float duration = ((float) info->duration / (float) info->parent->movie_info->timescale) * 1000;
+ track->tracklen = (gint32) duration;
+
track->bitrate = APar_calculate_bitrate(info);
track->samplerate = info->media_sample_rate;
}
audio_or_video_found = TRUE;
-
}
if (prefs_get_int("readtags")) {
@@ -661,7 +666,7 @@ void AP_write_metadata(Track *track, const char *filePath, GError **error) {
g_remove(tmp_file);
}
else {
- gtkpod_log_error(error, g_strdup_printf(_("ERROR failed to change track file's artwork.")));
+ gtkpod_log_error(error, g_strdup_printf(_("ERROR failed to change track file's artwork.") ));
g_error_free(pixbuf_err);
return;
}
|