Commit Graph

458 Commits

Author SHA1 Message Date
Anthony Minessale d1e466e76d FS-7500: clock in 15fps for now 2015-05-28 12:47:27 -05:00
Anthony Minessale 33d9b8066b FS-7500: return cng frames when waiting for a key 2015-05-28 12:47:27 -05:00
Anthony Minessale 22a4a4dd7e FS-7500: set default bandwidth to 1mb 2015-05-28 12:47:25 -05:00
Michael Jerris 4662118ca8 CID:1294504: make sure to check for NULL frame 2015-05-28 12:47:24 -05:00
Michael Jerris 6dcff0a79a CID:1294431: make sure not to check uninitialized value 2015-05-28 12:47:24 -05:00
Michael Jerris 35be8a16e9 CID:1024241: clean up null checking on var that can never be null anyways 2015-05-28 12:47:23 -05:00
Michael Jerris 200199e05f CID:1023990: remove unused code 2015-05-28 12:47:23 -05:00
Michael Jerris b78aac6196 FS-7456: also more complete fix for FS-7440, handle sdp with m lines in any order 2015-05-28 12:47:23 -05:00
Anthony Minessale 2a36066ea0 FS-7500: make 15fps the min detected speed 2015-05-28 12:47:23 -05:00
Michael Jerris 40d0e1fdd7 FS-7440: handle m=video lines before m=audio 2015-05-28 12:47:22 -05:00
William King f09dad317f CID: 1294489 missing break statement which would cause recvonly sdp to be treated as sendrecv 2015-05-28 12:47:21 -05:00
William King acec23d8c8 CID: 1294518 remove chance for divide by 0 2015-05-28 12:47:21 -05:00
Seven Du 30463bfc1e FS-7513: break is safer than continue
when the encoder returns 0, it means no more data will come and we should not try again
2015-05-28 12:47:21 -05:00
Anthony Minessale d8e5334a05 FS-7513: add some mutexes on video_read_callback code 2015-05-28 12:47:21 -05:00
Seven Du 046798a057 FS-7513: don't write 0 data, openh264 might return 0 2015-05-28 12:47:20 -05:00
Anthony Minessale c312b50da7 FS-7515: update cv to use new alpha supported switch_image_t 2015-05-28 12:47:20 -05:00
Seven Du 0ddfea1d1b FS-7500: refactor to support Alpha channel on core image, only ARGB & I420 are supported 2015-05-28 12:47:20 -05:00
Anthony Minessale 3e24ac5e6b FS-7501: add auto sync of jb and fps detection 2015-05-28 12:47:18 -05:00
Anthony Minessale 01c0a1d44d FS-7500: don't send blank vid on sleep unless there is nothing else going on 2015-05-28 12:47:17 -05:00
Anthony Minessale 62c3ddfab3 FS-7500: fix sleep sending blank img too fast 2015-05-28 12:47:17 -05:00
Brian West 379950f523 FS-7500: video introp tweaks 2015-05-28 12:47:15 -05:00
Anthony Minessale ee81167996 FS-7502: add some changes for video media bug 2015-05-28 12:47:15 -05:00
Anthony Minessale 1cbc3c58a5 FS-7502: add record_concat_video=true to show split video recordings with session record 2015-05-28 12:47:15 -05:00
Anthony Minessale dc7608fb9e FS-7501: add mutex to vid buf and fix regression from last regression fix 2015-05-28 12:47:14 -05:00
Anthony Minessale 84ca513353 FS-7500: fix some regressions regarding passthru video 2015-05-28 12:47:14 -05:00
Anthony Minessale eb819b51b5 FS-7509: WIP media reneg stuff 2015-05-28 12:47:14 -05:00
Anthony Minessale 7c294f242f FS-7504: allow <modname>.<codecname> support so multiple modules can exist for the same codec 2015-05-28 12:47:13 -05:00
Anthony Minessale fdcfcaece9 FS-7500: don't wait for video ready from inside video thread that sets that flag 2015-05-28 12:47:11 -05:00
Anthony Minessale 24254bb1fd FS-7500: revert 2015-05-28 12:47:11 -05:00
Anthony Minessale d3359ff9f0 FS-7500: don't wait for video ready from inside video thread that sets that flag 2015-05-28 12:47:11 -05:00
Anthony Minessale 517a6d4ab7 FS-7503: add video read flags to choose flush and or block mode and add stuff to vlc so it can play youtube urls 2015-05-28 12:47:10 -05:00
Anthony Minessale 6f379f43c1 FS-7500: fix calculation bug in switch_img_fit 2015-05-28 12:47:10 -05:00
Anthony Minessale c9cccd519a FS-7509: add some more bandwidth control features 2015-05-28 12:47:09 -05:00
Anthony Minessale 405abc5177 FS-7500: fix regression in no-camera mode 2015-05-28 12:47:08 -05:00
Anthony Minessale 5755b7849e FS-7513: move code to core 2015-05-28 12:47:08 -05:00
Anthony Minessale ee09575466 FS-7500: try not do 2015-05-28 12:47:08 -05:00
Anthony Minessale b1e8f86b37 FS-7500: block overlapping writes 2015-05-28 12:47:08 -05:00
Anthony Minessale 78d06832e7 FS-7500: add force flag 2015-05-28 12:47:07 -05:00
Anthony Minessale ab34c9a99c FS-7500: stick with little train img 2015-05-28 12:47:07 -05:00
Anthony Minessale 5b509a72ef FS-7505: train video a little in beginning and make play file wait for it to train 2015-05-28 12:47:07 -05:00
Anthony Minessale baa3d9cd7c FS-7503 FS-7514 FS-7513: fix some buffering bugs in vlc and set mod_conference to match the rate and channels when calling vlc files 2015-05-28 12:47:06 -05:00
Anthony Minessale 59da14542f FS-7505 FS-7514: working towards vid rec 2015-05-28 12:47:06 -05:00
Anthony Minessale a42f40f938 FS-7514 FS-7505: clean up more from yesterday 2015-05-28 12:47:06 -05:00
Anthony Minessale a63dab7a4a FS-7503 FS-7514: A bunch of stuff:
Get filehandles working with video in some cases (if using vlc://):
    mod_conference for play and record video (will record the canvas in mix mode or floor holder in non-mix mode)
    regular playback app should be able to play vlc streams

Add no-minimize-encoding member flag so particilar memebers can opt out of that setting and still get their own encoded stream (for bw related needs)

TODO:

  mod_vlc is a mess.  Find a way to merge video_context and file_context.  They are very similar and they are intertwined and messy.
  Find out why vlc creates messed up mp4 files that don't play everywhere
  Get VLC so it can record aac, mp4x webm
2015-05-28 12:47:06 -05:00
Anthony Minessale 4bcc6e6d64 FS-7503 FS-7514: First crack at recording mp4 <action application="capture_video" data="vlc://#transcode{vcodec=h264,acodec=mp3}:std{access=file,mux=mp4,dst=/var/www/sounds/file.mp4}"/> 2015-05-28 12:47:05 -05:00
Anthony Minessale 2f0f408984 FS-7500: ping video thread on shutdown so it can end 2015-05-28 12:47:04 -05:00
Seven Du afc67e517b FS-7500: fix type mismatch 2015-05-28 12:47:04 -05:00
Anthony Minessale 628edd1183 FS-7513: add code to track media direction to avoid assigning floor or video layers to those with no signal 2015-05-28 12:47:03 -05:00
Anthony Minessale 2c4c2587ed FS-7513 FS-7509: crack at screen share 2015-05-28 12:47:03 -05:00
Anthony Minessale fcf32fd53d FS-7500 FS-7513: add video bandwidth control function and use it in mod_conference 2015-05-28 12:46:58 -05:00
Anthony Minessale a56e65bace FS-7513: add flag to choose between encoding each frame and using central encoder per codec, add parsing for floor fields and reservation fields in layouts, add param to control bandwidth for consolidated codecs, add audio-position attr to images in layout to sync with virtual HRTF 2015-05-28 12:46:58 -05:00
Anthony Minessale fa5d6af2cd FS-7513: refactor conference video muxing to create one distinct encoder per codec used and only create one encoded frame per distinct codec, store current image used by layer on the layer so it is not destroyed before the canvas is written, refactor and rearrange some functions 2015-05-28 12:46:57 -05:00
Anthony Minessale 8d3f93152e FS-7508: parse both bw vars the same 2015-05-28 12:46:57 -05:00
Seven Du 93ee6158ff FS-7514: make vlc endpoint works with originate in addition to bridge 2015-05-28 12:46:57 -05:00
Anthony Minessale 1422158271 FS-7500: add to last commit 2015-05-28 12:46:56 -05:00
Anthony Minessale ac140fb6dd FS-7500: codec tweaks 2015-05-28 12:46:56 -05:00
Anthony Minessale 260e277f36 FS-7513: conf WIP hard code 4x4 squares in 720p more to come 2015-05-28 12:46:56 -05:00
Anthony Minessale d6ef34a725 FS-7508: trying to mitigate chrome going crazy on reload 2015-05-28 12:46:55 -05:00
Anthony Minessale 4d100bc2e8 FS-7509: stop media on verto detach 2015-05-28 12:46:55 -05:00
Anthony Minessale 59fa1b9ac7 FS-7499: mod vid refresh stuff 2015-05-28 12:46:55 -05:00
Anthony Minessale 955dd099ca FS-7166 #resolve 2015-05-28 12:46:54 -05:00
Anthony Minessale 6789f37b39 # This is a combination of 2 commits.
# The first commit's message is:

FS-7166 #resolve

# This is the 2nd commit message:

revert
2015-05-28 12:46:54 -05:00
Anthony Minessale a69938c3d5 FS-7500: factor back in video_thread callback and move it to the video_read_frame 2015-05-28 12:46:53 -05:00
Anthony Minessale 81887e9bfc FS-7501: add video jitterbuffer debug controls 2015-05-28 12:46:53 -05:00
Anthony Minessale bc24e0f28a support AVPF too 2015-05-28 12:46:53 -05:00
Anthony Minessale 6ba2205cf7 FS-7499: enable nack in video negotiation 2015-05-28 12:46:53 -05:00
Anthony Minessale 4e7cda1b49 FS-7501: remove debug 2015-05-28 12:46:52 -05:00
Anthony Minessale 0d626bc715 FS-7501: more factoring on vid buffer 2015-05-28 12:46:52 -05:00
Seven Du a50789f97f FS-7499: magic number to macro 2015-05-28 12:46:52 -05:00
Anthony Minessale ae44bd27e2 FS-7499: tweaks to rate of fir/pli 2015-05-28 12:46:51 -05:00
Anthony Minessale 063eec1e8e FS-7500: fix recovery for video 2015-05-28 12:46:51 -05:00
Anthony Minessale 76ec99ed97 FS-7500: poll rtp on answer until dtls is negotiated 2015-05-28 12:46:51 -05:00
Anthony Minessale 6a7509ffbc FS-7499: default rtcp to once a second for video and every 5 for audio 2015-05-28 12:46:51 -05:00
Anthony Minessale be21d4f28f FS-7500: use unsigned int for frame->timestamp 2015-05-28 12:46:50 -05:00
Anthony Minessale 970064294c FS-7500: refactoring 2015-05-28 12:46:50 -05:00
Anthony Minessale 8f0910509f FS-7500: add keyframe req and session refresh req debounce 2015-05-28 12:46:49 -05:00
Anthony Minessale 2ea12656ea FS-7500: improvement for conf vid 2015-05-28 12:46:49 -05:00
Anthony Minessale 853873725b FS-7500: factor out the write_image callback and fix the vlc video endpoint to setup and match the audio params of the A leg when bridged 2015-05-28 12:46:48 -05:00
Anthony Minessale 01fda5748c FS-7500: another round of trying to make things work 2015-05-28 12:46:48 -05:00
Anthony Minessale a8b00acda7 FS-7500: sync up going both ways after picture reset 2015-05-28 12:46:48 -05:00
Anthony Minessale b90d24a05f FS-7513: fix video switching in conference 2015-05-28 12:46:48 -05:00
Anthony Minessale b8577d0ce9 FS-7500: fix seg and clean up keyframe code 2015-05-28 12:46:48 -05:00
Anthony Minessale ca70f76a8b FS-7500: refresh vid the other way too when asking for keyframe 2015-05-28 12:46:48 -05:00
Anthony Minessale c874fe05d8 FS-7500: SQUASH ME WITH THE LAST ONE 2015-05-28 12:46:47 -05:00
Anthony Minessale b8ba1a1469 FS-7500: reduce CNG frames on video and move debug from mod_fsv to the core with a flag to enable it since the raw packet is not available anymore when you set DECODED READ flag 2015-05-28 12:46:47 -05:00
Anthony Minessale a74b6f62a2 FS-7500: fix some of the debugging tools 2015-05-28 12:46:46 -05:00
Anthony Minessale e7d34f3170 FS-7508: tolerate some messed up packets a little more 2015-05-28 12:46:45 -05:00
Anthony Minessale 96025a407d FS-7500: remove debug 2015-05-28 12:46:45 -05:00
Anthony Minessale d7af2b128c FS-7500: clean up logic of encoder flow and set rules on return values and tweak some codec settings on vp8 2015-05-28 12:46:45 -05:00
Anthony Minessale 22020c86cb FS-7500: add SFF_USE_VIDEO_TIMESTAMP to tell video write frame if it needs to use a timer or not for timestamps 2015-05-28 12:46:45 -05:00
Anthony Minessale 0cd5658caa FS-7500: another refactoring pass, temp code still in place, WORK IN PROGRESS 2015-05-28 12:46:44 -05:00
Seven Du 258dacc742 FS-7500: fix if statement 2015-05-28 12:46:44 -05:00
Anthony Minessale 44e7929507 FS-7500: revert earlier bridge change 2015-05-28 12:46:44 -05:00
Anthony Minessale 3c29d4e8a7 FS-7500: mark places to fix later 2015-05-28 12:46:44 -05:00
Anthony Minessale 659c1e474e FS-7500: Work in progress. Added codec config params that can be set from session and made vpx codec re-init on size change. Also add periodic key frame timer 2015-05-28 12:46:44 -05:00
Anthony Minessale 365a5dd820 FS-7500: major refactoring pass. Push concepts from mod_vlc as deep as possible and flesh out api to use everywhere else. Round 2 will be to convert the bridge and other places using the same code 2015-05-28 12:46:44 -05:00
Anthony Minessale 765fff3d75 FS-7500: add support for codec control and use it to pass messages down to the codec and use it to implement keyframe reset for fir, pli and nack. Later we will expand to handle nack correctly. 2015-05-28 12:46:44 -05:00
Seven Du 35ff4b5cda FS-7500: add ability to insert a custom callback to the core video thread
the callback will be called on each loop on read video frame, or
the callback function call run it's own loop to take over the core
loop so it can read video from session by itself.

the callback function can -

return SWITCH_STATUS_SUCCESS to wait another loop
return SWITCH_STATUS_CONTINUE to continue use the default behaviour
return anything else will break the core video loop and end the
       core thread
2015-05-28 12:46:43 -05:00
Seven Du ea2f00b3d9 FS-7500: refactor to use switch_core_video
added switch_core_codec_encode_video and switch_core_codec_decode video and add separate video implementations
the switch_core_video code depends on libvpx, wraped into the switch_ namespace like switch_apr, need to figure out how to find the correct libvpx lib in autotools
2015-05-28 12:46:42 -05:00
liyang 90818f137e FS-7500: allow using the video thread externally - e.g. non rtp based video 2015-05-28 12:46:42 -05:00
Seven Du 998d933671 FS-7500: initial idea to decode video in core 2015-05-28 12:46:42 -05:00
Seven Du 416745e2cd FS-7500: move video bridge logic to switch_core_media so possible to do transcoding 2015-05-28 12:46:41 -05:00
Anthony Minessale b5f75a0f43 FS-7582 #resolve #comment port from 1.6 its probably better to start working on 1.6 for any webrtc or dtls stuff 2015-05-27 16:48:16 -05:00
Anthony Minessale 2db8f94ab6 skip rtcp addr when mux is set 2015-05-27 06:14:08 -05:00
Michael Jerris 9d68cab2ac FS-7456: also more complete fix for FS-7440, handle sdp with m lines in any order 2015-04-21 12:07:54 -04:00
Michael Jerris 753030acf5 handle m=video lines before m=audio 2015-04-17 11:26:15 -05:00
Anthony Minessale f2a5271009 doh 2015-03-27 00:01:05 -05:00
Anthony Minessale 2c92ef31e3 FS-7386
Conflicts:
	src/switch_core_media.c
2015-03-26 23:52:53 -05:00
Anthony Minessale 83dd94193d FS-7166 #resolve 2015-01-23 21:16:47 -06:00
Anthony Minessale 1710214025 enable nat mode for verto when ext-rtp-ip is set 2015-01-23 20:53:00 +00:00
Anthony Minessale 608d3e2425 wtf 2015-01-22 03:09:59 -06:00
Anthony Minessale 90d3cb633c fix media reload on verto and sip re-invites 2015-01-22 03:07:50 -06:00
Anthony Minessale 9fabbabe90 disable hard-mute when a session has a media bug attached 2014-12-22 19:06:12 -06:00
Anthony Minessale 4ce2ce31ca FS-7092 #resolve #comment resolved in master 2014-12-18 00:45:21 -06:00
Anthony Minessale 6dbb4162e8 FS-7086 FS-6798 #resolve 2014-12-13 00:57:14 -06:00
Anthony Minessale d189e983c8 allow 10ms jb 2014-12-12 17:51:34 -06:00
Anthony Minessale 3d515cf49c re-mark cur_payload as negotiated when detected as such by parser or the rtp could stop working on session re-invite 2014-12-12 00:54:52 -06:00
Anthony Minessale 922fd81523 FS-7015 #resolve #comment The code was not properly catching the 0.0.0.0 after changing it to work with ICE SDPs because it was looking in the wrong place for the 0.0.0.0 2014-12-11 17:18:24 -06:00
Anthony Minessale be0e09bd7f only negotiate codecs that were previously negotiated on re-invites unless its intentional to change codecs 2014-12-11 15:03:53 -06:00
Seven Du dd629c1516 add external_video_source to media handle and expose switch_core_media_start_video_thread() to start the core video thread for non-rtp based media 2014-11-12 08:44:20 +08:00
Anthony Minessale a3a80401fd fix regression caused by missing ! char in commit: 4eb5b388 2014-11-07 17:11:47 -06:00
Anthony Minessale 4eb5b38848 fix bug where re-invites needlessly re-init the codec and jb 2014-11-05 11:35:16 -06:00
Anthony Minessale 7ca4ac566c FS-5949 FS-6945 #comment this change should be relevant to both of these issues, please test. This patch improves the hold parsing and ignores connection address of 0 implying hold when ice is present and disables the auto interpretation by the lower level stack of 0.0.0.0 to automatically imply sendonly to allow FS to decide on its own 2014-10-31 13:49:39 -05:00
Anthony Minessale d1e529aefd Add new hard_mute control to allow apps to request low level mute e.g. from the rtp stack level. Its used in mod_conference to avoid reading audio while muted and possibly reduce some transcoding load 2014-10-27 15:13:42 -04:00
Anthony Minessale 12b6940644 update jb command parser 2014-10-24 15:26:44 -05:00
Anthony Minessale 1f9025d446 FS-6926 #resolve #comment please test and reopen if necessary 2014-10-16 17:57:46 -05:00
Anthony Minessale e245e90761 fix some jitterbuffer constants 2014-10-13 13:05:57 -05:00
Anthony Minessale 9bd3bd30d3 FS-6911 #resolve 2014-10-13 10:36:51 -05:00
Hristo Trendev d48057e23f account for lost frames during ptime detection
This allows the "broken ptime" detection to work correctly when packet
loss is present on the wire. In addition to the timestamps this patch
adds frame sequence tracking and corrects the timestamp difference
only as needed and according to the number of lost packets.

FS-6898 #resolve
2014-10-09 11:37:52 +02:00
Anthony Minessale f7210b2402 some more changes relates to new bypass media controls 2014-10-03 18:43:23 -05:00
Anthony Minessale b2ae5f4cc2 few bugs on recent new features 2014-10-03 15:36:23 -05:00
Jeff Lenk d52cb335db fix trivial vs2010 build errors 2014-10-02 19:47:05 -05:00
Anthony Minessale 8db31f976f fix some recovery issues with dynamic payloads 2014-10-02 18:34:00 -05:00
Anthony Minessale 10a3fa55ef %FEATURE add bypass_media_resume_on_hold and bypass_media_after_hold variables to be set to true to enable these functions on a per channel basis 2014-10-02 17:49:09 -05:00
Anthony Minessale 6bfc05b81e FS-6887 #resolve #comment new bug flag always_auto_adjust (also implicitly sets accept_any_packets) 2014-10-02 11:55:53 -05:00
Anthony Minessale 789e1481ed FS-6880 #resolve #comment I would think that in real life once the call agreed on a codec it would only offer the negotiated codecs but we can fix this to always filter for good measure. I am not sure what the ramifications are of filtering responses but I think this patch will do so as well. 2014-10-01 13:03:50 -05:00
Anthony Minessale 24084adf77 %FEATURE Add new feature to filter the SDP on bypass_media calls to remove or limit codecs.
VARIABLE: bypass_media_sdp_filter

Can be set globally or per leg on the inbound side of a bypass_media bridge.

VALID FILTERS:

remove(): Removes the specified codec if it exists in the SDP.
only():   Removes all codecs besides the one specified (providing that it exists in the sdp) (will not remove telephone-event))

