Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
0
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;
}
Ejemplo n.º 3
0
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;
}