[asterisk-dev] [Code Review] Media Project Phase 2: SILK 8khz-24khz, SLINEAR 8khz-192khz, SPEEX 32khz, Custom format creation in codecs.conf

Russell Bryant reviewboard at asterisk.org
Mon Feb 21 21:47:09 CST 2011


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviewboard.asterisk.org/r/1104/#review3202
-----------------------------------------------------------



/trunk/bridges/bridge_multiplexed.c
<https://reviewboard.asterisk.org/r/1104/#comment6638>

    For consistency, ao2_unlock(bridge), since the surrounding code is using the bridge pointer directly.



/trunk/bridges/bridge_softmix.c
<https://reviewboard.asterisk.org/r/1104/#comment6615>

    why this value?  (Just add a comment above it)



/trunk/bridges/bridge_softmix.c
<https://reviewboard.asterisk.org/r/1104/#comment6639>

    unsigned for the sample rate



/trunk/bridges/bridge_softmix.c
<https://reviewboard.asterisk.org/r/1104/#comment6640>

    As a matter of style, I would use sizeof(*bridge_data) instead of sizeof(struct softmix_bridge_data)



/trunk/bridges/bridge_softmix.c
<https://reviewboard.asterisk.org/r/1104/#comment6616>

    Should anything be done here if there is a failure?



/trunk/bridges/bridge_softmix.c
<https://reviewboard.asterisk.org/r/1104/#comment6641>

    It looks like this isn't doing exactly what the comment says.  The intention is to update the native bridge sample rate if at least 2 people are at a higher rate.  It does that part.  However, the rate it chooses is the highest rate that was encountered.  It may be that there is only 1 channel at that rate, though.
    
    I think there is some tweaking needed here to ensure that the rate jumped to is one where there are at least 2 channels.



/trunk/channels/iax2.h
<https://reviewboard.asterisk.org/r/1104/#comment6642>

    Yay constification!



/trunk/codecs/codec_resample.c
<https://reviewboard.asterisk.org/r/1104/#comment6643>

    Are any of these used outside of this file?  If not, make them static.



/trunk/codecs/codec_resample.c
<https://reviewboard.asterisk.org/r/1104/#comment6644>

    Do you need the resamp_pvt struct here?  It looks like ast_trans_pvt->pvt could just be a SpeexResamplerState pointer directly.



/trunk/codecs/codec_resample.c
<https://reviewboard.asterisk.org/r/1104/#comment6645>

    Wow, this API sure is easier.  :-)
    
    Is it guaranteed to process all of the data?  As you could probably tell from the old code, I had to call the resampler in a loop to ensure it processed everything.  I don't know, it seemed silly, but that's what I had to do to make it work.



/trunk/codecs/codec_resample.c
<https://reviewboard.asterisk.org/r/1104/#comment6646>

    or if you want to be overly explicit, * sizeof(int16_t).



/trunk/formats/format_attr_silk.c
<https://reviewboard.asterisk.org/r/1104/#comment6647>

    unsigned?



/trunk/formats/format_attr_silk.c
<https://reviewboard.asterisk.org/r/1104/#comment6648>

    The placement of the declaration of val looks bizarre.  How about just putting it at the beginning of the function?
    
    Also, it looks like just setting val = result when val is declared would be sufficient.  It's set to the same thing inside of each case in the switch.



/trunk/formats/format_attr_silk.c
<https://reviewboard.asterisk.org/r/1104/#comment6649>

    AST_MODULE_LOAD_DECLINE is probably a better choice



/trunk/funcs/func_pitchshift.c
<https://reviewboard.asterisk.org/r/1104/#comment6650>

    Dude, this might need to be covered in the CHANGES file.  The fact that PITCH_SHIFT() can now operate on _ANY_ sample rate is kind of a big deal.



