HRESULT convert_to_int24(enum AVSampleFormat avsf, WORD nChannels, DWORD nSamples, BYTE* pIn, BYTE* pOut) { size_t allsamples = nSamples * nChannels; switch (avsf) { case AV_SAMPLE_FMT_U8: for (size_t i = 0; i < allsamples; ++i) { *pOut++ = 0; *pOut++ = 0; *pOut++ = *(pIn) ^ 0x80; pIn += sizeof(uint8_t); } break; case AV_SAMPLE_FMT_S16: for (size_t i = 0; i < allsamples; ++i) { *pOut++ = 0; *pOut++ = *(pIn); *pOut++ = *(pIn + 1); pIn += sizeof(int16_t); } break; case AV_SAMPLE_FMT_S32: for (size_t i = 0; i < allsamples; ++i) { *pOut++ = *(pIn + 1); *pOut++ = *(pIn + 2); *pOut++ = *(pIn + 3); pIn += sizeof(int32_t); } break; case AV_SAMPLE_FMT_FLT: for (size_t i = 0; i < allsamples; ++i) { double d = (double)(*(float*)pIn); limit(-1, d, D32MAX); uint32_t u32 = (uint32_t)(int32_t)round_d(d * INT32_PEAK); *pOut++ = (BYTE)(u32 >> 8); *pOut++ = (BYTE)(u32 >> 16); *pOut++ = (BYTE)(u32 >> 24); pIn += sizeof(float); } break; case AV_SAMPLE_FMT_DBL: for (size_t i = 0; i < allsamples; ++i) { double d = *(double*)pIn; limit(-1, d, D32MAX); uint32_t u32 = (uint32_t)(int32_t)round_d(d * INT32_PEAK); *pOut++ = (BYTE)(u32 >> 8); *pOut++ = (BYTE)(u32 >> 16); *pOut++ = (BYTE)(u32 >> 24); pIn += sizeof(double); } break; // planar case AV_SAMPLE_FMT_U8P: for (size_t i = 0; i < nSamples; ++i) { for (int ch = 0; ch < nChannels; ++ch) { *pOut++ = 0; *pOut++ = 0; *pOut++ = pIn[nSamples * ch + i] ^ 0x80; } } break; case AV_SAMPLE_FMT_S16P: for (size_t i = 0; i < nSamples; ++i) { for (int ch = 0; ch < nChannels; ++ch) { *pOut++ = 0; *pOut++ = pIn[nSamples * ch + i]; *pOut++ = pIn[nSamples * ch + i + 1]; } } break; case AV_SAMPLE_FMT_S32P: for (size_t i = 0; i < nSamples; ++i) { for (int ch = 0; ch < nChannels; ++ch) { *pOut++ = pIn[nSamples * ch + i + 1]; *pOut++ = pIn[nSamples * ch + i + 2]; *pOut++ = pIn[nSamples * ch + i + 3]; } } break; case AV_SAMPLE_FMT_FLTP: for (size_t i = 0; i < nSamples; ++i) { for (int ch = 0; ch < nChannels; ++ch) { double d = (double)((float*)pIn)[nSamples * ch + i]; limit(-1, d, D32MAX); uint32_t u32 = (uint32_t)(int32_t)round_d(d * INT32_PEAK); *pOut++ = (BYTE)(u32 >> 8); *pOut++ = (BYTE)(u32 >> 16); *pOut++ = (BYTE)(u32 >> 24); } } break; case AV_SAMPLE_FMT_DBLP: for (size_t i = 0; i < nSamples; ++i) { for (int ch = 0; ch < nChannels; ++ch) { double d = ((double*)pIn)[nSamples * ch + i]; limit(-1, d, D32MAX); uint32_t u32 = (uint32_t)(int32_t)round_d(d * INT32_PEAK); *pOut++ = (BYTE)(u32 >> 8); *pOut++ = (BYTE)(u32 >> 16); *pOut++ = (BYTE)(u32 >> 24); } } break; default: return E_INVALIDARG; } return S_OK; }
HRESULT convert_to_int32(enum AVSampleFormat avsf, WORD nChannels, DWORD nSamples, BYTE* pIn, int32_t* pOut) { size_t allsamples = nSamples * nChannels; switch (avsf) { case AV_SAMPLE_FMT_U8: for (size_t i = 0; i < allsamples; ++i) { *pOut++ = (int32_t)(*(int8_t*)pIn ^ 0x80) << 24; pIn += sizeof(uint8_t); } break; case AV_SAMPLE_FMT_S16: for (size_t i = 0; i < allsamples; ++i) { *pOut++ = (int32_t)(*(int16_t*)pIn) << 16; pIn += sizeof(int16_t); } break; case AV_SAMPLE_FMT_S32: memcpy(pOut, pIn, nSamples * nChannels * sizeof(int32_t)); break; case AV_SAMPLE_FMT_FLT: for (size_t i = 0; i < allsamples; ++i) { double d = (double)(*(float*)pIn); limit(-1, d, D32MAX); *pOut++ = (int32_t)round_d(d * INT32_PEAK); pIn += sizeof(float); } break; case AV_SAMPLE_FMT_DBL: for (size_t i = 0; i < allsamples; ++i) { double d = *(double*)pIn; limit(-1, d, D32MAX); *pOut++ = (int32_t)round_d(d * INT32_PEAK); pIn += sizeof(double); } break; // planar case AV_SAMPLE_FMT_U8P: for (size_t i = 0; i < nSamples; ++i) { for (int ch = 0; ch < nChannels; ++ch) { int8_t b = ((int8_t*)pIn)[nSamples * ch + i]; *pOut++ = (int32_t)(b ^ 0x80) << 24; } } break; case AV_SAMPLE_FMT_S16P: for (size_t i = 0; i < nSamples; ++i) { for (int ch = 0; ch < nChannels; ++ch) { *pOut++ = (int32_t)((int16_t*)pIn)[nSamples * ch + i] << 16; } } break; case AV_SAMPLE_FMT_S32P: for (size_t i = 0; i < nSamples; ++i) { for (int ch = 0; ch < nChannels; ++ch) { *pOut++ = ((int32_t*)pIn)[nSamples * ch + i]; } } break; case AV_SAMPLE_FMT_FLTP: for (size_t i = 0; i < nSamples; ++i) { for (int ch = 0; ch < nChannels; ++ch) { double d = (double)((float*)pIn)[nSamples * ch + i]; limit(-1, d, D32MAX); *pOut++ = (int32_t)round_d(d * INT32_PEAK); } } break; case AV_SAMPLE_FMT_DBLP: for (size_t i = 0; i < nSamples; ++i) { for (int ch = 0; ch < nChannels; ++ch) { double d = ((double*)pIn)[nSamples * ch + i]; limit(-1, d, D32MAX); *pOut++ = (int32_t)round_d(d * INT32_PEAK); } } break; default: return E_INVALIDARG; } return S_OK; }
bool litehtml::media_query_expression::check( const media_features& features ) const { switch(feature) { case media_feature_width: if(check_as_bool) { return (features.width != 0); } else if(features.width == val) { return true; } break; case media_feature_min_width: if(features.width >= val) { return true; } break; case media_feature_max_width: if(features.width <= val) { return true; } break; case media_feature_height: if(check_as_bool) { return (features.height != 0); } else if(features.height == val) { return true; } break; case media_feature_min_height: if(features.height >= val) { return true; } break; case media_feature_max_height: if(features.height <= val) { return true; } break; case media_feature_device_width: if(check_as_bool) { return (features.device_width != 0); } else if(features.device_width == val) { return true; } break; case media_feature_min_device_width: if(features.device_width >= val) { return true; } break; case media_feature_max_device_width: if(features.device_width <= val) { return true; } break; case media_feature_device_height: if(check_as_bool) { return (features.device_height != 0); } else if(features.device_height == val) { return true; } break; case media_feature_min_device_height: if(features.device_height <= val) { return true; } break; case media_feature_max_device_height: if(features.device_height <= val) { return true; } break; case media_feature_orientation: if(features.height >= features.width) { if(val == media_orientation_portrait) { return true; } } else { if(val == media_orientation_landscape) { return true; } } break; case media_feature_aspect_ratio: if(features.height && val2) { int ratio_this = round_d( (double) val / (double) val2 * 100 ); int ratio_feat = round_d( (double) features.width / (double) features.height * 100.0 ); if(ratio_this == ratio_feat) { return true; } } break; case media_feature_min_aspect_ratio: if(features.height && val2) { int ratio_this = round_d( (double) val / (double) val2 * 100 ); int ratio_feat = round_d( (double) features.width / (double) features.height * 100.0 ); if(ratio_feat >= ratio_this) { return true; } } break; case media_feature_max_aspect_ratio: if(features.height && val2) { int ratio_this = round_d( (double) val / (double) val2 * 100 ); int ratio_feat = round_d( (double) features.width / (double) features.height * 100.0 ); if(ratio_feat <= ratio_this) { return true; } } break; case media_feature_device_aspect_ratio: if(features.device_height && val2) { int ratio_this = round_d( (double) val / (double) val2 * 100 ); int ratio_feat = round_d( (double) features.device_width / (double) features.device_height * 100.0 ); if(ratio_feat == ratio_this) { return true; } } break; case media_feature_min_device_aspect_ratio: if(features.device_height && val2) { int ratio_this = round_d( (double) val / (double) val2 * 100 ); int ratio_feat = round_d( (double) features.device_width / (double) features.device_height * 100.0 ); if(ratio_feat >= ratio_this) { return true; } } break; case media_feature_max_device_aspect_ratio: if(features.device_height && val2) { int ratio_this = round_d( (double) val / (double) val2 * 100 ); int ratio_feat = round_d( (double) features.device_width / (double) features.device_height * 100.0 ); if(ratio_feat <= ratio_this) { return true; } } break; case media_feature_color: if(check_as_bool) { return (features.color != 0); } else if(features.color == val) { return true; } break; case media_feature_min_color: if(features.color >= val) { return true; } break; case media_feature_max_color: if(features.color <= val) { return true; } break; case media_feature_color_index: if(check_as_bool) { return (features.color_index != 0); } else if(features.color_index == val) { return true; } break; case media_feature_min_color_index: if(features.color_index >= val) { return true; } break; case media_feature_max_color_index: if(features.color_index <= val) { return true; } break; case media_feature_monochrome: if(check_as_bool) { return (features.monochrome != 0); } else if(features.monochrome == val) { return true; } break; case media_feature_min_monochrome: if(features.monochrome >= val) { return true; } break; case media_feature_max_monochrome: if(features.monochrome <= val) { return true; } break; case media_feature_resolution: if(features.resolution == val) { return true; } break; case media_feature_min_resolution: if(features.resolution >= val) { return true; } break; case media_feature_max_resolution: if(features.resolution <= val) { return true; } break; default: return false; } return false; }