From: phantomjinx <pha...@us...> - 2012-08-06 10:23:29
|
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; } |