Summary: | ASTERISK-10940: Sent RTP video packets have a timestamp based on a 8000 Hz clock instead of 90000 Hz when mark bit is on | ||
Reporter: | Simon Perreault (sperreault) | Labels: | |
Date Opened: | 2007-11-30 14:53:15.000-0600 | Date Closed: | 2008-04-09 15:18:58 |
Priority: | Major | Regression? | No |
Status: | Closed/Complete | Components: | Core/RTP |
Versions: | Frequency of Occurrence | ||
Related Issues: | |||
Environment: | Attachments: | ( 0) 11429-frametype.diff ( 1) rtp_video.diff | |
Description: | When you ast_write() a video packet, you are supposed to put the mark bit into the LSB of the subclass member: f->subclass = AST_FORMAT_H263 | 1; This makes this conditional in ast_rtp_raw_write() true while it should be false: if (f->subclass & AST_FORMAT_AUDIO_MASK) { The solution is simple: invert the video and audio code paths. First check for video, and then if video is not present check for audio. | ||
Comments: | By: Jason Parker (jparker) 2007-11-30 15:50:32.000-0600 I'm a little confused about this patch. It appears that all you're doing it swapping the order of checking subclass again AST_FORMAT_AUDIO_MASK and AST_FORMAT_VIDEO_MASK. The problem with this is, as far as I know, frames only have either audio or video - not both. If a subclass is in AST_FORMAT_AUDIO_MASK, it cannot also be in AST_FORMAT_VIDEO_MASK (and vice versa). Thus, changing the order would do nothing... By: Simon Perreault (sperreault) 2007-11-30 17:16:03.000-0600 The trick is with the mask bit. If your video frame has the mask bit, then the least significant bit of subclass will be 1, which will cause the audio code to be executed. If you first check for video, then the video code will be executed if there is video, regardless of the mask bit. By: Jason Parker (jparker) 2007-11-30 17:21:06.000-0600 Then how about a silly question.. Why are we checking subclass, when we can just check frametype? By: Simon Perreault (sperreault) 2007-11-30 17:30:53.000-0600 Here's a silly answer: I don't know! I just wanted a quick fix with no chances of breaking anything. I think it should be investigated whether we can use frametype or not, but should be done separately from fixing this bug. By: Jason Parker (jparker) 2007-11-30 18:37:42.000-0600 I think the appropriate fix here would be to drop the checking of subclass altogether (unless you still need to check for the LSB of subclass being 1 - then that can be inside the if), and check whether frametype is either AST_FRAME_VOICE or AST_FRAME_VIDEO. By: Simon Perreault (sperreault) 2007-11-30 19:20:40.000-0600 If you're confident then go ahead! ;) By: Simon Perreault (sperreault) 2007-12-11 13:18:43.000-0600 Is there anything I can do to help get this fixed? By: Jason Parker (jparker) 2008-01-15 18:51:04.000-0600 Testing what I suggested would be a good way to help get it fixed. :) See bugnote:74623 By: Jason Parker (jparker) 2008-03-04 17:26:54.000-0600 This patch is what I was suggesting. Could you try it? By: Digium Subversion (svnbot) 2008-03-19 13:16:19 Repository: asterisk Revision: 110019 U branches/1.4/main/rtp.c ------------------------------------------------------------------------ r110019 | file | 2008-03-19 13:16:17 -0500 (Wed, 19 Mar 2008) | 6 lines Make sure that the mark bit does not incorrectly cause video frame timestamps to be calculated as if they are audio frames. (closes issue ASTERISK-10940) Reported by: sperreault Patches: 11429-frametype.diff uploaded by qwell (license 4) ------------------------------------------------------------------------ http://svn.digium.com/view/asterisk?view=rev&revision=110019 By: Digium Subversion (svnbot) 2008-03-19 13:21:19 Repository: asterisk Revision: 110020 _U trunk/ U trunk/main/rtp.c ------------------------------------------------------------------------ r110020 | file | 2008-03-19 13:21:19 -0500 (Wed, 19 Mar 2008) | 14 lines Merged revisions 110019 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r110019 | file | 2008-03-19 15:20:28 -0300 (Wed, 19 Mar 2008) | 6 lines Make sure that the mark bit does not incorrectly cause video frame timestamps to be calculated as if they are audio frames. (closes issue ASTERISK-10940) Reported by: sperreault Patches: 11429-frametype.diff uploaded by qwell (license 4) ........ ------------------------------------------------------------------------ http://svn.digium.com/view/asterisk?view=rev&revision=110020 By: Digium Subversion (svnbot) 2008-03-19 13:22:11 Repository: asterisk Revision: 110021 _U branches/1.6.0/ U branches/1.6.0/main/rtp.c ------------------------------------------------------------------------ r110021 | file | 2008-03-19 13:22:11 -0500 (Wed, 19 Mar 2008) | 22 lines Merged revisions 110020 via svnmerge from https://origsvn.digium.com/svn/asterisk/trunk ................ r110020 | file | 2008-03-19 15:25:33 -0300 (Wed, 19 Mar 2008) | 14 lines Merged revisions 110019 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r110019 | file | 2008-03-19 15:20:28 -0300 (Wed, 19 Mar 2008) | 6 lines Make sure that the mark bit does not incorrectly cause video frame timestamps to be calculated as if they are audio frames. (closes issue ASTERISK-10940) Reported by: sperreault Patches: 11429-frametype.diff uploaded by qwell (license 4) ........ ................ ------------------------------------------------------------------------ http://svn.digium.com/view/asterisk?view=rev&revision=110021 By: Digium Subversion (svnbot) 2008-04-09 15:15:44 Repository: asterisk Revision: 113924 U team/group/NoLossCDR-Redux2/build_tools/cflags.xml U team/group/NoLossCDR-Redux2/pbx/pbx_ael.c U team/group/NoLossCDR-Redux2/phoneprov/000000000000-directory.xml U team/group/NoLossCDR-Redux2/phoneprov/polycom.xml A team/group/NoLossCDR-Redux2/phoneprov/polycom_line.xml ------------------------------------------------------------------------ r113924 | juggie | 2008-04-09 15:15:41 -0500 (Wed, 09 Apr 2008) | 211 lines Merged revisions 110020,110023,110036,110084,110087,110132,110161,110164,110211,110237,110268,110270,110272,110303,110337,110339,110396,110444 via svnmerge from https://origsvn.digium.com/svn/asterisk/trunk ................ r110020 | file | 2008-03-19 14:25:33 -0400 (Wed, 19 Mar 2008) | 14 lines Merged revisions 110019 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r110019 | file | 2008-03-19 15:20:28 -0300 (Wed, 19 Mar 2008) | 6 lines Make sure that the mark bit does not incorrectly cause video frame timestamps to be calculated as if they are audio frames. (closes issue ASTERISK-10940) Reported by: sperreault Patches: 11429-frametype.diff uploaded by qwell (license 4) ........ ................ r110023 | russell | 2008-03-19 14:57:16 -0400 (Wed, 19 Mar 2008) | 2 lines remove svnmerge-blocked property that is not supposed to be here ................ r110036 | file | 2008-03-19 15:13:39 -0400 (Wed, 19 Mar 2008) | 12 lines Merged revisions 110035 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r110035 | file | 2008-03-19 16:11:33 -0300 (Wed, 19 Mar 2008) | 4 lines Add sanity checking for position resuming. We *have* to make sure that the position does not exceed the total number of files present, and we have to make sure that the position's filename is the same as previous. These values can change if a music class is reloaded and give unpredictable behavior. (closes issue ASTERISK-11136) Reported by: junky ........ ................ r110084 | mmichelson | 2008-03-19 16:34:13 -0400 (Wed, 19 Mar 2008) | 12 lines Merged revisions 110083 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r110083 | mmichelson | 2008-03-19 15:33:03 -0500 (Wed, 19 Mar 2008) | 4 lines Add a missing unlock in the case that memory allocation fails in app_chanspy. Thanks to Russell for confirming that this was an issue. ........ ................ r110087 | jpeeler | 2008-03-19 17:05:24 -0400 (Wed, 19 Mar 2008) | 2 lines This change adds DNS manager support for registrations not referencing a peer entry. It looks like there is support for DNS manager for realtime peers as well, however it is not implemented correctly. The improper usage occurs when ast_dnsmgr_lookup is called with one of the arguments being an address from the stack to be continually updated. The variable from the stack will go out of scope and dnsmgr will continue to try and update the memory there, causing possible stack corruption. This problem will be worked on next as well as adding DNS manager support for peer entries. ................ r110132 | qwell | 2008-03-19 17:56:15 -0400 (Wed, 19 Mar 2008) | 1 line Rename very poorly named function to reflect what it actually does. This was causing quite a bit of confusion for me... ................ r110161 | qwell | 2008-03-19 18:25:34 -0400 (Wed, 19 Mar 2008) | 5 lines Rename DSP_FEATURE_DTMF_DETECT, because we are *NOT* only detecting DTMF digits. This was very misleading. Early cleanup for issue ASTERISK-11413 ................ r110164 | russell | 2008-03-19 18:58:33 -0400 (Wed, 19 Mar 2008) | 13 lines Merged revisions 110163 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r110163 | russell | 2008-03-19 17:57:59 -0500 (Wed, 19 Mar 2008) | 5 lines Fix a bug where when calls on the trunk side hang up while on hold, the state is not properly reflected. (closes issue ASTERISK-11434, reported by anakaoka, patched by me) ........ ................ r110211 | tilghman | 2008-03-19 23:14:59 -0400 (Wed, 19 Mar 2008) | 2 lines Fix recent trunk breakage ................ r110237 | tilghman | 2008-03-20 01:06:12 -0400 (Thu, 20 Mar 2008) | 5 lines Upgrade the sounds version; add several directory enhancements: 1) Number of digits to enter can now be configured 2) The digits can now match on both first AND last name, instead of only one or the other (Closes issue ASTERISK-6965) ................ r110268 | russell | 2008-03-20 13:41:22 -0400 (Thu, 20 Mar 2008) | 27 lines Add some fixes that I made in regards to wideband codec handling to get G.722 music on hold working for me. (issue ASTERISK-11594, reported by milazzo and jsmith, patches by me) res/res_musiconhold.c: - I moved a single line so that the sample queue update happened before ast_write(). The reason that this was a bug is that the G.722 frame originally says it has 320 samples in it (which is correct). However, when the frame is written to a channel that uses RTP, main/rtp.c modifies the frame to cut the number of samples in half before it sends it on the wire. This is to account for the stupid incorrect G.722 spec that makes it so we have to lie about the number of samples with RTP. I should probably go and re-work the RTP code so it doesn't modify the frame so that a bug like this won't happen in the future. However, this change to MOH is harmless. main/channel.c: - I made two fixes in regards to generator timing. Generators use samples for timing. However, this code assumed 8 kHz samples. In one case, it was a hard coded 160 samples, that is now written as the sample rate / 50. The other place was dealing with timing a generator based on frames coming from the other direction. However, that would have only worked if the sample rates for the formats in both directions were the same. The code now takes into account that the sample rates may differ, and scales the generator samples accordingly. ................ r110270 | russell | 2008-03-20 13:45:29 -0400 (Thu, 20 Mar 2008) | 2 lines Remove astobj.h from some places where it wasn't needed ................ r110272 | mmichelson | 2008-03-20 14:01:36 -0400 (Thu, 20 Mar 2008) | 3 lines Add missing unlock ................ r110303 | russell | 2008-03-20 16:08:26 -0400 (Thu, 20 Mar 2008) | 8 lines Fix a bug when using zaptel timing for playing back files that have a sample rate other than 8 kHz. The issue here is that format modules give a "whennext" sample value, which is used to calculate when to set a timer for to retrieve the next frame. However, the zaptel timer operates on 8 kHz samples, so this must be taken into account. (another part of issue ASTERISK-11594, reported by milazzo and jsmith, patch by me) ................ r110337 | russell | 2008-03-20 17:55:50 -0400 (Thu, 20 Mar 2008) | 22 lines Merged revisions 110336 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.4 ................ r110336 | russell | 2008-03-20 16:54:58 -0500 (Thu, 20 Mar 2008) | 14 lines Merged revisions 110335 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.2 ........ r110335 | russell | 2008-03-20 16:53:27 -0500 (Thu, 20 Mar 2008) | 6 lines Fix some very broken code that was introduced in 1.2.26 as a part of the security fix. The dnsmgr is not appropriate here. The dnsmgr takes a pointer to an address structure that a background thread continuously updates. However, in these cases, a stack variable was passed. That means that the dnsmgr thread would be continuously writing to bogus memory. ........ ................ ................ r110339 | russell | 2008-03-20 18:02:20 -0400 (Thu, 20 Mar 2008) | 3 lines Use the correct buffer for g722tolin16_sample. This shouldn't have caused any problems, but Qwell noticed the typo here. ................ r110396 | russell | 2008-03-20 19:14:13 -0400 (Thu, 20 Mar 2008) | 17 lines Merged revisions 110395 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r110395 | russell | 2008-03-20 18:13:56 -0500 (Thu, 20 Mar 2008) | 9 lines Shorten the ast_waitfor() timeout from 500 ms to 50 ms in the autoservice thread. This really should not make a difference except in very rare cases. That case would be that all of the channels in autoservice are not generating any frames. In that case, this change reduces the potential amount of time that a thread waits in ast_autoservice_stop() for the autoservice thread to wrap back around to the beginning of its loop. (closes issue ASTERISK-11689, reported by dimas) ........ ................ r110444 | tilghman | 2008-03-20 21:44:38 -0400 (Thu, 20 Mar 2008) | 2 lines Add note of the added Directory options, from commit 110237 (closes issue ASTERISK-6965) ................ ------------------------------------------------------------------------ http://svn.digium.com/view/asterisk?view=rev&revision=113924 By: Digium Subversion (svnbot) 2008-04-09 15:18:58 Repository: asterisk Revision: 113925 U team/group/NoLossCDR-Redux2/channels/chan_h323.c U team/group/NoLossCDR-Redux2/channels/chan_usbradio.c U team/group/NoLossCDR-Redux2/channels/misdn_config.c ------------------------------------------------------------------------ r113925 | juggie | 2008-04-09 15:18:55 -0500 (Wed, 09 Apr 2008) | 211 lines Merged revisions 110020,110023,110036,110084,110087,110132,110161,110164,110211,110237,110268,110270,110272,110303,110337,110339,110396,110444 via svnmerge from https://origsvn.digium.com/svn/asterisk/trunk ................ r110020 | file | 2008-03-19 14:25:33 -0400 (Wed, 19 Mar 2008) | 14 lines Merged revisions 110019 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r110019 | file | 2008-03-19 15:20:28 -0300 (Wed, 19 Mar 2008) | 6 lines Make sure that the mark bit does not incorrectly cause video frame timestamps to be calculated as if they are audio frames. (closes issue ASTERISK-10940) Reported by: sperreault Patches: 11429-frametype.diff uploaded by qwell (license 4) ........ ................ r110023 | russell | 2008-03-19 14:57:16 -0400 (Wed, 19 Mar 2008) | 2 lines remove svnmerge-blocked property that is not supposed to be here ................ r110036 | file | 2008-03-19 15:13:39 -0400 (Wed, 19 Mar 2008) | 12 lines Merged revisions 110035 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r110035 | file | 2008-03-19 16:11:33 -0300 (Wed, 19 Mar 2008) | 4 lines Add sanity checking for position resuming. We *have* to make sure that the position does not exceed the total number of files present, and we have to make sure that the position's filename is the same as previous. These values can change if a music class is reloaded and give unpredictable behavior. (closes issue ASTERISK-11136) Reported by: junky ........ ................ r110084 | mmichelson | 2008-03-19 16:34:13 -0400 (Wed, 19 Mar 2008) | 12 lines Merged revisions 110083 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r110083 | mmichelson | 2008-03-19 15:33:03 -0500 (Wed, 19 Mar 2008) | 4 lines Add a missing unlock in the case that memory allocation fails in app_chanspy. Thanks to Russell for confirming that this was an issue. ........ ................ r110087 | jpeeler | 2008-03-19 17:05:24 -0400 (Wed, 19 Mar 2008) | 2 lines This change adds DNS manager support for registrations not referencing a peer entry. It looks like there is support for DNS manager for realtime peers as well, however it is not implemented correctly. The improper usage occurs when ast_dnsmgr_lookup is called with one of the arguments being an address from the stack to be continually updated. The variable from the stack will go out of scope and dnsmgr will continue to try and update the memory there, causing possible stack corruption. This problem will be worked on next as well as adding DNS manager support for peer entries. ................ r110132 | qwell | 2008-03-19 17:56:15 -0400 (Wed, 19 Mar 2008) | 1 line Rename very poorly named function to reflect what it actually does. This was causing quite a bit of confusion for me... ................ r110161 | qwell | 2008-03-19 18:25:34 -0400 (Wed, 19 Mar 2008) | 5 lines Rename DSP_FEATURE_DTMF_DETECT, because we are *NOT* only detecting DTMF digits. This was very misleading. Early cleanup for issue ASTERISK-11413 ................ r110164 | russell | 2008-03-19 18:58:33 -0400 (Wed, 19 Mar 2008) | 13 lines Merged revisions 110163 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r110163 | russell | 2008-03-19 17:57:59 -0500 (Wed, 19 Mar 2008) | 5 lines Fix a bug where when calls on the trunk side hang up while on hold, the state is not properly reflected. (closes issue ASTERISK-11434, reported by anakaoka, patched by me) ........ ................ r110211 | tilghman | 2008-03-19 23:14:59 -0400 (Wed, 19 Mar 2008) | 2 lines Fix recent trunk breakage ................ r110237 | tilghman | 2008-03-20 01:06:12 -0400 (Thu, 20 Mar 2008) | 5 lines Upgrade the sounds version; add several directory enhancements: 1) Number of digits to enter can now be configured 2) The digits can now match on both first AND last name, instead of only one or the other (Closes issue ASTERISK-6965) ................ r110268 | russell | 2008-03-20 13:41:22 -0400 (Thu, 20 Mar 2008) | 27 lines Add some fixes that I made in regards to wideband codec handling to get G.722 music on hold working for me. (issue ASTERISK-11594, reported by milazzo and jsmith, patches by me) res/res_musiconhold.c: - I moved a single line so that the sample queue update happened before ast_write(). The reason that this was a bug is that the G.722 frame originally says it has 320 samples in it (which is correct). However, when the frame is written to a channel that uses RTP, main/rtp.c modifies the frame to cut the number of samples in half before it sends it on the wire. This is to account for the stupid incorrect G.722 spec that makes it so we have to lie about the number of samples with RTP. I should probably go and re-work the RTP code so it doesn't modify the frame so that a bug like this won't happen in the future. However, this change to MOH is harmless. main/channel.c: - I made two fixes in regards to generator timing. Generators use samples for timing. However, this code assumed 8 kHz samples. In one case, it was a hard coded 160 samples, that is now written as the sample rate / 50. The other place was dealing with timing a generator based on frames coming from the other direction. However, that would have only worked if the sample rates for the formats in both directions were the same. The code now takes into account that the sample rates may differ, and scales the generator samples accordingly. ................ r110270 | russell | 2008-03-20 13:45:29 -0400 (Thu, 20 Mar 2008) | 2 lines Remove astobj.h from some places where it wasn't needed ................ r110272 | mmichelson | 2008-03-20 14:01:36 -0400 (Thu, 20 Mar 2008) | 3 lines Add missing unlock ................ r110303 | russell | 2008-03-20 16:08:26 -0400 (Thu, 20 Mar 2008) | 8 lines Fix a bug when using zaptel timing for playing back files that have a sample rate other than 8 kHz. The issue here is that format modules give a "whennext" sample value, which is used to calculate when to set a timer for to retrieve the next frame. However, the zaptel timer operates on 8 kHz samples, so this must be taken into account. (another part of issue ASTERISK-11594, reported by milazzo and jsmith, patch by me) ................ r110337 | russell | 2008-03-20 17:55:50 -0400 (Thu, 20 Mar 2008) | 22 lines Merged revisions 110336 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.4 ................ r110336 | russell | 2008-03-20 16:54:58 -0500 (Thu, 20 Mar 2008) | 14 lines Merged revisions 110335 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.2 ........ r110335 | russell | 2008-03-20 16:53:27 -0500 (Thu, 20 Mar 2008) | 6 lines Fix some very broken code that was introduced in 1.2.26 as a part of the security fix. The dnsmgr is not appropriate here. The dnsmgr takes a pointer to an address structure that a background thread continuously updates. However, in these cases, a stack variable was passed. That means that the dnsmgr thread would be continuously writing to bogus memory. ........ ................ ................ r110339 | russell | 2008-03-20 18:02:20 -0400 (Thu, 20 Mar 2008) | 3 lines Use the correct buffer for g722tolin16_sample. This shouldn't have caused any problems, but Qwell noticed the typo here. ................ r110396 | russell | 2008-03-20 19:14:13 -0400 (Thu, 20 Mar 2008) | 17 lines Merged revisions 110395 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r110395 | russell | 2008-03-20 18:13:56 -0500 (Thu, 20 Mar 2008) | 9 lines Shorten the ast_waitfor() timeout from 500 ms to 50 ms in the autoservice thread. This really should not make a difference except in very rare cases. That case would be that all of the channels in autoservice are not generating any frames. In that case, this change reduces the potential amount of time that a thread waits in ast_autoservice_stop() for the autoservice thread to wrap back around to the beginning of its loop. (closes issue ASTERISK-11689, reported by dimas) ........ ................ r110444 | tilghman | 2008-03-20 21:44:38 -0400 (Thu, 20 Mar 2008) | 2 lines Add note of the added Directory options, from commit 110237 (closes issue ASTERISK-6965) ................ ------------------------------------------------------------------------ http://svn.digium.com/view/asterisk?view=rev&revision=113925 |