|
From: <ny...@us...> - 2007-02-23 09:12:09
|
Revision: 390
http://svn.sourceforge.net/pmplib/?rev=390&view=rev
Author: nyaochi
Date: 2007-02-23 01:12:10 -0800 (Fri, 23 Feb 2007)
Log Message:
-----------
- duration in pmp_music_record_t is now represented in miliseconds.
- added num_samples in pmp_music_record_t
Modified Paths:
--------------
trunk/pmplib/include/pmplib/pmp.h
trunk/pmplib/lib/gmi/gmi_mp3.c
trunk/pmplib/lib/gmi/gmi_vorbis.c
trunk/pmplib/lib/gmi/gmi_wav.c
trunk/pmplib/lib/gmi/gmi_wma.c
trunk/pmplib/lib/pmp_ipod/ipod.c
trunk/pmplib/lib/pmp_iriverplus2/ip2db.c
trunk/pmplib/lib/pmp_iriverplus3/pmp_iriverplus3.c
trunk/pmplib/lib/pmp_portalplayer1/model_iriver_h10.c
trunk/pmplib/lib/pmp_portalplayer1/model_medion_mdjuke220.c
trunk/pmplib/lib/pmp_portalplayer1/model_msi_megaplayer.c
trunk/pmplib/lib/pmp_portalplayer1/model_samsung.c
trunk/pmplib/lib/pmp_portalplayer1/model_sirius_s50.c
Modified: trunk/pmplib/include/pmplib/pmp.h
===================================================================
--- trunk/pmplib/include/pmplib/pmp.h 2007-02-23 08:43:34 UTC (rev 389)
+++ trunk/pmplib/include/pmplib/pmp.h 2007-02-23 09:12:10 UTC (rev 390)
@@ -410,6 +410,12 @@
uint32_t duration;
/**
+ * Number of samples.
+ * e.g., 260*44100.
+ */
+ uint64_t num_samples;
+
+ /**
* File size in bytes.
* e.g., 4160000
*/
Modified: trunk/pmplib/lib/gmi/gmi_mp3.c
===================================================================
--- trunk/pmplib/lib/gmi/gmi_mp3.c 2007-02-23 08:43:34 UTC (rev 389)
+++ trunk/pmplib/lib/gmi/gmi_mp3.c 2007-02-23 09:12:10 UTC (rev 390)
@@ -480,7 +480,8 @@
int channels = mp3header.channel_mode == 3 ? 1 : 2;
info->sample_rate = mp3header.sample_rate;
info->bitrate = mp3header.bitrate;
- info->duration = mp3header.duration;
+ info->duration = (uint32_t)(mp3header.duration * 1000.0);
+ info->num_samples = (uint64_t)mp3header.samples_per_frame * mp3header.number_of_frames;
switch (mp3header.version) {
case 0:
info->codec_version = 100;
Modified: trunk/pmplib/lib/gmi/gmi_vorbis.c
===================================================================
--- trunk/pmplib/lib/gmi/gmi_vorbis.c 2007-02-23 08:43:34 UTC (rev 389)
+++ trunk/pmplib/lib/gmi/gmi_vorbis.c 2007-02-23 09:12:10 UTC (rev 390)
@@ -51,6 +51,7 @@
int i, ret = 0;
long lval = 0;
double dval = 0;
+ ogg_int64_t llval = 0;
FILE *fp = NULL;
OggVorbis_File vf;
vorbis_info *vi = NULL;
@@ -90,14 +91,17 @@
}
info->bitrate = (uint32_t)lval;
- /* Obtain duration. */
- dval = ov_time_total(&vf, -1);
- if (dval < 0) {
+ /* Obtain the number of samples. */
+ llval = ov_pcm_total(&vf, -1);
+ if (llval < 0) {
ov_clear(&vf);
goto error_exit;
}
- info->duration = (uint32_t)dval;
+ info->num_samples = (uint64_t)llval;
+ /* Compute duration. */
+ info->duration = (uint32_t)((double)info->num_samples * 1000.0 / info->sample_rate);
+
vc = ov_comment(&vf, -1);
for (i = 0;i < vc->comments;++i) {
const char *fieldvalue = vc->user_comments[i];
Modified: trunk/pmplib/lib/gmi/gmi_wav.c
===================================================================
--- trunk/pmplib/lib/gmi/gmi_wav.c 2007-02-23 08:43:34 UTC (rev 389)
+++ trunk/pmplib/lib/gmi/gmi_wav.c 2007-02-23 09:12:10 UTC (rev 390)
@@ -226,7 +226,8 @@
info->bitrate = channels * sample_bits * info->sample_rate;
break;
case 0x61746164:
- info->duration = (uint32_t)((double)ch.size * 8.0 / info->bitrate);
+ info->num_samples = (uint64_t)((double)ch.size * 8.0 / channels / sample_bits);
+ info->duration = (uint32_t)((double)ch.size * 8.0 * 1000.0 / info->bitrate);
break;
case 0x5453494C:
ret |= read_uint32le(&tmp32, fp);
Modified: trunk/pmplib/lib/gmi/gmi_wma.c
===================================================================
--- trunk/pmplib/lib/gmi/gmi_wma.c 2007-02-23 08:43:34 UTC (rev 389)
+++ trunk/pmplib/lib/gmi/gmi_wma.c 2007-02-23 09:12:10 UTC (rev 390)
@@ -251,7 +251,7 @@
duration += duration_high * 429.4967296;
duration -= preroll_low / 1000.0;
duration -= (preroll_high / 4294967.296);
- info->duration = (uint32_t)duration;
+ info->duration = (uint32_t)(duration * 1000.0);
} else if (guid_equals(guid, g_guid_stream_properties)) {
@@ -516,6 +516,7 @@
info->codec = PMPCODEC_WMA;
info->codec_version = 1; /* Set 1 for now. */
info->is_vbr = 1; /* Set 1 for now. */
+ info->num_samples = (uint64_t)((double)info->duration * info->sample_rate / 1000);
}
return ret;
}
Modified: trunk/pmplib/lib/pmp_ipod/ipod.c
===================================================================
--- trunk/pmplib/lib/pmp_ipod/ipod.c 2007-02-23 08:43:34 UTC (rev 389)
+++ trunk/pmplib/lib/pmp_ipod/ipod.c 2007-02-23 09:12:10 UTC (rev 390)
@@ -168,7 +168,7 @@
mhit_data->rating = 0;
mhit_data->last_modified = rec->ts_update;
mhit_data->filesize = rec->filesize;
- mhit_data->duration = rec->duration * 1000;
+ mhit_data->duration = rec->duration;
mhit_data->track_number = rec->track_number;
mhit_data->total_tracks = 100;
mhit_data->year = 2000;
@@ -193,6 +193,7 @@
mhit_data->is_played = 2;
mhit_data->unk27 = 1;
mhit_data->media_type = 1;
+ mhit_data->num_samples = rec->num_samples;
/* Construct an "mhod" chunk for title. */
if (rec->title && *rec->title) {
Modified: trunk/pmplib/lib/pmp_iriverplus2/ip2db.c
===================================================================
--- trunk/pmplib/lib/pmp_iriverplus2/ip2db.c 2007-02-23 08:43:34 UTC (rev 389)
+++ trunk/pmplib/lib/pmp_iriverplus2/ip2db.c 2007-02-23 09:12:10 UTC (rev 390)
@@ -212,7 +212,7 @@
dst->year = ucs2toi(src->date);
}
dst->filesize = src->filesize;
- dst->duration = src->duration;
+ dst->duration = src->duration / 1000;
dst->sample_rate = src->sample_rate;
dst->bitrate = src->bitrate;
dst->timestamp = src->ts_update;
@@ -297,7 +297,7 @@
dst->track_number = src.track_number;
dst->sample_rate = src.sample_rate;
dst->bitrate = src.bitrate;
- dst->duration = src.duration;
+ dst->duration = src.duration * 1000;
dst->filesize = src.filesize;
dst->ts_update = src.timestamp;
dst->rating = src.rating;
Modified: trunk/pmplib/lib/pmp_iriverplus3/pmp_iriverplus3.c
===================================================================
--- trunk/pmplib/lib/pmp_iriverplus3/pmp_iriverplus3.c 2007-02-23 08:43:34 UTC (rev 389)
+++ trunk/pmplib/lib/pmp_iriverplus3/pmp_iriverplus3.c 2007-02-23 09:12:10 UTC (rev 390)
@@ -541,7 +541,7 @@
}
dst->track_number = src[IP3DBF_MUSIC_TRACKNUMBER].value.word;
dst->bitrate = src[IP3DBF_MUSIC_BITRATE].value.dword;
- dst->duration = src[IP3DBF_MUSIC_DURATION].value.dword;
+ dst->duration = src[IP3DBF_MUSIC_DURATION].value.dword * 1000;
dst->ts_update = src[IP3DBF_MUSIC_CLUSA].value.dword;
dst->rating = src[IP3DBF_MUSIC_RATING].value.word;
}
@@ -585,7 +585,7 @@
ip3db_variant_set_str(&dst[IP3DBF_MUSIC_ALBUM], src->album);
ip3db_variant_set_str(&dst[IP3DBF_MUSIC_GENRE], src->genre);
ip3db_variant_set_str(&dst[IP3DBF_MUSIC_TITLE], src->title);
- ip3db_variant_set_dword(&dst[IP3DBF_MUSIC_DURATION], src->duration);
+ ip3db_variant_set_dword(&dst[IP3DBF_MUSIC_DURATION], src->duration / 1000);
ip3db_variant_set_word(&dst[IP3DBF_MUSIC_RATING], (uint16_t)src->rating);
switch (src->codec) {
case PMPCODEC_MPEGLAYER3:
Modified: trunk/pmplib/lib/pmp_portalplayer1/model_iriver_h10.c
===================================================================
--- trunk/pmplib/lib/pmp_portalplayer1/model_iriver_h10.c 2007-02-23 08:43:34 UTC (rev 389)
+++ trunk/pmplib/lib/pmp_portalplayer1/model_iriver_h10.c 2007-02-23 09:12:10 UTC (rev 390)
@@ -119,7 +119,7 @@
dst->fields[PP1DB_DATFIELD_YEAR].value.dword = ucs2toi(src->date);
}
dst->fields[PP1DB_DATFIELD_FILESIZE].value.dword = src->filesize;
- dst->fields[PP1DB_DATFIELD_DURATION].value.dword = src->duration;
+ dst->fields[PP1DB_DATFIELD_DURATION].value.dword = src->duration / 1000;
dst->fields[PP1DB_DATFIELD_SAMPLERATE].value.dword = src->sample_rate;
dst->fields[PP1DB_DATFIELD_BITRATE].value.dword = src->bitrate;
dst->fields[PP1DB_DATFIELD_UNKNOWN4].value.dword = 0;
@@ -168,7 +168,7 @@
dst->track_number = src->fields[PP1DB_DATFIELD_TRACKNUMBER].value.dword;
dst->sample_rate = src->fields[PP1DB_DATFIELD_SAMPLERATE].value.dword;
dst->bitrate = src->fields[PP1DB_DATFIELD_BITRATE].value.dword;
- dst->duration = src->fields[PP1DB_DATFIELD_DURATION].value.dword;
+ dst->duration = src->fields[PP1DB_DATFIELD_DURATION].value.dword * 1000;
dst->filesize = src->fields[PP1DB_DATFIELD_FILESIZE].value.dword;
dst->ts_update = src->fields[PP1DB_DATFIELD_UNKNOWN6].value.dword;
dst->rating = src->fields[PP1DB_DATFIELD_RATING].value.dword;
Modified: trunk/pmplib/lib/pmp_portalplayer1/model_medion_mdjuke220.c
===================================================================
--- trunk/pmplib/lib/pmp_portalplayer1/model_medion_mdjuke220.c 2007-02-23 08:43:34 UTC (rev 389)
+++ trunk/pmplib/lib/pmp_portalplayer1/model_medion_mdjuke220.c 2007-02-23 09:12:10 UTC (rev 390)
@@ -96,7 +96,7 @@
dst->fields[PP1DB_DATFIELD_SAMPLERATE].value.dword = src->sample_rate;
memset(duration, 0, sizeof(duration));
- itoucs2(src->duration, duration, 10);
+ itoucs2(src->duration / 1000, duration, 10);
dst->fields[PP1DB_DATFIELD_DURATION].value.str = ucs2dup(duration);
dst->fields[PP1DB_DATFIELD_ARTIST].value.str = ucs2dup(src->artist ? src->artist : ucs2cs_unknown);
@@ -134,7 +134,7 @@
dst->bitrate = src->fields[PP1DB_DATFIELD_BITRATE].value.dword;
dst->sample_rate = src->fields[PP1DB_DATFIELD_SAMPLERATE].value.dword;
- dst->duration = ucs2toi(src->fields[PP1DB_DATFIELD_DURATION].value.str);
+ dst->duration = ucs2toi(src->fields[PP1DB_DATFIELD_DURATION].value.str) * 1000;
dst->artist = ucs2dup(src->fields[PP1DB_DATFIELD_ARTIST].value.str);
dst->album = ucs2dup(src->fields[PP1DB_DATFIELD_ALBUM].value.str);
Modified: trunk/pmplib/lib/pmp_portalplayer1/model_msi_megaplayer.c
===================================================================
--- trunk/pmplib/lib/pmp_portalplayer1/model_msi_megaplayer.c 2007-02-23 08:43:34 UTC (rev 389)
+++ trunk/pmplib/lib/pmp_portalplayer1/model_msi_megaplayer.c 2007-02-23 09:12:10 UTC (rev 390)
@@ -93,7 +93,7 @@
dst->fields[PP1DB_DATFIELD_FORMAT].value.dword = 0;
dst->fields[PP1DB_DATFIELD_BITRATE].value.dword = src->bitrate;
dst->fields[PP1DB_DATFIELD_SAMPLERATE].value.dword = src->sample_rate;
- itoucs2(src->duration, tmp, 10);
+ itoucs2(src->duration / 1000, tmp, 10);
dst->fields[PP1DB_DATFIELD_DURATION].value.str = ucs2dup(tmp);
dst->fields[PP1DB_DATFIELD_ARTIST].value.str = ucs2dup(src->artist ? src->artist : ucs2cs_unknown);
dst->fields[PP1DB_DATFIELD_ALBUM].value.str = ucs2dup(src->album ? src->album : ucs2cs_unknown);
@@ -129,7 +129,7 @@
dst->bitrate = src->fields[PP1DB_DATFIELD_BITRATE].value.dword;
dst->sample_rate = src->fields[PP1DB_DATFIELD_SAMPLERATE].value.dword;
- dst->duration = ucs2toi(src->fields[PP1DB_DATFIELD_DURATION].value.str);
+ dst->duration = ucs2toi(src->fields[PP1DB_DATFIELD_DURATION].value.str) * 1000;
dst->artist = ucs2dup(src->fields[PP1DB_DATFIELD_ARTIST].value.str);
dst->album = ucs2dup(src->fields[PP1DB_DATFIELD_ALBUM].value.str);
dst->genre = ucs2dup(src->fields[PP1DB_DATFIELD_GENRE].value.str);
Modified: trunk/pmplib/lib/pmp_portalplayer1/model_samsung.c
===================================================================
--- trunk/pmplib/lib/pmp_portalplayer1/model_samsung.c 2007-02-23 08:43:34 UTC (rev 389)
+++ trunk/pmplib/lib/pmp_portalplayer1/model_samsung.c 2007-02-23 09:12:10 UTC (rev 390)
@@ -100,7 +100,7 @@
dst->fields[PP1DB_DATFIELD_FORMAT].value.dword = 0;
dst->fields[PP1DB_DATFIELD_BITRATE].value.dword = src->bitrate;
dst->fields[PP1DB_DATFIELD_SAMPLERATE].value.dword = src->sample_rate;
- dst->fields[PP1DB_DATFIELD_DURATION].value.dword = src->duration;
+ dst->fields[PP1DB_DATFIELD_DURATION].value.dword = src->duration / 1000;
dst->fields[PP1DB_DATFIELD_ARTIST].value.str = ucs2dup(src->artist ? src->artist : ucs2cs_unknown);
dst->fields[PP1DB_DATFIELD_ALBUM].value.str = ucs2dup(src->album ? src->album : ucs2cs_unknown);
dst->fields[PP1DB_DATFIELD_GENRE].value.str = ucs2dup(src->genre ? src->genre : ucs2cs_unknown);
@@ -139,7 +139,7 @@
dst->bitrate = src->fields[PP1DB_DATFIELD_BITRATE].value.dword;
dst->sample_rate = src->fields[PP1DB_DATFIELD_SAMPLERATE].value.dword;
- dst->duration = src->fields[PP1DB_DATFIELD_DURATION].value.dword;
+ dst->duration = src->fields[PP1DB_DATFIELD_DURATION].value.dword * 1000;
dst->artist = ucs2dup(src->fields[PP1DB_DATFIELD_ARTIST].value.str);
dst->album = ucs2dup(src->fields[PP1DB_DATFIELD_ALBUM].value.str);
Modified: trunk/pmplib/lib/pmp_portalplayer1/model_sirius_s50.c
===================================================================
--- trunk/pmplib/lib/pmp_portalplayer1/model_sirius_s50.c 2007-02-23 08:43:34 UTC (rev 389)
+++ trunk/pmplib/lib/pmp_portalplayer1/model_sirius_s50.c 2007-02-23 09:12:10 UTC (rev 390)
@@ -113,7 +113,7 @@
dst->fields[PP1DB_DATFIELD_FORMAT].value.dword = 0;
dst->fields[PP1DB_DATFIELD_BITRATE].value.dword = src->bitrate;
dst->fields[PP1DB_DATFIELD_SAMPLERATE].value.dword = src->sample_rate;
- dst->fields[PP1DB_DATFIELD_DURATION].value.dword = src->duration;
+ dst->fields[PP1DB_DATFIELD_DURATION].value.dword = src->duration / 1000;
dst->fields[PP1DB_DATFIELD_ARTIST].value.str = ucs2dup(src->artist ? src->artist : ucs2cs_unknown);
dst->fields[PP1DB_DATFIELD_ALBUM].value.str = ucs2dup(src->album ? src->album : ucs2cs_unknown);
dst->fields[PP1DB_DATFIELD_GENRE].value.str = ucs2dup(src->genre ? src->genre : ucs2cs_unknown);
@@ -157,7 +157,7 @@
dst->bitrate = src->fields[PP1DB_DATFIELD_BITRATE].value.dword;
dst->sample_rate = src->fields[PP1DB_DATFIELD_SAMPLERATE].value.dword;
- dst->duration = src->fields[PP1DB_DATFIELD_DURATION].value.dword;
+ dst->duration = src->fields[PP1DB_DATFIELD_DURATION].value.dword * 1000;
dst->artist = ucs2dup(src->fields[PP1DB_DATFIELD_ARTIST].value.str);
dst->album = ucs2dup(src->fields[PP1DB_DATFIELD_ALBUM].value.str);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|