<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
  <title></title>
</head>
<body bgcolor="#ffffff" text="#000000">
I agree, thank you very much Klaus. Patch commited.<br>
<br>
BR<br>
Sergio<br>
<br>
Klaus Darilion escribi&oacute;:
<blockquote cite="mid:487741DC.9080100@pernau.at" type="cite">
  <pre wrap="">Hi Sergio!

I think if we define blocksize as in the previous mail, the code for 
if2-&gt;AMR conversion is wrong and should be:

          /*If amr+TOC needs a byte more than if2 */
          if(stuf &lt; 4)
          {
              /* Set last byte */
              data[bs] = data[bs - 1] &lt;&lt; 4;
              /*Increase size of frame*/
              send-&gt;datalen++;

           /* For each byte */
           for(j=bs-1; j&gt;0; j--)
               data[j] = data[j] &gt;&gt; 4 | data[j-1] &lt;&lt; 4;
           }
           else
           {
               /* For each byte */
               for(j=bs; j&gt;0; j--)
                   data[j] = data[j] &gt;&gt; 4 | data[j-1] &lt;&lt; 4;
           }


instead of

          /*If amr has a byte more than if2 */
          if(stuf &lt; 4)
          {
              /* Set last byte */
              data[bs] = data[bs - 1] &lt;&lt; 4;
              /*Increase size of frame*/
              send-&gt;datalen++;
           }

           /* For each byte */
           for(j=bs-1; j&gt;0; j--)
               data[j] = data[j] &gt;&gt; 4 | data[j-1] &lt;&lt; 4;


regards
klaus

Klaus Darilion schrieb:
  </pre>
  <blockquote type="cite">
    <pre wrap="">Again the same old story :-) Whe should have documented that. It is up 
to use how we define the term "blocksize". It can be either the size of 
the frame received from libh324m (in if2 format) or the size of the AMR 
frame used in ast_frame (octed aligned RFC 3267 mode).

I think the code now handles "blocksize" as the octed-aligned AMR frame 
size. Currently the blocksize is mixed (before it was if2). What about 
this wording:





These are the different AMR modes (Table 1 from RFC 3267)

                                     Class A   total speech
                   Index   Mode       bits       bits
                   ----------------------------------------
                     0     AMR 4.75   42         95
                     1     AMR 5.15   49        103
                     2     AMR 5.9    55        118
                     3     AMR 6.7    58        134
                     4     AMR 7.4    61        148
                     5     AMR 7.95   75        159
                     6     AMR 10.2   65        204
                     7     AMR 12.2   81        244
                     8     AMR SID    39         39

           Table 1.  The number of class A bits for the AMR codec.

Asterisk's internal AMR format:
===============================

Asterisk internally use the "octed-aligned" RTP format in ast_frame.
(see section 4.4 in RFC 3267)
This allows to have multiple AMR frames in one Asterisk frame. This
means, the payload of an ast_frame wich contains N AMR frames consists
of (se also section 4.4.5.1 of RFC 3267):

   1. 1 byte CMR (codec mode request)
   2. N byte TOC (the TOC contains the AMR mode of the respecitve frame
      and one bit which tells us if it is the last TOC or if there are
      some more)
   3. blocksize(AMR frame 0) + ..... + blocksize(AMR frame N)

We define the blocksize of an AMR frame os the number of bytes needed
to contain an AMR frame in the respective mode. Thus, it is the number
of total speech bits divided by 8 and rounded upwards.
E.g. an AMR frame in mode 5 has 159 bits. To store this frame we need
20 bytes. Thus, the blocksize of an AMR frame in mode 5 is 20 bytes.

H324M AMR format:
=================
In H324M, the AMR frames received from are in if2 format from libh324m.
(see Annex A in TS 26.101). This means that there are 4 bits for the AMR
mode followed by the speech bits. E.g. an AMR frame in mode 5 in if format
needs 159+4 =&gt; 21 bytes.
There is always only one AMR frame in an if2 packet.

Extended Table 1:
==================

                         Class A   total speech   block   if2 frame
       Index   Mode       bits       bits          size     size
       -------------------------------------------------------------
         0     AMR 4.75   42         95            12        13
         1     AMR 5.15   49        103            13        14
         2     AMR 5.9    55        118            15        16
         3     AMR 6.7    58        134            17        18
         4     AMR 7.4    61        148            19        19
         5     AMR 7.95   75        159            20        21
         6     AMR 10.2   65        204            26        26
         7     AMR 12.2   81        244            31        31
         8     AMR SID    39         39             5         6





regards
klaus

Sergio Garcia Murillo schrieb:
    </pre>
    <blockquote type="cite">
      <pre wrap="">Hi Klaus,

I used an advanced method called try &amp; error ;)

The original values were taken from the mpeg4ip packetization code, the 
latest changes in the values from the low
bit rates ones are due to an error reproducing a mp4 file created with 
ffmpeg at those bit rates and adjusted them til
everything worked again.

If everyone find any mode not working just let me know and I'll try to 
fix it. Or if anyone knows how to calculate the
correct ones then please tell me.

Best regards
Sergio

Klaus Darilion escribi&oacute;:
      </pre>
      <blockquote type="cite">
        <pre wrap="">Hi Sergio!

I wonder how you calculate the block size - I can not reproduce it.

Is it just dividing the bits of table 1 in RFC 3267 by 8 and rounding or 
is there some more magic?

thanks
klaus

_______________________________________________
--Bandwidth and Colocation Provided by <a class="moz-txt-link-freetext" href="http://www.api-digital.com">http://www.api-digital.com</a>--

asterisk-video mailing list
To UNSUBSCRIBE or update options visit:
   <a class="moz-txt-link-freetext" href="http://lists.digium.com/mailman/listinfo/asterisk-video">http://lists.digium.com/mailman/listinfo/asterisk-video</a>
  
        </pre>
      </blockquote>
      <pre wrap="">
_______________________________________________
--Bandwidth and Colocation Provided by <a class="moz-txt-link-freetext" href="http://www.api-digital.com">http://www.api-digital.com</a>--

asterisk-video mailing list
To UNSUBSCRIBE or update options visit:
   <a class="moz-txt-link-freetext" href="http://lists.digium.com/mailman/listinfo/asterisk-video">http://lists.digium.com/mailman/listinfo/asterisk-video</a>
      </pre>
    </blockquote>
    <pre wrap="">_______________________________________________
--Bandwidth and Colocation Provided by <a class="moz-txt-link-freetext" href="http://www.api-digital.com">http://www.api-digital.com</a>--

asterisk-video mailing list
To UNSUBSCRIBE or update options visit:
   <a class="moz-txt-link-freetext" href="http://lists.digium.com/mailman/listinfo/asterisk-video">http://lists.digium.com/mailman/listinfo/asterisk-video</a>
    </pre>
  </blockquote>
  <pre wrap=""><!---->
_______________________________________________
--Bandwidth and Colocation Provided by <a class="moz-txt-link-freetext" href="http://www.api-digital.com">http://www.api-digital.com</a>--

asterisk-video mailing list
To UNSUBSCRIBE or update options visit:
   <a class="moz-txt-link-freetext" href="http://lists.digium.com/mailman/listinfo/asterisk-video">http://lists.digium.com/mailman/listinfo/asterisk-video</a>
  </pre>
</blockquote>
<br>
</body>
</html>