SIMD optimization using float_to_int16_interleave.
Patch by Zhou Zongyi, zhouzy A os D pku D edu D cn Originally committed as revision 22414 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
		
							parent
							
								
									6ebc724060
								
							
						
					
					
						commit
						d00261a34b
					
				@ -790,6 +790,7 @@ static int wma_decode_frame(WMACodecContext *s, int16_t *samples)
 | 
				
			|||||||
    /* convert frame to integer */
 | 
					    /* convert frame to integer */
 | 
				
			||||||
    n = s->frame_len;
 | 
					    n = s->frame_len;
 | 
				
			||||||
    incr = s->nb_channels;
 | 
					    incr = s->nb_channels;
 | 
				
			||||||
 | 
					    if (s->dsp.float_to_int16_interleave == ff_float_to_int16_interleave_c) {
 | 
				
			||||||
    for(ch = 0; ch < s->nb_channels; ch++) {
 | 
					    for(ch = 0; ch < s->nb_channels; ch++) {
 | 
				
			||||||
        ptr = samples + ch;
 | 
					        ptr = samples + ch;
 | 
				
			||||||
        iptr = s->frame_out[ch];
 | 
					        iptr = s->frame_out[ch];
 | 
				
			||||||
@ -802,6 +803,16 @@ static int wma_decode_frame(WMACodecContext *s, int16_t *samples)
 | 
				
			|||||||
        memmove(&s->frame_out[ch][0], &s->frame_out[ch][s->frame_len],
 | 
					        memmove(&s->frame_out[ch][0], &s->frame_out[ch][s->frame_len],
 | 
				
			||||||
                s->frame_len * sizeof(float));
 | 
					                s->frame_len * sizeof(float));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        float *output[MAX_CHANNELS];
 | 
				
			||||||
 | 
					        for (ch = 0; ch < MAX_CHANNELS; ch++)
 | 
				
			||||||
 | 
					            output[ch] = s->frame_out[ch];
 | 
				
			||||||
 | 
					        s->dsp.float_to_int16_interleave(samples, (const float **)output, n, incr);
 | 
				
			||||||
 | 
					        for(ch = 0; ch < incr; ch++) {
 | 
				
			||||||
 | 
					            /* prepare for next block */
 | 
				
			||||||
 | 
					            memmove(&s->frame_out[ch][0], &s->frame_out[ch][n], n * sizeof(float));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef TRACE
 | 
					#ifdef TRACE
 | 
				
			||||||
    dump_shorts(s, "samples", samples, n * s->nb_channels);
 | 
					    dump_shorts(s, "samples", samples, n * s->nb_channels);
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user