Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
#include <windows.h>
#include <string.h>
#include <stdio.h>
#include "fv_x8.h" // for DLL entry points
#include "variable.h"
# define SAMPLING_FREQUENCY F_ECH
# define DLL_MAJOR 1
# define DLL_MINOR 0
# define PCM_BUFFER_SIZE_4800_8000 2*NBSPF_4800_8000
# define PCM_BUFFER_SIZE_12000_16000 2*NBSPF_12000_16000
# define CODED_BUFFER_SIZE_4800 MAX_OUTPUT_BYTES_4800
# define CODED_BUFFER_SIZE_8000_12000 MAX_OUTPUT_BYTES_8000_12000
# define CODED_BUFFER_SIZE_16000 MAX_OUTPUT_BYTES_16000
# define PCM_BITS_PER_SAMPLE 16
# define CODEC_SUB_TAG_4800 800
# define CODEC_SUB_TAG_8000 801
# define CODEC_SUB_TAG_12000 802
# define CODEC_SUB_TAG_16000 803
# define CODEC_SUB_TAG_NAME_4800 "L&H SBCELP Codec 4.8 kbps"
# define CODEC_SUB_TAG_NAME_8000 "L&H SBC var.bitrate, 8 kbps 8 kHz" // !!! lenght<40
# define CODEC_SUB_TAG_NAME_12000 "L&H SBC var.bitrate, 12 kbps 8 kHz" // !!! lenght<40
# define CODEC_SUB_TAG_NAME_16000 "L&H SBC var.bitrate, 16 kbps 8 kHz" // !!! lenght<40
# define MakeVersion(a,b) ((DWORD)a<<16)|(DWORD)b
# define LONG_CODEC_SUB_TAG_NAME_4800 "L&H SBCELP Codec, 4.8 kbps 8 kHz"
# define LONG_CODEC_SUB_TAG_NAME_8000 "L&H SBC var.bitrate, 8 kbps 8 kHz"
# define LONG_CODEC_SUB_TAG_NAME_12000 "L&H SBC var.bitrate, 12 kbps 8 kHz"
# define LONG_CODEC_SUB_TAG_NAME_16000 "L&H SBC var.bitrate, 16 kbps 8 kHz"
# define IS_VAR_BIT_RATE_4800 0
# define IS_VAR_BIT_RATE_8000_12000_16000 1
# define MIN_CODED_BUFFER_SIZE_4800 12
# define MIN_CODED_BUFFER_SIZE_8000_12000_16000 1
# define MEAN_BIT_RATE_4800 4800
# define MEAN_BIT_RATE_8000 8000
# define MEAN_BIT_RATE_12000 12000
# define MEAN_BIT_RATE_16000 16000
# define IS_RT_CODING_4800 FALSE
# define IS_RT_CODING_8000_12000_16000 TRUE
# define IS_RT_DECODING TRUE
# define IS_FLOATING_POINT FALSE
# define INPUT_PCM_ONLY 0x0001
# define EXTRA_CODEC_INFO_SIZE 0
LH_PREFIX LH_ERRCODE LH_SUFFIX MSLHSB_GetCodecInfo(LPCODECINFO CodecInfo, DWORD dwMaxBitRate) // Returns the input and output buffer sizes.
{
if ((!CodecInfo) || ((dwMaxBitRate != 4800) && (dwMaxBitRate != 8000) && (dwMaxBitRate != 12000) && (dwMaxBitRate != 16000))) return LH_EBADARG;
CodecInfo->wBitsPerSamplePCM=PCM_BITS_PER_SAMPLE; CodecInfo->dwSampleRate=SAMPLING_FREQUENCY; CodecInfo->dwDLLVersion=MakeVersion(DLL_MAJOR,DLL_MINOR);
switch (dwMaxBitRate) { case 4800: CodecInfo->wPCMBufferSize=PCM_BUFFER_SIZE_4800_8000; CodecInfo->wCodedBufferSize=CODED_BUFFER_SIZE_4800; CodecInfo->wFormatSubTag=CODEC_SUB_TAG_4800; strcpy(CodecInfo->wFormatSubTagName,CODEC_SUB_TAG_NAME_4800); break; case 8000: CodecInfo->wPCMBufferSize=PCM_BUFFER_SIZE_4800_8000; CodecInfo->wCodedBufferSize=CODED_BUFFER_SIZE_8000_12000; CodecInfo->wFormatSubTag=CODEC_SUB_TAG_8000; strcpy(CodecInfo->wFormatSubTagName,CODEC_SUB_TAG_NAME_8000); break; case 12000: CodecInfo->wPCMBufferSize=PCM_BUFFER_SIZE_12000_16000; CodecInfo->wCodedBufferSize=CODED_BUFFER_SIZE_8000_12000; CodecInfo->wFormatSubTag=CODEC_SUB_TAG_12000; strcpy(CodecInfo->wFormatSubTagName,CODEC_SUB_TAG_NAME_12000); break; case 16000: CodecInfo->wPCMBufferSize=PCM_BUFFER_SIZE_12000_16000; CodecInfo->wCodedBufferSize=CODED_BUFFER_SIZE_16000; CodecInfo->wFormatSubTag=CODEC_SUB_TAG_16000; strcpy(CodecInfo->wFormatSubTagName,CODEC_SUB_TAG_NAME_16000); break; }
return LH_SUCCESS; }
// PhilF: We don't call this guy from the wrapper, so no need to implement it
#if 0
LH_PREFIX LH_ERRCODE LH_SUFFIX MSLHSB_GetCodecInfoEx(LPCODECINFOEX CodecInfo,DWORD cbSize, DWORD dwMaxBitRate) {
if ((!CodecInfo) || (cbSize!=(DWORD)sizeof(CODECINFOEX)) || ((dwMaxBitRate != 8000) && (dwMaxBitRate != 12000) && (dwMaxBitRate != 16000))) return LH_EBADARG;
if (cbSize==(DWORD)sizeof(CODECINFOEX)) { // Information on implemented codec
switch (dwMaxBitRate) { case 8000: CodecInfo->wInputBufferSize=PCM_BUFFER_SIZE_8000; CodecInfo->wCodedBufferSize=CODED_BUFFER_SIZE_8000_12000; CodecInfo->wFormatSubTag=CODEC_SUB_TAG_8000; strcpy(CodecInfo->szFormatSubTagName,LONG_CODEC_SUB_TAG_NAME_8000); CodecInfo->nAvgBytesPerSec=MEAN_BIT_RATE_8000/8; break; case 12000: CodecInfo->wInputBufferSize=PCM_BUFFER_SIZE_12000_16000; CodecInfo->wCodedBufferSize=CODED_BUFFER_SIZE_8000_12000; CodecInfo->wFormatSubTag=CODEC_SUB_TAG_12000; strcpy(CodecInfo->szFormatSubTagName,LONG_CODEC_SUB_TAG_NAME_12000); CodecInfo->nAvgBytesPerSec=MEAN_BIT_RATE_12000/8; break; case 16000: CodecInfo->wInputBufferSize=PCM_BUFFER_SIZE_12000_16000; CodecInfo->wCodedBufferSize=CODED_BUFFER_SIZE_16000; CodecInfo->wFormatSubTag=CODEC_SUB_TAG_16000; strcpy(CodecInfo->szFormatSubTagName,LONG_CODEC_SUB_TAG_NAME_16000); CodecInfo->nAvgBytesPerSec=MEAN_BIT_RATE_16000/8; break; } CodecInfo->bIsVariableBitRate=IS_VAR_BIT_RATE; CodecInfo->bIsRealTimeEncoding=IS_RT_CODING; CodecInfo->bIsRealTimeDecoding=IS_RT_DECODING; CodecInfo->bIsFloatingPoint=IS_FLOATING_POINT; // Information on supported input format
CodecInfo->wInputDataFormat=INPUT_PCM_ONLY; CodecInfo->dwInputSampleRate=SAMPLING_FREQUENCY; CodecInfo->wInputBitsPerSample=PCM_BITS_PER_SAMPLE; // Information on buffer sizes
CodecInfo->wMinimumCodedBufferSize=MIN_CODED_BUFFER_SIZE; CodecInfo->dwDLLVersion=MakeVersion(DLL_MAJOR,DLL_MINOR); CodecInfo->cbSize=EXTRA_CODEC_INFO_SIZE; } } #endif
|