Re: [Dvbstreamer-user] possible bug: MJD conversion
Status: Beta
Brought to you by:
charrea6
From: Adam C. <ad...@dv...> - 2011-02-25 11:06:25
|
On Thu, 2011-02-24 at 14:30 +0100, Alex Metelka wrote: > Hi, > > MJD conversion routine dvbpsi_DecodeMJDUTC() in src/dvbpsi/datetime.c seems to > be buggy. Some dates are converted incorrectly, eg. MJD 0xD945 corresponding > to Mar-01-2011 is resolved as Mar-04-2011 (tested on debian squeeze/amd64). > > I didn't try to debug current routine code with floats, as much simpler > replacement is possible: > > > void dvbpsi_DecodeMJDUTC(uint8_t *p_mjdutc, struct tm *p_date_time) > { > #define BCD_CHAR_TO_INT(_bcd) (((_bcd >> 4) * 10) + (_bcd & 0x0f)) > time_t secs; > > uint16_t i_mjd = (((uint16_t)p_mjdutc[0] << 8) | (uint16_t)(p_mjdutc[1] & > 0xff)); > > secs = (time_t)(((uint32_t)i_mjd-40587)*86400); > > secs += (BCD_CHAR_TO_INT(p_mjdutc[2]))*3600+ > (BCD_CHAR_TO_INT(p_mjdutc[3]))*60+ > (BCD_CHAR_TO_INT(p_mjdutc[4])); > > memcpy(p_date_time, gmtime(&secs), sizeof(struct tm)); > } > > > Regards, > > Alex Thanks for bug report, I did manage to debug the float routines (which come from DVB spec) I'd missed a int conversion. Having worked out what you are doing I've committed a modified patch. Thanks again, Adam |