<html>
    <head>
        <meta name="viewport" content="width=device-width" />
        <base href="https://wiki.asterisk.org/wiki" />
        <style type="text/css">
    body, #email-content, #email-content-inner { font-family: Arial,FreeSans,Helvetica,sans-serif; }
    body, p, blockquote, pre, code, td, th, li, dt, dd { font-size: 13px; }
    small { font-size: 11px; }

    body { width:100% !important; -webkit-font-smoothing: antialiased; }

    body,
    #email-wrapper { background-color: #f0f0f0; }
    #email-wrapper-inner { padding: 20px; text-align: center; }
    #email-content-inner { background-color: #fff; border: 1px solid #bbb; color: $menuTxtColour; padding:20px; text-align:left; }
    #email-wrapper-inner > table { width: 100%; }
    #email-wrapper-inner.thin > table { margin: 0 auto; width: 50%; }
    #email-footer { padding: 0 16px 32px 16px; margin: 0; }

    .email-indent { margin: 8px 0 16px 0; }
    .email-comment { margin: 0 0 0 56px; }
    .email-comment.removed { background-color: #ffe7e7; border: 1px solid #df9898; padding: 0 8px;}

    #email-title-avatar { text-align: left; vertical-align: top; width: 48px; padding-right: 8px; }
    #email-title-flavor { margin: 0; padding: 0 0 4px 0; }
    #email-title-heading { font-size: 16px; line-height: 20px; min-height: 20px; margin: 0; padding: 0; }
    #email-title .icon { border: 0; padding: 0 5px 0 0; text-align: left; vertical-align: middle; }

    #email-actions { border-top: 1px solid #bbb; color: #505050; margin: 8px 0 0 0; padding: 0; }
    #email-actions td { padding-top: 8px; }
    #email-actions .left { max-width: 45%; text-align: left; }
    #email-actions .right { text-align: right; }
    .email-reply-divider { border-top: 1px solid #bbb; color: #505050; margin: 32px 0 8px 0; padding: 8px 0; }
    .email-section-title { border-bottom: 1px solid #bbb; margin: 8px 0; padding: 8px 0 0 0; }

    .email-metadata { color: #505050; }

    a { color: #326ca6; text-decoration: none; }
    a:hover { color: #336ca6; text-decoration: underline; }
    a:active {color: #326ca6; }

    a.email-footer-link { color: #505050; font-size: 11px; }

    .email-item-list { list-style: none; margin: 4px 0; padding-left: 0; }
    .email-item-list li { list-style: none; margin: 0; padding: 4px 0; }
    .email-list-divider { color: #505050; padding: 0 0.35em; }
    .email-operation-icon { padding-right: 5px; }

    .avatar { -ms-interpolation-mode: bicubic; border-radius: 3px;}
    .avatar-link { margin: 2px; }

    .tableview th { border-bottom: 1px solid #69C; font-weight: bold; text-align: left; }
    .tableview td { border-bottom: 1px solid #bbbbbb; text-align: left; padding: 4px 16px 4px 0; }

    .aui-message {  margin: 1em 0; padding: 8px; }
    .aui-message.info { background-color: #e0f0ff; border: 1px solid #9eb6d4; }
    .aui-message.success { background-color: #ddfade; border: 1px solid #93c49f; }
    .aui-message.error,
    .aui-message.removed { background-color: #ffe7e7; border: 1px solid #df9898; color: #000; }

    .call-to-action-table { margin: 10px 1px 1px 1px;}
    .call-to-cancel-container, .call-to-action-container { padding: 5px 20px; }
    .call-to-cancel-container { border: 1px solid #aaa; background-color: #eee; border-radius: 3px; }
    .call-to-cancel-container a.call-to-cancel-button { background-color: #eee; font-size: 14px; line-height: 1; padding: 0; margin: 0; color: #666; font-family: sans-serif;}
    .call-to-action-container { border: 1px solid #486582;  background-color: #3068A2; border-radius: 3px; padding: 4px 10px; }
    .call-to-action-container a.call-to-action-button { background-color: #3068A2; font-size: 14px; line-height: 1; padding: 0; margin: 0; color: #fff; font-weight: bold; font-family: sans-serif; }

    /** The span around the inline task checkbox image */
    .diff-inline-task-overlay {
        display: inline-block;
        text-align: center;
        height: 1.5em;
        padding: 5px 0px 1px 5px;
        margin-right: 5px;
        /** Unfortunately, the negative margin-left is stripped out in gmail */
        margin-left: -5px;
    }

            @media handheld, only screen and (max-device-width: 480px) {
        div, a, p, td, th, li, dt, dd { -webkit-text-size-adjust: auto; }
        small, small a { -webkit-text-size-adjust: 90%; }

        td[id=email-wrapper-inner] { padding: 2px !important; }
        td[id=email-content-inner] { padding: 8px !important; }
        td[id="email-wrapper-inner"][class="thin"] > table { text-align: left !important; width: 100% !important; }
        td[id=email-footer] { padding: 8px 12px !important; }
        div[class=email-indent] { margin: 8px 0px !important; }
        div[class=email-comment] { margin: 0 !important; }

        p[id=email-title-flavor] a { display: block; } /* puts the username and the action on separate lines */
        p[id=email-permalink] { padding: 4px 0 0 0 !important; }

        table[id=email-actions] td { padding-top: 0 !important; }
        table[id=email-actions] td.right { text-align: right !important; }
        table[id=email-actions] .email-list-item { display: block; margin: 1em 0 !important; word-wrap: normal !important; }
        span[class=email-list-divider] { display: none; }
    }



        </style>
    </head>
    <body style="font-family: Arial, FreeSans, Helvetica, sans-serif; font-size: 13px; width: 100%; -webkit-font-smoothing: antialiased; background-color: #f0f0f0">
        <table id="email-wrapper" width="100%" cellspacing="0" cellpadding="0" border="0" style="background-color: #f0f0f0">
            <tbody>
                <tr valign="middle">
                    <td id="email-wrapper-inner" style="font-size: 13px; padding: 20px; text-align: center">
                        <table id="email-content" cellspacing="0" cellpadding="0" border="0" style="font-family: Arial, FreeSans, Helvetica, sans-serif; width: 100%">
                            <tbody>
                                <tr valign="top">
                                    <td id="email-content-inner" align="left" style="font-family: Arial, FreeSans, Helvetica, sans-serif; font-size: 13px; background-color: #fff; border: 1px solid #bbb; padding: 20px; text-align: left">
                                        <table id="email-title" cellpadding="0" cellspacing="0" border="0" width="100%">
                                            <tbody>
                                                <tr>
                                                    <td id="email-title-avatar" rowspan="2" style="font-size: 13px; text-align: left; vertical-align: top; width: 48px; padding-right: 8px"> <img class="avatar" src="cid:avatar_ce51dcf276530e4a4b00548e2a6d0905" border="0" height="48" width="48" style="-ms-interpolation-mode: bicubic; border-radius: 3px" /> </td>
                                                    <td valign="top" style="font-size: 13px">
                                                        <div id="email-title-flavor" class="email-metadata" style="margin: 0; padding: 0 0 4px 0; color: #505050">
                                                            <a href="    https://wiki.asterisk.org/wiki/display/~mjordan " style="color:#326ca6;text-decoration:none;; color: #326ca6; text-decoration: none">Matt Jordan</a> edited the page:
                                                        </div> </td>
                                                </tr>
                                                <tr>
                                                    <td valign="top" style="font-size: 13px"> <h2 id="email-title-heading" style="font-size: 16px; line-height: 20px; min-height: 20px; margin: 0; padding: 0"> <a href="https://wiki.asterisk.org/wiki/display/AST/Media+Format+Rewrite" style="color: #326ca6; text-decoration: none"> <img class="icon" src="cid:page-icon" alt="" style="border: 0; padding: 0 5px 0 0; text-align: left; vertical-align: middle" /> <strong style="font-size:16px;line-height:20px;vertical-align:top;">Media Format Rewrite</strong> </a> </h2> </td>
                                                </tr>
                                            </tbody>
                                        </table>
                                        <div class="email-indent" style="margin: 8px 0 16px 0">
                                            <div class="email-diff">
                                                <div id="page-diffs" class="wiki-content">
                                                    <p class="diff-context-placeholder" style="font-size: 13px">...</p>
                                                    <p class="diff-block-context" style="font-size: 13px">In the old times media formats were represented using a bit field. This was fast but had a few limitations. We were limited on how many there were and they also did not include any attribute information. It was strictly a "this is ulaw". This was changed and ast_format was created, which is a structure that contains additional information. Additionally ast_format_cap was created to act as a container and another mechanism was added to allow logic to be registered which performed format negotiation. Everywhere throughout the codebase the code was changed to use this strategy but unfortunately this came at a cost.</p>
                                                    <p class="diff-block-target diff-block-context" style="font-size: 13px"> <span class="diff-html-added" id="added-diff-0" style="font-size: 100%; background-color: #ddfade;">Performance analysis and profiling has shown that we spend an inordinate amount of time comparing, copying, and generally manipulating formats and their related structures. Basic prototyping has shown that there is a reasonably large performance improvement to be made in this area - this project is to overhaul the media format architecture and its usage in Asterisk to improve performance.</span> </p>
                                                    <h1 id="MediaFormatRewrite-UseCases" class="diff-block-target diff-block-context"> <span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">Use Cases</span> </h1>
                                                    <p class="diff-block-target diff-block-context" style="font-size: 13px"> <span class="diff-html-changed" id="changed-diff-0" style="background-color: #d6f0ff;">The </span><span class="diff-html-added" id="added-diff-1" style="font-size: 100%; background-color: #ddfade;">following, for the most part, assumes that the channels use RTP for media and SIP for signalling. Most use cases, however, will translate to any VoIP channel driver. DAHDI, as always, is its own thing.</span> </p>
                                                    <h2 id="MediaFormatRewrite-SingleChannel" class="diff-block-target diff-block-context"> <span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">Single Channel</span> </h2>
                                                    <h3 id="MediaFormatRewrite-NominalOffer%2FAnswer%28SingleMediaStream%29" class="diff-block-target diff-block-context"> <span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">Nominal Offer/Answer (Single Media Stream)</span> </h3>
                                                    <h4 id="MediaFormatRewrite-OfferNegotiation-Nominal" class="diff-block-target diff-block-context"> <span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">Offer Negotiation - Nominal</span> </h4>
                                                    <ul class="diff-block-target diff-block-context">
                                                        <li style="font-size: 13px"> <span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">Alice's phone offers some set of codecs in an INVITE request (example: ulaw,g729,ilbc), where all codecs are supported by Alice's endpoint</span> </li>
                                                        <li style="font-size: 13px"> <span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">Asterisk responds with an answer containing the codecs in the order specified by the offer</span> </li>
                                                    </ul>
                                                    <table class="diff-macro diff-html-added diff-block-target diff-block-context" style="background-color: #f0f0f0;border: 1px solid #dddddd;margin: 10px 1px;padding: 0 2px 2px;width: 100%;background-color: #ddfade;border-color: #93c49f;">
                                                        <thead>
                                                            <tr>
                                                                <th class="diff-macro-title" style="background-color: transparent; text-align: left; font-weight: normal;padding: 5px;; font-size: 13px"><span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;"><span class="icon macro-placeholder-icon" style="background-color: ;line-height: 20px;"><img src="https://wiki.asterisk.org/wiki/s/en_GB-1988229788/4252/6ac85e9b14675c5514a674e1aecae99c9505ed36.48/_/images/icons/macrobrowser/dropdown/tip.png" style="padding-right: 5px; vertical-align: text-bottom;" /> </span>Tip</span></th>
                                                            </tr>
                                                        </thead>
                                                        <tbody>
                                                            <tr>
                                                                <td class="diff-macro-body" style="background-color: #fff;border: 1px solid #dddddd;padding: 10px;; font-size: 13px"> <p style="font-size: 13px"> <span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">This should also verify various SDP offers:</span> </p>
                                                                    <ol>
                                                                        <li style="font-size: 13px"> <span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">Lack of rtpmap attributes for specific codecs, e.g., 0 implies ulaw (See Table 2, RFC 1890)</span> </li>
                                                                        <li style="font-size: 13px"> <span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">Non-standard rtpmap designations for codecs</span> </li>
                                                                    </ol> <p style="font-size: 13px"> <span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">While these could be considered "off-nominal", they are allowed by the various RFCs and should be covered under a 'nominal negotiation', where the set of codecs offered match completely with what is configured in Asterisk</span> </p> </td>
                                                            </tr>
                                                        </tbody>
                                                    </table>
                                                    <h4 id="MediaFormatRewrite-OfferNegotiation-Subset%28Alice%29" class="diff-block-target diff-block-context"> <span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">Offer Negotiation - Subset (Alice)</span> </h4>
                                                    <ul class="diff-block-target diff-block-context">
                                                        <li style="font-size: 13px"> <span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">Alice's phone offers a set of codecs in an INVITE request, where a subset of the codecs is supported by Alice's endpoint and some subset is not</span> </li>
                                                        <li style="font-size: 13px"> <span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">Asterisk modifies the origin line in the SDP, and responds with the set of codecs that are allowed based on the intersection of the offered codecs and the configured codecs for the endpoint</span> </li>
                                                    </ul>
                                                    <h4 id="MediaFormatRewrite-OfferNegotiation-Subset%28Asterisk%29" class="diff-block-target diff-block-context"> <span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">Offer Negotiation - Subset (Asterisk)</span> </h4>
                                                    <ul class="diff-block-target diff-block-context">
                                                        <li style="font-size: 13px"> <span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">Alice's phone offers a set of codecs in an INVITE request, where the codecs offered is a subset of the codecs supported by Alice's endpoint</span> </li>
                                                        <li style="font-size: 13px"> <span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">Asterisk responds with an answer containing the codecs in the order specified by the offer</span> </li>
                                                    </ul>
                                                    <h4 id="MediaFormatRewrite-OfferNegotiation-PreferredCodecOnly%28Alice%27spreference%29" class="diff-block-target diff-block-context"> <span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">Offer Negotiation - Preferred Codec Only (Alice's preference)</span> </h4>
                                                    <ul class="diff-block-target diff-block-context">
                                                        <li style="font-size: 13px"> <span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">Alice's phone offers a set of codecs in an INVITE request, where all codecs are supported by Alice's endpoint</span> </li>
                                                        <li style="font-size: 13px"> <span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">Asterisk modifies the origin line in the SDP, and responds with only the preferred codec in the offer</span> </li>
                                                    </ul>
                                                    <h4 id="MediaFormatRewrite-OfferNegotiation-PreferredCodecOnly%28Asterisk%27spreference%29" class="diff-block-target diff-block-context"> <span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">Offer Negotiation - Preferred Codec Only (Asterisk's preference)</span> </h4>
                                                    <ul class="diff-block-target diff-block-context">
                                                        <li style="font-size: 13px"> <span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">Alice's phone offers a set of codecs in an INVITE request, where all codecs are supported by Alice's endpoint</span> </li>
                                                        <li style="font-size: 13px"> <span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">Asterisk modifies the origin line in the SDP, and responds with only the preferred codec configured via the dialplan/configuration file</span> </li>
                                                    </ul>
                                                    <h4 id="MediaFormatRewrite-OfferNegotiation-PreferredCodecList" class="diff-block-target diff-block-context"> <span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">Offer Negotiation - Preferred Codec List</span> </h4>
                                                    <ul class="diff-block-target diff-block-context">
                                                        <li style="font-size: 13px"> <span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">Alice's phone offers a set of codecs in an INVITE request, where all codecs are supported by Alice's endpoint</span> </li>
                                                        <li style="font-size: 13px"> <span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">Asterisk modifies the origin line in the SDP, and responds with a subset of the codecs in the offer re-ordered per the preference order defined via the dialplan/configuration file</span> </li>
                                                    </ul>
                                                    <h4 id="MediaFormatRewrite-OfferNegotiation-packetization" class="diff-block-target diff-block-context"> <span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">Offer Negotiation - packetization</span> </h4>
                                                    <ul class="diff-block-target diff-block-context">
                                                        <li style="font-size: 13px"> <span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">Alice's phone offers a set of codecs in an INVITE request, where the preferred codec has a ptime attribute indicating a different packetization</span> </li>
                                                        <li style="font-size: 13px"> <span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">Asterisk responds with the codecs in the offer, and sends RTP to the endpoint with the appropriate packetization</span> </li>
                                                    </ul>
                                                    <h3 id="MediaFormatRewrite-NominalOffer%2FAnswer%28MultipleMediaStreams%29" class="diff-block-target diff-block-context"> <span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">Nominal Offer/Answer (Multiple Media Streams)</span> </h3>
                                                    <p class="diff-block-target diff-block-context" style="font-size: 13px"> <span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">All use cases covered in Nominal Offer/Answer (Single Media Stream) apply here as well, save that there should be a single audio media stream and a single video stream. Asterisk should treat the preferred codec offer in the same fashion for each stream independently; that is, if the preferred codec list is ulaw,g722,h261,h264, then the preferred audio codec is ulaw and the preferred video codec is h261.</span> </p>
                                                    <h3 id="MediaFormatRewrite-RestrictedOffer%2FAnswer%28SingleStream%29" class="diff-block-target diff-block-context"> <span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">Restricted Offer/Answer (Single Stream)</span> </h3>
                                                    <h4 id="MediaFormatRewrite-Nocodecs" class="diff-block-target diff-block-context"> <span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">No codecs</span> </h4>
                                                    <ul class="diff-block-target diff-block-context">
                                                        <li style="font-size: 13px"> <span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">Alice's phone offers no codecs in an INVITE request with an SDP.</span> </li>
                                                        <li style="font-size: 13px"> <span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">Asterisk responds with an equivalent answer.</span> </li>
                                                    </ul>
                                                    <h4 id="MediaFormatRewrite-Restrictedflow" class="diff-block-target diff-block-context"> <span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">Restricted flow</span> </h4>
                                                    <ul class="diff-block-target diff-block-context">
                                                        <li style="font-size: 13px"> <span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">Alice's phone offers a set of codecs in an INVITE request, where the media is set to sendonly (phone => Asterisk)</span> </li>
                                                        <li style="font-size: 13px"> <span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">Asterisk responds with the codecs in the offer, where the media is set to recvonly.</span> </li>
                                                    </ul>
                                                    <h3 id="MediaFormatRewrite-RestrictedOffer%2FAnswer%28MultipleStreams%29" class="diff-block-target diff-block-context"> <span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">Restricted Offer/Answer (Multiple Streams)</span> </h3>
                                                    <p class="diff-block-target diff-block-context" style="font-size: 13px"> <span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">Each scenario in Restricted Offer/Answer applies, only with both an audio stream as well as a video stream. Either or both stream can be indicated to be sendonly, or can be sent with no codecs.</span> </p>
                                                    <h3 id="MediaFormatRewrite-InvalidFormatOffer%2FAnswer%28SingleStream%29" class="diff-block-target diff-block-context"> <span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">Invalid Format Offer/Answer (Single Stream)</span> </h3>
                                                    <h4 id="MediaFormatRewrite-OfferInvalidCodec%28one%29" class="diff-block-target diff-block-context"> <span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">Offer Invalid Codec (one)</span> </h4>
                                                    <ul class="diff-block-target diff-block-context">
                                                        <li style="font-size: 13px"> <span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">Alice's phone offers a set of codecs in an INVITE request, where at least one codec is not supported by Alice's endpoint</span> </li>
                                                        <li style="font-size: 13px"> <span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">Asterisk responds with the subset of the codecs that were offered that it does support, using the preference order of the offer</span> </li>
                                                    </ul>
                                                    <h4 id="MediaFormatRewrite-OfferInvalidCodec%28all%29" class="diff-block-target diff-block-context"> <span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">Offer Invalid Codec (all)</span> </h4>
                                                    <ul class="diff-block-target diff-block-context">
                                                        <li style="font-size: 13px"> <span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">Alice's phone offers a set of codecs in an INVITE request, where none of the codecs are supported by Alice's endponit</span> </li>
                                                        <li style="font-size: 13px"> <span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">Asterisk responds with a 488.</span> </li>
                                                    </ul>
                                                    <h4 id="MediaFormatRewrite-OfferInvalidAttribute" class="diff-block-target diff-block-context"> <span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">Offer Invalid Attribute</span> </h4>
                                                    <ul class="diff-block-target diff-block-context">
                                                        <li style="font-size: 13px"> <span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">Alice's phone offers a set of codecs, where additional attributes are provided that are invalid:</span>
                                                            <ul>
                                                                <li style="font-size: 13px"> <span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">An invalid rtpmap attribute for an unknown media format</span> </li>
                                                                <li style="font-size: 13px"> <span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">An invalid attribute (or unknown attribute) for a known media format</span> </li>
                                                                <li style="font-size: 13px"> <span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">An improperly formatted media description line</span> </li>
                                                            </ul> </li>
                                                        <li style="font-size: 13px"> <span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">Asterisk responds with a 488.</span> </li>
                                                    </ul>
                                                    <h3 id="MediaFormatRewrite-InvalidFormatOffer%2FAnswer%28MultipleStream%29" class="diff-block-target diff-block-context"> <span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">Invalid Format Offer/Answer (Multiple Stream)</span> </h3>
                                                    <p class="diff-block-target diff-block-context" style="font-size: 13px"> <span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">All of the scenarios in Invalid Format Offer/Answer apply, only with a single audio and a single video stream. Streams can be declined, or the entire offer can be declined with a 488 as appropriate.</span> </p>
                                                    <p class="diff-block-target diff-block-context" style="font-size: 13px"> <span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;"> </span> </p>
                                                    <p class="diff-block-target diff-block-context" style="font-size: 13px"> <span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;"> </span> </p>
                                                    <p class="diff-block-target diff-block-context" style="font-size: 13px"> <span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;"> </span> </p>
                                                    <h1 id="MediaFormatRewrite-Design" class="diff-block-target diff-block-context"> <span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">Design</span> </h1>
                                                    <h2 id="MediaFormatRewrite-ThePresent" class="diff-block-target diff-block-context"> <span class="diff-html-added" style="font-size: 100%; background-color: #ddfade;">The </span><span class="diff-html-changed" id="changed-diff-1" style="background-color: #d6f0ff;">Present</span> </h2>
                                                    <h3 id="MediaFormatRewrite-structast_format" class="diff-block-context">struct ast_format</h3>
                                                    <p class="diff-block-context" style="font-size: 13px">Media formats in Asterisk are now represented using a large (~320 byte) sized data structure. This is done because the data structure itself is not a reference counted object and thus carries no guarantee that associated information attached to it will be disposed of. The large size of the data structure is due to needing additional space for optional media format attributes.</p>
                                                    <p class="diff-context-placeholder" style="font-size: 13px">...</p>
                                                    <p class="diff-block-context" style="font-size: 13px">There are assumptions throughout the tree that media format related operations are cheap when in reality they are anything but. An example would be reusable frames. Instead of setting the frames up with the information they require at initialization they are set each time the frame is returned.</p>
                                                    <h2 id="MediaFormatRewrite-TheFuture" class="diff-block-target"> <span class="diff-html-changed" id="changed-diff-2" style="background-color: #d6f0ff;">The Future</span> </h2>
                                                    <h3 id="MediaFormatRewrite-Codecs" class="diff-block-context">Codecs</h3>
                                                    <p class="diff-block-context" style="font-size: 13px">While past media work has provided us room to add codecs within the codebase there is no dynamic manner available of doing so. For efficient storage of media formats this will need to change. The ability to add codecs to the core will be made available, with the core adding the common codecs that Asterisk is already aware of. The RTP engine API will also be extended to allow SDP specific information to be added. This will provide a truly dynamic and flexible way of adding codecs, with the added benefit that the numerical values for codecs can be used as indexes into arrays.</p>
                                                    <p class="diff-context-placeholder" style="font-size: 13px">...</p>
                                                </div>
                                            </div>
                                        </div>
                                        <table id="email-actions" class="email-metadata" cellspacing="0" cellpadding="0" border="0" width="100%" style="border-top: 1px solid #bbb; color: #505050; margin: 8px 0 0 0; padding: 0; color: #505050">
                                            <tbody>
                                                <tr>
                                                    <td class="left" valign="top" style="font-size: 13px; padding-top: 8px; max-width: 45%; text-align: left"> <span class="email-list-item"><a href="https://wiki.asterisk.org/wiki/display/AST/Media+Format+Rewrite" style="color: #326ca6; text-decoration: none">View Online</a> </span> <span class="email-list-divider" style="color: #505050; padding: 0 0.350em">·</span> <span class="email-list-item"><a href="https://wiki.asterisk.org/wiki/plugins/likes/like.action?contentId=27199677" style="color: #326ca6; text-decoration: none">Like</a> </span> <span class="email-list-divider" style="color: #505050; padding: 0 0.350em">·</span> <span class="email-list-item"><a href="https://wiki.asterisk.org/wiki/pages/diffpagesbyversion.action?pageId=27199677&revisedVersion=33&originalVersion=32" style="color: #326ca6; text-decoration: none">View Changes</a> </span> <span class="email-list-divider" style="color: #505050; padding: 0 0.350em">·</span> <span class="email-list-item"><a href="https://wiki.asterisk.org/wiki/display/AST/Media+Format+Rewrite?showComments=true&showCommentArea=true#addcomment" style="color: #326ca6; text-decoration: none">Add Comment</a> </span> </td>
                                                    <td class="right" width="50%" valign="top" style="font-size: 13px; padding-top: 8px; text-align: right"> <span class="email-list-item"><a href="https://wiki.asterisk.org/wiki/users/removespacenotification.action?spaceKey=AST" style="color: #326ca6; text-decoration: none">Stop watching space</a> </span> <span class="email-list-divider" style="color: #505050; padding: 0 0.350em">·</span> <span class="email-list-item"><a href="https://wiki.asterisk.org/wiki/users/editmyemailsettings.action" style="color: #326ca6; text-decoration: none">Manage Notifications</a> </span> </td>
                                                </tr>
                                            </tbody>
                                        </table> </td>
                                </tr>
                            </tbody>
                        </table> </td>
                </tr>
                <tr>
                    <td id="email-footer" align="center" style="font-size: 13px; padding: 0 16px 32px 16px; margin: 0"> <small style="font-size: 11px"> This message was sent by <a class="email-footer-link" style="color:#505050;font-size:11px;text-decoration:none;; color: #326ca6; text-decoration: none; color: #505050; font-size: 11px" href="http://www.atlassian.com/software/confluence">Atlassian Confluence</a> 5.1.5, <a class="email-footer-link" style="color:#505050;font-size:11px;text-decoration:none;; color: #326ca6; text-decoration: none; color: #505050; font-size: 11px" href="http://www.atlassian.com/software/confluence/overview/team-collaboration-software?utm_source=email-footer">Team Collaboration Software</a> </small> </td>
                </tr>
            </tbody>
        </table>
    </body>
</html>