1dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/* ------------------------------------------------------------------ 2dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * Copyright (C) 1998-2009 PacketVideo 3dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * 4dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 5dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * you may not use this file except in compliance with the License. 6dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * You may obtain a copy of the License at 7dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * 8dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * http://www.apache.org/licenses/LICENSE-2.0 9dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * 10dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * Unless required by applicable law or agreed to in writing, software 11dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 12dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 13dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * express or implied. 14dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * See the License for the specific language governing permissions 15dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * and limitations under the License. 16dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * ------------------------------------------------------------------- 17dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber */ 18dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/* 19dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 20dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Pathname: ./src/deinterleave.c 21dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 22dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------ 23dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber REVISION HISTORY 24dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 25dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Description: Modified from original shareware code 26dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 27dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Description: (1) Modified with new template, rename variables 28dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber (2) Removed for-loop to calculate win_inc, win_inc = SN2 (128) 29dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber (3) Replaced for-loop with memcpy 30dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber (4) Converted Int16 -> Int 31dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 32dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Description: Modified per review comments 33dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 34dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Who: Date: 35dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Description: 36dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 37dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------ 38dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber INPUT AND OUTPUT DEFINITIONS 39dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 40dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Inputs: 41dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber interleaved = input array that contains interleaved coefficients 42dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Data Type Int 43dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 44dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber deinterleaved = output array that will be updated with de-interleaved 45dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber coefficients of input array. Data Type Int 46dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 47dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pFrameInfo = pointer to structure that holds information of current 48dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber frame. Data Type FrameInfo 49dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 50dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Local Stores/Buffers/Pointers Needed: 51dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber None 52dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 53dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Global Stores/Buffers/Pointers Needed: 54dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber None 55dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 56dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Outputs: 57dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber None 58dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 59dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Pointers and Buffers Modified: 60dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber deinterleaved contents updated with de-interleaved coefficients from 61dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber the input array: interleaved 62dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 63dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Local Stores Modified: 64dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber None 65dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 66dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Global Stores Modified: 67dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber None 68dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 69dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------ 70dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber FUNCTION DESCRIPTION 71dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 72dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber This function performs the deinterleaving across all short windows in 73dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber each group 74dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 75dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------ 76dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber REQUIREMENTS 77dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 78dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber This function should replace the contents of pDeinterleaved with the 79dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber de-interleaved 1024 coefficients of one frame 80dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 81dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------ 82dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber REFERENCES 83dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 84dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber (1) MPEG-2 NBC Audio Decoder 85dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber "This software module was originally developed by AT&T, Dolby 86dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Laboratories, Fraunhofer Gesellschaft IIS in the course of development 87dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber of the MPEG-2 NBC/MPEG-4 Audio standard ISO/IEC 13818-7, 14496-1,2 and 88dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 3. This software module is an implementation of a part of one or more 89dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber MPEG-2 NBC/MPEG-4 Audio tools as specified by the MPEG-2 NBC/MPEG-4 90dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Audio standard. ISO/IEC gives users of the MPEG-2 NBC/MPEG-4 Audio 91dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber standards free license to this software module or modifications thereof 92dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber for use in hardware or software products claiming conformance to the 93dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber MPEG-2 NBC/MPEG-4 Audio standards. Those intending to use this software 94dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber module in hardware or software products are advised that this use may 95dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber infringe existing patents. The original developer of this software 96dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber module and his/her company, the subsequent editors and their companies, 97dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber and ISO/IEC have no liability for use of this software module or 98dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber modifications thereof in an implementation. Copyright is not released 99dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber for non MPEG-2 NBC/MPEG-4 Audio conforming products.The original 100dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber developer retains full right to use the code for his/her own purpose, 101dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber assign or donate the code to a third party and to inhibit third party 102dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber from using the code for non MPEG-2 NBC/MPEG-4 Audio conforming products. 103dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber This copyright notice must be included in all copies or derivative 104dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber works." 105dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Copyright(c)1996. 106dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 107dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber (2) ISO/IEC 14496-3: 1999(E) 108dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Subpart 4 p78 quant_to_spec 109dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 110dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------ 111dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber PSEUDO-CODE 112dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 113dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pInterleaved = interleaved; 114dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pDeinterleaved = deinterleaved; 115dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 116dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pSfbPerWin = pFrameInfo->sfb_per_win; 117dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber ngroups = pFrameInfo->num_groups; 118dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pGroupLen = pFrameInfo->group_len; 119dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 120dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pGroup = pDeinterleaved; 121dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 122dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber FOR (group = ngroups; group > 0; group--) 123dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 124dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pSfbWidth = pFrameInfo->sfb_width_128; 125dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber sfb_inc = 0; 126dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pStart = pInterleaved; 127dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 128dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber FOR (sfb = pSfbPerWin[ngroups-group]; sfb > 0; sfb--) 129dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 130dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pWin = pGroup; 131dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 132dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber FOR (win = pGroupLen[ngroups-group]; win > 0; win--) 133dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 134dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pDeinterleaved = pWin + sfb_inc; 135dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 136dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pv_memcpy( 137dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pDeinterleaved, 138dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pInterleaved, 139dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber *pSfbWidth*sizeof(*pInterleaved)); 140dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 141dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pInterleaved += *pSfbWidth; 142dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 143dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pWin += SN2; 144dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 145dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber ENDFOR (win) 146dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 147dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber sfb_inc += *pSfbWidth++; 148dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 149dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber ENDFOR (sfb) 150dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 151dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pGroup += (pInterleaved - pStart); 152dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 153dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber ENDFOR (group) 154dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 155dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------ 156dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber RESOURCES USED 157dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber When the code is written for a specific target processor the 158dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber the resources used should be documented below. 159dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 160dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber STACK USAGE: [stack count for this module] + [variable to represent 161dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber stack usage for each subroutine called] 162dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 163dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber where: [stack usage variable] = stack usage for [subroutine 164dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber name] (see [filename].ext) 165dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 166dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber DATA MEMORY USED: x words 167dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 168dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber PROGRAM MEMORY USED: x words 169dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 170dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber CLOCK CYCLES: [cycle count equation for this module] + [variable 171dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber used to represent cycle count for each subroutine 172dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber called] 173dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 174dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber where: [cycle count variable] = cycle count for [subroutine 175dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber name] (see [filename].ext) 176dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 177dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------ 178dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber*/ 179dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 180dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 181dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*---------------------------------------------------------------------------- 182dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; INCLUDES 183dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/ 184dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#include "pv_audio_type_defs.h" 185dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#include "huffman.h" 186dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#include "aac_mem_funcs.h" 187dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 188dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*---------------------------------------------------------------------------- 189dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; MACROS 190dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; Define module specific macros here 191dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/ 192dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 193dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*---------------------------------------------------------------------------- 194dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; DEFINES 195dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; Include all pre-processor statements here. Include conditional 196dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; compile variables also. 197dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/ 198dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 199dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*---------------------------------------------------------------------------- 200dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; LOCAL FUNCTION DEFINITIONS 201dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; Function Prototype declaration 202dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/ 203dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 204dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*---------------------------------------------------------------------------- 205dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; LOCAL STORE/BUFFER/POINTER DEFINITIONS 206dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; Variable declaration - defined here and used outside this module 207dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/ 208dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 209dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*---------------------------------------------------------------------------- 210dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; EXTERNAL FUNCTION REFERENCES 211dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; Declare functions defined elsewhere and referenced in this module 212dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/ 213dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 214dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*---------------------------------------------------------------------------- 215dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; EXTERNAL GLOBAL STORE/BUFFER/POINTER REFERENCES 216dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; Declare variables used in this module but defined elsewhere 217dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/ 218dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 219dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*---------------------------------------------------------------------------- 220dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; FUNCTION CODE 221dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/ 222dacaa73ae5010b66f4224d70a520945e5b653544Andreas Hubervoid deinterleave( 223dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int16 interleaved[], 224dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int16 deinterleaved[], 225dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber FrameInfo *pFrameInfo) 226dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber{ 227dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 228dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int group; /* group index */ 229dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int sfb; /* scalefactor band index */ 230dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int win; /* window index */ 231dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int16 *pGroup; 232dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int16 *pWin; 233dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int16 *pStart; 234dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int16 *pInterleaved; 235dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int16 *pDeinterleaved; 236dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int sfb_inc; 237dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 238dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int ngroups; 239dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int *pGroupLen; 240dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int *pSfbPerWin; 241dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int *pSfbWidth; 242dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 243dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pInterleaved = interleaved; 244dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pDeinterleaved = deinterleaved; 245dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 246dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pSfbPerWin = pFrameInfo->sfb_per_win; 247dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber ngroups = pFrameInfo->num_groups; 248dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pGroupLen = pFrameInfo->group_len; 249dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 250dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pGroup = pDeinterleaved; 251dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 252dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber for (group = ngroups; group > 0; group--) 253dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 254dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pSfbWidth = pFrameInfo->sfb_width_128; 255dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber sfb_inc = 0; 256dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pStart = pInterleaved; 257dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 258dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /* Perform the deinterleaving across all windows in a group */ 259dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 260dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber for (sfb = pSfbPerWin[ngroups-group]; sfb > 0; sfb--) 261dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 262dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pWin = pGroup; 263dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 264dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber for (win = pGroupLen[ngroups-group]; win > 0; win--) 265dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 266dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pDeinterleaved = pWin + sfb_inc; 267dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 268dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pv_memcpy( 269dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pDeinterleaved, 270dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pInterleaved, 271dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber *pSfbWidth*sizeof(*pInterleaved)); 272dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 273dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pInterleaved += *pSfbWidth; 274dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 275dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pWin += SN2; 276dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 277dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } /* for (win) */ 278dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 279dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber sfb_inc += *pSfbWidth++; 280dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 281dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } /* for (sfb) */ 282dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 283dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber pGroup += (pInterleaved - pStart); 284dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 285dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } /* for (group) */ 286dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 287dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber} /* deinterleave */ 288