123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529 |
- /**************************************************************************
- *
- * ITU-T SOFTWARE TOOLS' GENERAL PUBLIC LICENSE
- *
- * This "General Public License" is published in the Annex 1 of the
- * ITU-T Recommendation on "SOFTWARE TOOLS FOR HOMOGENITY OF RESULTS
- * IN THE STANDARDIZATION PROCESS OF SPEECH AND AUDIO CODERS",
- * approved in Geneva, 2000.
- *
- * TERMS AND CONDITIONS
- *
- * 1. This License Agreement applies to any module or other work
- * related to the ITU-T Software Tool Library, and developed by the
- * User's Group on Software Tools. The "Module", below, refers to any
- * such module or work, and a "work based on the Module" means either
- * the Module or any work containing the Module or a portion of it,
- * either verbatim or with modifications. Each licensee is addressed
- * as "you".
- *
- * 2. You may copy and distribute verbatim copies of the Module's
- * source code as you receive it, in any medium, provided that you:
- * - conspicuously and appropriately publish on each copy an appropriate
- * copyright notice and disclaimer of warranty;
- * - keep intact all the notices that refer to this General Public
- * License and to the absence of any warranty; and
- * - give any other recipients of the Module a copy of this General
- * Public License along with the Module.
- * You may charge a fee for the physical act of transferring a copy.
- *
- * 3. You may modify your copy or copies of the Module or any portion
- * of it, and copy and distribute such modifications under the terms
- * of Paragraph 1 above, provided that you also do the following:
- *
- * o cause the modified files to carry prominent notices stating
- * that you changed the files and the date of any change; and
- *
- * o cause the whole of any work that you distribute or publish,
- * that in whole or in part contains the Module or any part
- * thereof, either with or without modifications, to be licensed
- * at no charge to all third parties under the terms of this
- * General Public License (except that you may choose to grant
- * warranty protection to some or all third parties, at your
- * option).
- *
- * o If the modified module normally reads commands interactively
- * when run, you must cause it, when started running for such
- * interactive use in the simplest and most usual way, to print or
- * display an announcement including an appropriate copyright
- * notice and a notice that there is no warranty (or else, saying
- * that you provide a warranty) and that users may redistribute
- * the module under these conditions, and telling the user how to
- * view a copy of this General Public License.
- *
- * You may charge a fee for the physical act of transferring a copy,
- * and you may at your option offer warranty protection in exchange
- * for a fee.
- *
- * Mere aggregation of another independent work with the Module (or
- * its derivative) on a volume of a storage or distribution medium
- * does not bring the other work under the scope of these terms.
- *
- * 4. You may copy and distribute the Module (or a portion or
- * derivative of it, under Paragraph 2) in object code or executable
- * form under the terms of Paragraphs 1 and 2 above provided that you
- * also do one of the following:
- *
- * o accompany it with the complete corresponding machine-
- * readable source code, which must be distributed under the terms
- * of Paragraphs 1 and 2 above; or,
- *
- * o accompany it with a written offer, valid for at least three
- * years, to give any third party free (except for a nominal
- * charge for the cost of distribution) a complete machine-
- * readable copy of the corresponding source code, to be
- * distributed under the terms of Paragraphs 1 and 2 above; or,
- *
- * o accompany it with the information you received as to where
- * the corresponding source code may be obtained. (This
- * alternative is allowed only for noncommercial distribution and
- * only if you received the module in object code or executable
- * form alone.)
- *
- * Source code for a work means the preferred form of the work for
- * making modifications to it. For an executable file, complete
- * source code means all the source code for all modules it contains;
- * but, as a special exception, it need not include source code for
- * modules which are standard libraries that accompany the operating
- * system on which the executable file runs, or for standard header
- * files or definitions files that accompany that operating system.
- *
- * 5. You may not copy, modify, sublicense, distribute or transfer
- * the Module except as expressly provided under this General Public
- * License. Any attempt otherwise to copy, modify, sublicense,
- * distribute or transfer the Module is void, and will automatically
- * terminate your rights to use the Module under this License.
- * However, parties who have received copies, or rights to use copies,
- * from you under this General Public License will not have their
- * licenses terminated so long as such parties remain in full
- * compliance.
- *
- * 6. By copying, distributing or modifying the Module (or any work
- * based on the Module) you indicate your acceptance of this license
- * to do so, and all its terms and conditions.
- *
- * 7. Each time you redistribute the Module (or any work based on the
- * Module), the recipient automatically receives a license from the
- * original licensor to copy, distribute or modify the Module subject
- * to these terms and conditions. You may not impose any further
- * restrictions on the recipients' exercise of the rights granted
- * herein.
- *
- * 8. The ITU-T may publish revised and/or new versions of this
- * General Public License from time to time. Such new versions will
- * be similar in spirit to the present version, but may differ in
- * detail to address new problems or concerns.
- *
- * Each version is given a distinguishing version number. If the
- * Module specifies a version number of the license which applies to
- * it and "any later version", you have the option of following the
- * terms and conditions either of that version or of any later version
- * published by the ITU-T. If the Module does not specify a version
- * number of the license, you may choose any version ever published by
- * the ITU-T.
- *
- * 9. If you wish to incorporate parts of the Module into other free
- * modules whose distribution conditions are different, write to the
- * author to ask for permission. For software which is copyrighted by
- * the ITU-T, write to the ITU-T Secretariat; exceptions may be made
- * for this. This decision will be guided by the two goals of
- * preserving the free status of all derivatives of this free software
- * and of promoting the sharing and reuse of software generally.
- *
- *
- * NO WARRANTY
- *
- * 10. BECAUSE THE MODULE IS LICENSED FREE OF CHARGE, THERE IS NO
- * WARRANTY FOR THE MODULE, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
- * EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS
- * AND/OR OTHER PARTIES PROVIDE THE MODULE "AS IS" WITHOUT WARRANTY OF
- * ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND
- * PERFORMANCE OF THE MODULE IS WITH YOU. SHOULD THE MODULE PROVE
- * DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR
- * OR CORRECTION.
- *
- * 11. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
- * WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY
- * MODIFY AND/OR REDISTRIBUTE THE MODULE AS PERMITTED ABOVE, BE LIABLE
- * TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
- * CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE
- * THE MODULE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
- * RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR
- * A FAILURE OF THE MODULE TO OPERATE WITH ANY OTHER MODULES), EVEN IF
- * SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGES.
- *
- * END OF TERMS AND CONDITIONS
- ***************************************************************************/
- ;----------------------------------------------------------------------
- .equ G726_A_U_LAW, 0 ;1->if A/Mu-law inputs, 0-Otherwise ;Adeptte
-
- ;------------------------------------------------------------------------------
- ;Global Declarations:
- ;------------------------------------------------------------------------------
- .global _G726ADecode
- ;------------------------------------------------------------------------------
- ;Code Section in Program Memory
- ;------------------------------------------------------------------------------
- .section libg726a, code
- /******************************************************************************
- *
- * Function Name: G726_decode
- *
- * System: RISC
- *
- * Platform: dsPIC33F
- *
- * Description: Initializes the codec state
- *
- * Cycle Count: 235836-for 2nd block
- *
- * Input Parameters: w0 - Pointer to input buffer
- * w1 - Pointer to output buffer
- * w2 - Sample count
- * w3 - Law
- * w4 - Bit Rate
- * w5 - Pointer to Decoder State
- *
- * Output Parameters: None
- *
- * History:
- *
- * Date | By | Remarks
- * ---------------+-------------------+----------------------------------
- * Oct-27-2005 Sharanabasava M. Created.
- * Nov-18-2005 Sharanabasava M. Modified for G.726a
- * jan-2010 Sankaralingam & Thiyagarajan Modified for G.726a
- ******************************************************************************/
- .text
- _G726ADecode:
- push w8
- push w9
- push w10
- push w11
- push w12
- push w13
-
- mov w1,w10 ;input buffer
- mov w2,w11 ;outbut buffer
-
- add w0,#30,w13
- add w13,#30,w1
- add w1,#8,w1
-
- mov [w1++],w3 ;rate ;Adeptte
- mov [w1],w2
-
- dec w2,w12 ;w12-counter
- lnk #42
-
- mov w3,[w14+20]
- clr w2
- mov w2,[w14+30] ;idq = 0
-
- mov w2,[w14+38]
- mov w2,[w14+40] ;iyl = 0
-
- mov #38,w2
- add w14,w2,w2
- mov w2,[w14+16] ;&iyl
- add w14,#30,w2
- mov w2,[w14+18] ;&idq
-
- do w12,DECODE
- mov w14,w2
- add w13,#6,w0
- sub w13,#30,w1
- call _G726_fmult_b
- mov [w13 + 4],w0
- mov [w13 + 2],w1
- sub w13,#6,w2
- add w14,#14,w3
- dec2 w3,w4
- mov w14,w8
- call _G726_fmult
- mov [w8++],w5
- add w5,[w8++],w5 ;w5-sezi
- add w5,[w8++],w5
- add w5,[w8++],w5
- add w5,[w8++],w5
- add w5,[w8++],w5
- add w5,[w8++],w6
- add w6,[w8],w6 ;w6-sei
- asr w5,w3
-
- mov w3,[w14+36] ;isez ;Adeptte
- asr w6,w3
-
- mov w3,[w14+32] ;ise ;Adeptte
- mov [w14+16],w4 ;iyl ;Adeptte
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- mov [w13 + 24],w8
- mov #256,w6
- cp w8,w6
- bra ge,SIXFOUR
- asr w8,#2,w8
- bra LOG
- SIXFOUR:
- mov #64,w8 ;w8-al
- LOG:
- mov [w13 + 32],w0
- mov [w13 + 34],w1
- mov.d w0,[w4]
- mov [w13 + 18],w0
- mov.d [w4],w2
- mov w8,w1 ;last
- call _G726_mix
-
- mov w0,[w14+22] ;iy ;Adeptte
- mov [w14+22],w5
- mov w14,w0
-
- .if G726_A_U_LAW ;Adeptte
- ze [w10],w2 ;i = input[j]
- .else
- ze [w10++],w2 ;i = input[j]
- .endif
- mov w2,[w0++]
- mov w5,[w0++]
- mov [w13 + 20],w2
- mov w2,[w0++]
- mov [w13 + 22],w2
- mov w2,[w0++]
-
- mov [w14+20],w2 ;irate ;Adeptte
- mov w2,[w0]
- mov w14,w0
-
- mov [w14+18],w1 ;idq ;Adeptte
-
- add w13,#18,w2
- add w13,#30,w3
- inc2 w3,w3
- mov [w13+42],w4
- call _G726_iaq_spd1_scale1
- mov [w13 + 26],w0
-
- mov [w14+16],w4 ;iyl ;Adeptte
- mov [w14+30],w1 ;idq ;Adeptte
- mov.d [w4],w2
- call _G726_trans
-
- mov w0,[w14+26] ;itr ;Adeptte
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- mov [w13 + 30],w1
- mov w1,[w14+34] ;ipk2 ;Adeptte
- mov [w13 + 28],w1
- mov w1,[w13 + 30]
- mov [w14+30],w2 ;idq ;Adeptte
- cp0 w2
- bra ge,DQISTR
- mov #0x8000,w3
- sub w3,w2,w4
- bra DQSEZSTR
- DQISTR:
- mov w2,w4 ;w4-dqi
- DQSEZSTR:
-
- mov [w14+36],w3 ;isez ;Adeptte
- add w4,w3,w5 ;w5-dqsez
- mov #0xffff,w3
- btss w5,#15
- mov #1,w3
- mov w3,[w13 + 28] ;state->pk0
- clr w3
- cp0 w5
- bra z,SIGPK
- mov #1,w3 ;w3-sigpk
- SIGPK:
-
- mov w3,[w14+28] ;isigpk ;Adeptte
- mov [w14+32],w8 ;ise ;Adeptte
- add w4,w8,w0 ;w0-sr=dqi+se
-
- mov w0,[w14+24] ;isr ;Adeptte
- ;--------------------- sankar ;Adeptte --------------------;
- .if G726_A_U_LAW
- mov w0,w1 ;sr
-
- ze [w10++],w0 ;inp
- mov w8,w2 ;se
- mov [w13+38],w3
- mov [w14+22],w4 ;y
- mov w11,w5 ;*out
- call _G711_process
- inc2 w11,w11
- .else
- ;-----------------------------------------------------------;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;-----G.726A----;
- btsc w0,#15
- bra NEGCHK
- mov #8191,w1
- cp w0,w1
- bra le,MASK
- mov w1,w0
- bra ENDLIMO
- NEGCHK:
- mov #0xE000,w1
- cp w0,w1
- bra le,NEGSAT
- bra ENDLIMO
- MASK:
- mov #16383,w2
- and w0,w2,w0
- bra ENDLIMO
- NEGSAT:
- mov w1,w0
- ENDLIMO:
- mov w0,[w11++]
- .endif
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- mov w14,w8
-
- mov [w14+28],w3 ;isigpk ;Adeptte
- mov w3,[w8++]
- mov [w13 + 28],w1 ;state-pk0
- mov [w13 + 30],w4 ;state-pk1
- mul.uu w1,w4,w2
- mov w2,[w8++]
-
- mov [w14+34],w4 ;ipk2 ;Adeptte
- mul.uu w1,w4,w2
- add w13,#2,w3
- mov w2,[w8++]
- add w13,#4,w2
- mov [w3],[w8++]
- mov [w2],[w8++]
-
- mov [w14+26],w4 ;itr ;Adeptte
- mov w4,[w8++]
- mov w14,w0
- mov w8,w1
- call _G726_agen
- mov #0xd200,w2
- mov #1,w3 ;w3-tdp
- cp w2,[w8]
- bra gt,TONE
- clr w3
- TONE:
- add w13,#26,w2
- clr [w2] ;state->tdr
-
- mov [w14+26],w4 ;itr ;Adeptte
- cp0 w4
- bra nz,TRIGB
- mov w3,[w2] ;state->tdr=tdp
- TRIGB:
- mov [w13 + 20],w0
- mov [w13 + 22],w1
-
- mov [w14+22],w2 ;iy ;Adeptte
-
- mov [w14+26],w4 ;itr ;Adeptte
- mov [w13 + 24],w5
- call _G726_speedcon_blk3
- mov w0,[w13 + 24]
- mov w14,w7
- mov [w13 + 36],w0
- mov w0,[w7++]
-
- mov [w14+30],w0 ;idq ;Adeptte
- mov w0,[w7++]
-
- mov [w14+26],w0 ;itr ;Adeptte
- mov w0,[w7]
- mov w14,w0
- sub w13,#30,w1
- add w13,#6,w2
- call _G726_bgen
- sub w13,#4,w2
- mov w13,w3
- mov [w2--],[w3--]
- mov [w2],[w3]
- sub w13,#12,w4
- sub w13,#8,w5
- mov [w4--],[w5--]
- mov [w4--],[w5--]
- mov [w4--],[w5--]
- mov [w4--],[w5--]
- mov [w4--],[w5--]
- mov [w4--],[w5--]
- mov [w4--],[w5--]
- mov [w4--],[w5--]
- mov [w4--],[w5--]
- mov [w4],[w5]
-
- mov [w14+24],w0 ;isr ;Adeptte
- mov [w14+30],w1 ;idq ;Adeptte
- mov w4,w3
- call _G726_float_ab
- DECODE:
- nop
- ulnk
- pop w13
- pop w12
- pop w11
- pop w10
- pop w9
- pop w8
- return
- ;--------End of All Code Sections ---------------------------------------------
- .end ;End of program code in this file
|