<html>
 <body>
  <div style="font-family: Verdana, Arial, Helvetica, Sans-Serif;">
   <table bgcolor="#f9f3c9" width="100%" cellpadding="8" style="border: 1px #c9c399 solid;">
    <tr>
     <td>
      This is an automatically generated e-mail. To reply, visit:
      <a href="https://reviewboard.asterisk.org/r/3763/">https://reviewboard.asterisk.org/r/3763/</a>
     </td>
    </tr>
   </table>
   <br />





<blockquote style="margin-left: 1em; border-left: 2px solid #d0d0d0; padding-left: 10px;">
 <p style="margin-top: 0;">On July 12th, 2014, 10:32 p.m. CDT, <b>Matt Jordan</b> wrote:</p>
 <blockquote style="margin-left: 1em; border-left: 2px solid #d0d0d0; padding-left: 10px;">
  <pre style="white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">I'm not sure I understand the problem for your issue description:

"When ast_format_cap_append was replaced with ast_format_cap_append_from_cap, the behavior of the original function was not preserved. This change introduces ast_format_cap_append_compatible_from_cap which reproduces the original behavior of ast_format_cap_append and alters the original users of ast_format_cap_append to use ast_format_cap_append_compatible_from_cap."

What behavioural difference was changed? Why do we need to switch it back? What is the intent of ast_format_cap_append_compatible_from_cap? And why wouldn't you just use ast_format_cap_get_compatible?

</pre>
 </blockquote>




 <p>On July 13th, 2014, 11:04 a.m. CDT, <b>opticron</b> wrote:</p>
 <blockquote style="margin-left: 1em; border-left: 2px solid #d0d0d0; padding-left: 10px;">
  <pre style="white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">The difference in behavior is that ast_format_cap_append_from_cap appends unconditionally from the source format capability while ast_format_cap_append checks for compatibility with ast_format_cap_iscompatible before appending from the source format capability.

Without switching it back, chan_pjsip now offers codecs to the endpoint that are not configured in its codec definition and causes one-way audio where it otherwise would have declined the INVITE.

It appears that this could be accomplished using ast_format_cap_get_compatible, ast_format_cap_append_from_cap, and the allocation of another format cap for each instance.</pre>
 </blockquote>





 <p>On July 13th, 2014, 12:14 p.m. CDT, <b>opticron</b> wrote:</p>
 <blockquote style="margin-left: 1em; border-left: 2px solid #d0d0d0; padding-left: 10px;">
  <pre style="white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">I could also add an ast_media_type parameter to ast_format_cap_get_compatible to obtain equivalent functionality:
ast_format_cap_get_compatible(cap1, cap2, cap2, type);</pre>
 </blockquote>








</blockquote>

<pre style="white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">ast_format_cap_append doesn't check for compatibility. In fact, ast_format_cap_append_from_cap calls ast_format_cap_append when it copies the formats over; there's really not difference between the two.

Compatibility is determined only via ast_format_cap_iscompatible_format and ast_format_cap_get_compatible. The latter will take two format compatibility structures and compute their joint capabilities. I don't see why ast_format_cap_get_compatible can't be used.

As for needing one that takes in a type as well, I don't think that will necessarily be needed. IIRC, PJSIP already maintains its formats for different media streams in different compatibility structures; other channel drivers (such as chan_sip) should already have code that pulls the formats of a particular type out of their joint capability structure.

</pre>
<br />










<p>- Matt</p>


<br />
<p>On July 12th, 2014, 9:19 p.m. CDT, opticron wrote:</p>








<table bgcolor="#fefadf" width="100%" cellspacing="0" cellpadding="8" style="background-image: url('https://reviewboard.asterisk.org/static/rb/images/review_request_box_top_bg.ab6f3b1072c9.png'); background-position: left top; background-repeat: repeat-x; border: 1px black solid;">
 <tr>
  <td>

<div>Review request for Asterisk Developers, Corey Farrell and Matt Jordan.</div>
<div>By opticron.</div>


<p style="color: grey;"><i>Updated July 12, 2014, 9:19 p.m.</i></p>









<div style="margin-top: 1.5em;">
 <b style="color: #575012; font-size: 10pt;">Repository: </b>
Asterisk
</div>


<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Description </h1>
 <table width="100%" bgcolor="#ffffff" cellspacing="0" cellpadding="10" style="border: 1px solid #b8b5a0">
 <tr>
  <td>
   <pre style="margin: 0; padding: 0; white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">When ast_format_cap_append was replaced with ast_format_cap_append_from_cap, the behavior of the original function was not preserved. This change introduces ast_format_cap_append_compatible_from_cap which reproduces the original behavior of ast_format_cap_append and alters the original users of ast_format_cap_append to use ast_format_cap_append_compatible_from_cap.

The primary difference in behavior is that ast_format_cap_append_from_cap appends unconditionally from the source format capability while ast_format_cap_append checks for compatibility with ast_format_cap_iscompatible.</pre>
  </td>
 </tr>
</table>


<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Testing </h1>
<table width="100%" bgcolor="#ffffff" cellspacing="0" cellpadding="10" style="border: 1px solid #b8b5a0">
 <tr>
  <td>
   <pre style="margin: 0; padding: 0; white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">Ensured that calling a channel via Dial() produced the same behavior as trunk.</pre>
  </td>
 </tr>
</table>


<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Diffs</b> </h1>
<ul style="margin-left: 3em; padding-left: 0;">

 <li>team/group/media_formats-reviewed-trunk/res/res_pjsip_session.c <span style="color: grey">(418441)</span></li>

 <li>team/group/media_formats-reviewed-trunk/res/res_pjsip_sdp_rtp.c <span style="color: grey">(418441)</span></li>

 <li>team/group/media_formats-reviewed-trunk/main/format_cap.c <span style="color: grey">(418441)</span></li>

 <li>team/group/media_formats-reviewed-trunk/include/asterisk/format_cap.h <span style="color: grey">(418441)</span></li>

 <li>team/group/media_formats-reviewed-trunk/channels/chan_sip.c <span style="color: grey">(418441)</span></li>

 <li>team/group/media_formats-reviewed-trunk/addons/chan_ooh323.c <span style="color: grey">(418441)</span></li>

</ul>

<p><a href="https://reviewboard.asterisk.org/r/3763/diff/" style="margin-left: 3em;">View Diff</a></p>







  </td>
 </tr>
</table>








  </div>
 </body>
</html>