[PATCH] Format of DVB PROGRAM N.
"Mario Rossi" <[email protected]> Tue, 29 May 2007 21:42:04 +0100
| Newsgroups | gmane.comp.video.mplayer.user.dvb |
|---|---|
| Message-ID | <[email protected]> |
>Nico Sabbi wrote: >> Mario Rossi wrote: >>> BBC HD1 has a PROGRAM N. (36932) bigger than 2^15, so it does not fit >>> well into a signed variable. >>> >>> With this patch the ouput is correct. >>>- mp_msg(MSGT_DEMUXER, MSGL_INFO, " PROGRAM N. %d\n", param->prog); >>>+ mp_msg(MSGT_DEMUXER, MSGL_INFO, " PROGRAM N. %hu\n", param->prog); >> %d is more than enough for a 16 bit int. Excerpt from sprintf() >So it should be just a %u, nothing more, nothing less. >Cheers, >Juri printf does not agree: output with %d VIDEO H264(pid=1502) AUDIO A52(pid=1505) NO SUBS (yet)! PROGRAM N. -28604 with %u VIDEO H264(pid=1502) AUDIO A52(pid=1505) NO SUBS (yet)! PROGRAM N. 4294938692 with %hu VIDEO H264(pid=1502) AUDIO A52(pid=1505) NO SUBS (yet)! PROGRAM N. 36932 with %hd VIDEO H264(pid=1502) AUDIO A52(pid=1505) NO SUBS (yet)! PROGRAM N. -28604 The variable is a 16bit int (so the "h") but it contains a number bigger than the MAX signed 16bit integer (36932 > 32768), so it has to be considered unsigned (u), otherwise the number becomes negative. Since %u is not working either, I guess that the value is pushed in the stack with $FFFF padding (which is natural since it is signed). Maybe the variable "tsdemux_init_t.prog" should be changed to unsigned (since it can contain numbers bigger than 32768), instead of signed (in which case both %d and %u work). cheers