EXAMPLE 1 (remove everything leaving only g729):

  <action application="set" data="bypass_media_sdp_filter=only(g729)"/>
  <action application="set" data="bypass_media=true"/>
  <action application="bridge" data="sofia/internal/1238@conference.freeswitch.org"/>

EXAMPLE 2 (remove everything leaving only g729 and also remove dtmf):

  <action application="set" data="bypass_media_sdp_filter=only(g729)|remove(telephone-event)"/>
  <action application="set" data="bypass_media=true"/>
  <action application="bridge" data="sofia/internal/1238@conference.freeswitch.org"/>

EXAMPLE 3 (remove alaw and speex):

  <action application="set" data="bypass_media_sdp_filter=remove(pcma)|remove(speex)"/>
  <action application="set" data="bypass_media=true"/>
  <action application="bridge" data="sofia/internal/1238@conference.freeswitch.org"/>
2014-10-01 01:28:10 +05:00
Hristo Trendev fbe857e6fa fix ptime from known broken endpoints on re-invite
Freeswitch tries to fix timing issues (wrong ptime) on re-invite the same way
it does for the initial invite. This results in small audio glitches, while it
sends a couple of packets with different ptime, before the timing detection
logic figures out the remote (broken) endpoint true ptime.

In order to avoid unnecessary timing changes, this patch overwrites the
advertised ptime from known broken endpoints with the ptime, which was detected
by freeswitch. It does this by checking if the sip_h_X-Broken-PTIME (1.2.x) or
rtp_h_X-Broken-PTIME (master) variables are set.