/trunk/include/asterisk/audiohook.h
<https://reviewboard.asterisk.org/r/1104/#comment6635>

    Add /*! to doxygenize this



/trunk/include/asterisk/audiohook.h
<https://reviewboard.asterisk.org/r/1104/#comment6636>

    Can these just be moved to audiohook.c ?



/trunk/include/asterisk/audiohook.h
<https://reviewboard.asterisk.org/r/1104/#comment6637>

    unsigned?



/trunk/include/asterisk/format.h
<https://reviewboard.asterisk.org/r/1104/#comment6651>

    taking this too far?  Maybe we should add something even more ridiculous just so we can claim to support it.  Marketing!



/trunk/include/asterisk/format.h
<https://reviewboard.asterisk.org/r/1104/#comment6652>

    This should be in _private.h.



/trunk/include/asterisk/format.h
<https://reviewboard.asterisk.org/r/1104/#comment6653>

    I'm not sure that it's really necessary to have these functions as inline functions... but if they stay, they are good candidates for using the AST_INLINE_API() macro instead of force_inline.



/trunk/include/asterisk/format.h
<https://reviewboard.asterisk.org/r/1104/#comment6654>

    make rate unsigned
    
    move { to next line



/trunk/include/asterisk/format_cap.h
<https://reviewboard.asterisk.org/r/1104/#comment6655>

    \ in front of retval



/trunk/include/asterisk/rtp_engine.h
<https://reviewboard.asterisk.org/r/1104/#comment6656>

    move to _private.h



/trunk/include/asterisk/time.h
<https://reviewboard.asterisk.org/r/1104/#comment6657>

    It's not immediately obvious to me that this is correct.  I just wanted to make sure you tested it.



/trunk/main/format.c
<https://reviewboard.asterisk.org/r/1104/#comment6658>

    const?



/trunk/main/format.c
<https://reviewboard.asterisk.org/r/1104/#comment6659>

    reload?  Does this actually support reload?  If so, I think there is some additional work required here.  If not, this seems like a no-op.



/trunk/main/format.c
<https://reviewboard.asterisk.org/r/1104/#comment6660>

    This function is a little big and gets pretty deep indentation wise.  I think some of this could be broken out into some more functions such as add_format(cat), process_samprate(), to clean things up a bit.



/trunk/main/format_cap.c
<https://reviewboard.asterisk.org/r/1104/#comment6661>

    I think the unref needs to be moved to right before the return.


- Russell


On 2011-02-17 17:32:14, David Vossel wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviewboard.asterisk.org/r/1104/
> -----------------------------------------------------------
> 
> (Updated 2011-02-17 17:32:14)
> 
> 
> Review request for Asterisk Developers.
> 
> 
> Summary
> -------
> 
> -Functional Changes
> Dynamic global format list build by codecs defined in codecs.conf
> SILK 8khz, 12khz, 16khz, and 24khz with custom attributes defined in codecs.conf
> Negotiation of SILK attributes in chan_sip.
> SPEEX 32khz with translation
> SLINEAR 8khz, 12khz, 24khz, 32khz, 44.1khz, 48khz, 96khz, 192khz with translation using codec_resample.c
> Various changes to RTP code required to properly handle the dynamic format list and formats with attributes.
> 
> -Organizational changes
> Global format list is moved from frame.c to format.c
> Various format specific functions moved from frame.c to format.c
> 
> -MIS
> There were several changes that I opted not to do during phase 1 that involved the proper use of formats with attributes.  I felt that the phase 1 patch was too complex to attempt these changes so I have included them here.  The primary change I held off doing the first time around was in the rtp_engine.c Payload and MIME type lists.  These lists were statically defined which made it impossible to set formats with attributes in them.  I have gone back and revised these lists to allow the flexibility required for the new architecture.
> 
> 
> Diffs
> -----
> 
>   /trunk/CHANGES 308241 
>   /trunk/apps/app_chanspy.c 308241 
>   /trunk/apps/app_jack.c 308241 
>   /trunk/apps/app_mixmonitor.c 308241 
>   /trunk/bridges/bridge_multiplexed.c 308241 
>   /trunk/bridges/bridge_softmix.c 308241 
>   /trunk/channels/chan_gtalk.c 308241 
>   /trunk/channels/chan_iax2.c 308241 
>   /trunk/channels/chan_jingle.c 308241 
>   /trunk/channels/chan_sip.c 308241 
>   /trunk/channels/chan_skinny.c 308241 
>   /trunk/channels/iax2.h 308241 
>   /trunk/codecs/Makefile 308241 
>   /trunk/codecs/codec_resample.c 308241 
>   /trunk/codecs/codec_speex.c 308241 
>   /trunk/codecs/speex/arch.h PRE-CREATION 
>   /trunk/codecs/speex/fixed_generic.h PRE-CREATION 
>   /trunk/codecs/speex/resample.c PRE-CREATION 
>   /trunk/codecs/speex/resample_sse.h PRE-CREATION 
>   /trunk/codecs/speex/speex_resampler.h PRE-CREATION 
>   /trunk/codecs/speex/stack_alloc.h PRE-CREATION 
>   /trunk/configs/codecs.conf.sample 308241 
>   /trunk/formats/format_attr_silk.c PRE-CREATION 
>   /trunk/funcs/func_pitchshift.c 308241 
>   /trunk/funcs/func_speex.c 308241 
>   /trunk/funcs/func_volume.c 308241 
>   /trunk/include/asterisk/audiohook.h 308241 
>   /trunk/include/asterisk/format.h 308241 
>   /trunk/include/asterisk/format_cap.h 308241 
>   /trunk/include/asterisk/frame.h 308241 
>   /trunk/include/asterisk/rtp_engine.h 308241 
>   /trunk/include/asterisk/silk.h PRE-CREATION 
>   /trunk/include/asterisk/slinfactory.h 308241 
>   /trunk/include/asterisk/time.h 308241 
>   /trunk/include/asterisk/translate.h 308241 
>   /trunk/main/asterisk.c 308241 
>   /trunk/main/audiohook.c 308241 
>   /trunk/main/channel.c 308241 
>   /trunk/main/data.c 308241 
>   /trunk/main/format.c 308241 
>   /trunk/main/format_cap.c 308241 
>   /trunk/main/format_pref.c 308241 
>   /trunk/main/frame.c 308241 
>   /trunk/main/rtp_engine.c 308241 
>   /trunk/main/slinfactory.c 308241 
>   /trunk/main/translate.c 308241 
>   /trunk/res/res_mutestream.c 308241 
>   /trunk/res/res_rtp_asterisk.c 308241 
> 
> Diff: https://reviewboard.asterisk.org/r/1104/diff
> 
> 
> Testing
> -------
> 
> I used the same testing I did for phase1 with phase2.  This includes load testing with various codec negotiation scenarios.  Speex 32 and its translators were verified using Asterisk back to back.  I verified SILK using a codec translator module I'm working with.  The new slinear resample code was exercised with both Speex32 and SILK 12khz/24khz translation.
> 
> 
> Thanks,
> 
> David
> 
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-dev/attachments/20110222/e273187b/attachment-0001.htm>


More information about the asterisk-dev mailing list