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. |