
/************************************************************
**
**  Private : 
**
**  History : 
**    2013.04.26 M.Takigahira 処理精査、#ifdef排除、if=>switch
**    2013.04.03 K.Takagi     CHオフセット指定を追加
**    2012.12.03 K.Takagi     bit数を引数に変更
**    2012.09.20 K.Takagi     新規作成
**
**  Description
**  -----------
**  16bitまたは24bitデータをfloat型に変換
**  また配列を[lenght][ch] から [ch][length] の構成に並び替え
**
*/

///////////////////////////////////////////////////////////////
//  Include Files
#include <stdio.h>

#include "ConvertVectorToMatrix.h"

///////////////////////////////////////////////////////////////
//  MAIN
int ConvertVectorToMatrix(char *in_data, float **out_data, int channels, int offset_ch, int length, int offset_pos, int nbits)
{
    int  val;
    char *ptr;
    int  i, j, i_max, j_max, inc;
    
    ptr = (char *)&val;
    i_max = channels - offset_ch;
    j_max = length + offset_pos;
    switch(nbits){
    case 16:
    	inc = 2 * offset_ch;
        for(j=offset_pos; j<j_max; j++){
            in_data+=inc;
            for(i=0; i<i_max; i++){
                val = 0;
                ptr[2] = *in_data++;
                ptr[3] = *in_data++;
                val = val >> 16;
                out_data[i][j] = (float)val;
            }
        }
    	break;
    case 24:
    	inc = 3 * offset_ch;
        for(j=offset_pos; j<j_max; j++){
            in_data+=inc;
            for(i=0; i<i_max; i++){
                val = 0;
                ptr[1] = *in_data++;
                ptr[2] = *in_data++;
                ptr[3] = *in_data++;
                val = val >> 8;
                out_data[i][j] = (float)val;
            }
        }
    	break;
    default:
        return -1;
    	break;
    }
    
    return 0;
}

/* EOF */

