Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(42)

Side by Side Diff: silk/decode_frame.c

Issue 882843002: Update to opus-HEAD-66611f1. (Closed) Base URL: https://chromium.googlesource.com/chromium/deps/opus.git@master
Patch Set: Add the contents of Makefile.mips back. Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « silk/decode_core.c ('k') | silk/decode_pulses.c » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /*********************************************************************** 1 /***********************************************************************
2 Copyright (c) 2006-2011, Skype Limited. All rights reserved. 2 Copyright (c) 2006-2011, Skype Limited. All rights reserved.
3 Redistribution and use in source and binary forms, with or without 3 Redistribution and use in source and binary forms, with or without
4 modification, are permitted provided that the following conditions 4 modification, are permitted provided that the following conditions
5 are met: 5 are met:
6 - Redistributions of source code must retain the above copyright notice, 6 - Redistributions of source code must retain the above copyright notice,
7 this list of conditions and the following disclaimer. 7 this list of conditions and the following disclaimer.
8 - Redistributions in binary form must reproduce the above copyright 8 - Redistributions in binary form must reproduce the above copyright
9 notice, this list of conditions and the following disclaimer in the 9 notice, this list of conditions and the following disclaimer in the
10 documentation and/or other materials provided with the distribution. 10 documentation and/or other materials provided with the distribution.
(...skipping 24 matching lines...) Expand all
35 35
36 /****************/ 36 /****************/
37 /* Decode frame */ 37 /* Decode frame */
38 /****************/ 38 /****************/
39 opus_int silk_decode_frame( 39 opus_int silk_decode_frame(
40 silk_decoder_state *psDec, /* I/O Pointer to Silk decoder state */ 40 silk_decoder_state *psDec, /* I/O Pointer to Silk decoder state */
41 ec_dec *psRangeDec, /* I/O Compress or data structure */ 41 ec_dec *psRangeDec, /* I/O Compress or data structure */
42 opus_int16 pOut[], /* O Pointer to output speech frame */ 42 opus_int16 pOut[], /* O Pointer to output speech frame */
43 opus_int32 *pN, /* O Pointer to size of output frame */ 43 opus_int32 *pN, /* O Pointer to size of output frame */
44 opus_int lostFlag, /* I 0: no lo ss, 1 loss, 2 decode fec */ 44 opus_int lostFlag, /* I 0: no lo ss, 1 loss, 2 decode fec */
45 opus_int condCoding /* I The type of conditional coding to use */ 45 opus_int condCoding, /* I The type of conditional coding to use */
46 int arch /* I Run-time architecture */
46 ) 47 )
47 { 48 {
48 VARDECL( silk_decoder_control, psDecCtrl ); 49 VARDECL( silk_decoder_control, psDecCtrl );
49 opus_int L, mv_len, ret = 0; 50 opus_int L, mv_len, ret = 0;
50 VARDECL( opus_int, pulses );
51 SAVE_STACK; 51 SAVE_STACK;
52 52
53 L = psDec->frame_length; 53 L = psDec->frame_length;
54 ALLOC( psDecCtrl, 1, silk_decoder_control ); 54 ALLOC( psDecCtrl, 1, silk_decoder_control );
55 ALLOC( pulses, (L + SHELL_CODEC_FRAME_LENGTH - 1) &
56 ~(SHELL_CODEC_FRAME_LENGTH - 1), opus_int );
57 psDecCtrl->LTP_scale_Q14 = 0; 55 psDecCtrl->LTP_scale_Q14 = 0;
58 56
59 /* Safety checks */ 57 /* Safety checks */
60 silk_assert( L > 0 && L <= MAX_FRAME_LENGTH ); 58 silk_assert( L > 0 && L <= MAX_FRAME_LENGTH );
61 59
62 if( lostFlag == FLAG_DECODE_NORMAL || 60 if( lostFlag == FLAG_DECODE_NORMAL ||
63 ( lostFlag == FLAG_DECODE_LBRR && psDec->LBRR_flags[ psDec->nFramesDecod ed ] == 1 ) ) 61 ( lostFlag == FLAG_DECODE_LBRR && psDec->LBRR_flags[ psDec->nFramesDecod ed ] == 1 ) )
64 { 62 {
63 VARDECL( opus_int16, pulses );
64 ALLOC( pulses, (L + SHELL_CODEC_FRAME_LENGTH - 1) &
65 ~(SHELL_CODEC_FRAME_LENGTH - 1), opus_int16 );
65 /*********************************************/ 66 /*********************************************/
66 /* Decode quantization indices of side info */ 67 /* Decode quantization indices of side info */
67 /*********************************************/ 68 /*********************************************/
68 silk_decode_indices( psDec, psRangeDec, psDec->nFramesDecoded, lostFlag, condCoding ); 69 silk_decode_indices( psDec, psRangeDec, psDec->nFramesDecoded, lostFlag, condCoding );
69 70
70 /*********************************************/ 71 /*********************************************/
71 /* Decode quantization indices of excitation */ 72 /* Decode quantization indices of excitation */
72 /*********************************************/ 73 /*********************************************/
73 silk_decode_pulses( psRangeDec, pulses, psDec->indices.signalType, 74 silk_decode_pulses( psRangeDec, pulses, psDec->indices.signalType,
74 psDec->indices.quantOffsetType, psDec->frame_length ); 75 psDec->indices.quantOffsetType, psDec->frame_length );
75 76
76 /********************************************/ 77 /********************************************/
77 /* Decode parameters and pulse signal */ 78 /* Decode parameters and pulse signal */
78 /********************************************/ 79 /********************************************/
79 silk_decode_parameters( psDec, psDecCtrl, condCoding ); 80 silk_decode_parameters( psDec, psDecCtrl, condCoding );
80 81
81 /********************************************************/ 82 /********************************************************/
82 /* Run inverse NSQ */ 83 /* Run inverse NSQ */
83 /********************************************************/ 84 /********************************************************/
84 silk_decode_core( psDec, psDecCtrl, pOut, pulses ); 85 silk_decode_core( psDec, psDecCtrl, pOut, pulses, arch );
85 86
86 /********************************************************/ 87 /********************************************************/
87 /* Update PLC state */ 88 /* Update PLC state */
88 /********************************************************/ 89 /********************************************************/
89 silk_PLC( psDec, psDecCtrl, pOut, 0 ); 90 silk_PLC( psDec, psDecCtrl, pOut, 0, arch );
90 91
91 psDec->lossCnt = 0; 92 psDec->lossCnt = 0;
92 psDec->prevSignalType = psDec->indices.signalType; 93 psDec->prevSignalType = psDec->indices.signalType;
93 silk_assert( psDec->prevSignalType >= 0 && psDec->prevSignalType <= 2 ); 94 silk_assert( psDec->prevSignalType >= 0 && psDec->prevSignalType <= 2 );
94 95
95 /* A frame has been decoded without errors */ 96 /* A frame has been decoded without errors */
96 psDec->first_frame_after_reset = 0; 97 psDec->first_frame_after_reset = 0;
97 } else { 98 } else {
98 /* Handle packet loss by extrapolation */ 99 /* Handle packet loss by extrapolation */
99 silk_PLC( psDec, psDecCtrl, pOut, 1 ); 100 silk_PLC( psDec, psDecCtrl, pOut, 1, arch );
100 } 101 }
101 102
102 /*************************/ 103 /*************************/
103 /* Update output buffer. */ 104 /* Update output buffer. */
104 /*************************/ 105 /*************************/
105 silk_assert( psDec->ltp_mem_length >= psDec->frame_length ); 106 silk_assert( psDec->ltp_mem_length >= psDec->frame_length );
106 mv_len = psDec->ltp_mem_length - psDec->frame_length; 107 mv_len = psDec->ltp_mem_length - psDec->frame_length;
107 silk_memmove( psDec->outBuf, &psDec->outBuf[ psDec->frame_length ], mv_len * sizeof(opus_int16) ); 108 silk_memmove( psDec->outBuf, &psDec->outBuf[ psDec->frame_length ], mv_len * sizeof(opus_int16) );
108 silk_memcpy( &psDec->outBuf[ mv_len ], pOut, psDec->frame_length * sizeof( o pus_int16 ) ); 109 silk_memcpy( &psDec->outBuf[ mv_len ], pOut, psDec->frame_length * sizeof( o pus_int16 ) );
109 110
111 /************************************************/
112 /* Comfort noise generation / estimation */
113 /************************************************/
114 silk_CNG( psDec, psDecCtrl, pOut, L );
115
110 /****************************************************************/ 116 /****************************************************************/
111 /* Ensure smooth connection of extrapolated and good frames */ 117 /* Ensure smooth connection of extrapolated and good frames */
112 /****************************************************************/ 118 /****************************************************************/
113 silk_PLC_glue_frames( psDec, pOut, L ); 119 silk_PLC_glue_frames( psDec, pOut, L );
114 120
115 /************************************************/
116 /* Comfort noise generation / estimation */
117 /************************************************/
118 silk_CNG( psDec, psDecCtrl, pOut, L );
119
120 /* Update some decoder state variables */ 121 /* Update some decoder state variables */
121 psDec->lagPrev = psDecCtrl->pitchL[ psDec->nb_subfr - 1 ]; 122 psDec->lagPrev = psDecCtrl->pitchL[ psDec->nb_subfr - 1 ];
122 123
123 /* Set output frame length */ 124 /* Set output frame length */
124 *pN = L; 125 *pN = L;
125 126
126 RESTORE_STACK; 127 RESTORE_STACK;
127 return ret; 128 return ret;
128 } 129 }
OLDNEW
« no previous file with comments | « silk/decode_core.c ('k') | silk/decode_pulses.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698