FS-6644 #resolve
2014-09-30 11:19:35 +02:00
Anthony Minessale 372455c30a FS-6829 #resolve 2014-09-19 02:28:47 +05:00
Anthony Minessale d2f8fca18a FS-6825 #resolve #comment caused by regression in commit 0732c0b0 pertaining to FS-6825 2014-09-17 20:32:18 +05:00
Giacomo Vacca 9215c93827 FS-6785 - pass and use sample rate in switch_core_session_get_payload_code() 2014-09-08 14:26:58 +00:00
Anthony Minessale 5173471b06 nm 2014-08-16 02:00:38 +05:00
Anthony Minessale cb928cdf37 fix typo 2014-08-16 01:52:03 +05:00
Anthony Minessale b2162142f3 FS-6667 #comment block sending audio when dmachine is reading 2014-08-06 01:21:34 +05:00
Anthony Minessale f629b5ed63 always start payloads at 102 to avoid webrtc funk 2014-08-02 00:59:44 +05:00
Anthony Minessale 502ddd312a FS-6702 #resolve 2014-07-29 22:17:02 +05:00
Anthony Minessale 0732c0b027 FS-6631 #resolve 2014-07-29 03:04:29 +05:00
Anthony Minessale e7700c0ac4 FS-6665 #resolve #comment This should fix it 2014-07-18 22:05:15 +05:00
Mike Jerris 6dca24bb2a Merge pull request #5 in FS/freeswitch from ~KATHLEEN.KING/freeswitch-fork:clang-warnings-werror to master
* commit '1affff9db4aaa29ab66f9f5db76f575eeabd86b5':
  Fixed a clang-3.5 missing-prototype warning and added doxygen documentation for switch_channel_set_presence_data_vals. #doxygen
  Fixed dead code.
  Fixed trucation of value warning.
  Removed a useless called to abs.
  Removed an autological-pointer-compare from src/switch_utils.c.
  Fixed trucation of value warning.
2014-07-14 17:38:21 -05:00
Anthony Minessale 831d5892b9 preserve timer name for recovery 2014-07-03 23:50:14 +05:00