Video codec: added R12L->RGB conversion

This commit is contained in:
Martin Pulec
2019-06-04 15:28:15 +02:00
parent 5deed4760d
commit 8660bda2ca
2 changed files with 84 additions and 0 deletions

View File

@@ -838,6 +838,88 @@ vc_copyliner10k(unsigned char *dst, const unsigned char *src, int len, int rshif
}
}
/**
* @brief Converts from R12L to RGB
*
* @param[out] dst 4B-aligned buffer that will contain result
* @param[in] src buffer containing pixels in R12L
* @param[in] dst_len length of data that should be writen to dst buffer (in bytes)
* @param[in] rshift ignored
* @param[in] gshift ignored
* @param[in] bshift ignored
*/
void
vc_copylineR12LtoRGB(unsigned char *dst, const unsigned char *src, int dstlen, int rshift,
int gshift, int bshift)
{
UNUSED(rshift);
UNUSED(gshift);
UNUSED(bshift);
while (dstlen >= 32) {
uint8_t tmp;
tmp = src[BYTE_SWAP(0)] >> 4;
tmp |= src[BYTE_SWAP(1)] << 4;
*dst++ = tmp; // r0
*dst++ = src[BYTE_SWAP(2)]; // g0
tmp = src[BYTE_SWAP(3)]>> 4;
src += 4;
tmp |= src[BYTE_SWAP(0)] << 4;
*dst++ = tmp; // b0
*dst++ = src[BYTE_SWAP(1)]; // r1
tmp = src[BYTE_SWAP(2)] >> 4;
tmp |= src[BYTE_SWAP(3)] << 4;
src += 4;
*dst++ = tmp; // g1
*dst++ = src[BYTE_SWAP(0)]; // b1
tmp = src[BYTE_SWAP(1)] >> 4;
tmp |= src[BYTE_SWAP(2)] << 4;
*dst++ = tmp; // r2
*dst++ = src[BYTE_SWAP(3)]; // g2
src += 4;
tmp = src[BYTE_SWAP(0)] >> 4;
tmp |= src[BYTE_SWAP(1)] << 4;
*dst++ = tmp; // b2
*dst++ = src[BYTE_SWAP(2)]; // r3
tmp = src[BYTE_SWAP(3)] >> 4;
src += 4;
tmp |= src[BYTE_SWAP(0)] << 4;
*dst++ = tmp; // g3
*dst++ = src[BYTE_SWAP(1)]; // b3
tmp = src[BYTE_SWAP(2)] >> 4;
tmp |= src[BYTE_SWAP(3)] << 4;
src += 4;
*dst++ = tmp; // r4
*dst++ = src[BYTE_SWAP(0)]; // g4
tmp = src[BYTE_SWAP(1)] >> 4;
tmp |= src[BYTE_SWAP(2)] << 4;
*dst++ = tmp; // b4
*dst++ = src[BYTE_SWAP(3)]; // r5
src += 4;
tmp = src[BYTE_SWAP(0)] >> 4;
tmp |= src[BYTE_SWAP(1)] << 4;
*dst++ = tmp; // g5
*dst++ = src[BYTE_SWAP(2)]; // b5
tmp = src[BYTE_SWAP(3)] >> 4;
src += 4;
tmp |= src[BYTE_SWAP(0)] << 4;
*dst++ = tmp; // r6
*dst++ = src[BYTE_SWAP(1)]; // g6
tmp = src[BYTE_SWAP(2)] >> 4;
tmp |= src[BYTE_SWAP(3)] << 4;
src += 4;
*dst++ = tmp; // b6
*dst++ = src[BYTE_SWAP(0)]; // r7
tmp = src[BYTE_SWAP(1)] >> 4;
tmp |= src[BYTE_SWAP(2)] << 4;
*dst++ = tmp; // g7
*dst++ = src[BYTE_SWAP(3)]; // b7
src += 4;
dstlen -= 24;
}
}
/**
* @brief Converts from R12L to RGBA
*
@@ -2161,6 +2243,7 @@ static const struct decoder_item decoders[] = {
{ (decoder_t) vc_copylineYUYV, YUYV, UYVY, false },
{ (decoder_t) vc_copyliner10k, R10k, RGBA, false },
{ (decoder_t) vc_copylineR12L, R12L, RGBA, false },
{ (decoder_t) vc_copylineR12LtoRGB, R12L, RGB, false },
{ vc_copylineRGBA, RGBA, RGBA, false },
{ (decoder_t) vc_copylineDVS10toV210, DVS10, v210, false },
{ (decoder_t) vc_copylineRGBAtoRGB, RGBA, RGB, false },

View File

@@ -118,6 +118,7 @@ decoder_func_t vc_copylineRGBtoUYVY_SSE;
decoder_func_t vc_copylineRGBtoGrayscale_SSE;
decoder_func_t vc_copylineRGBtoR12L;
decoder_func_t vc_copylineR12LtoRG48;
decoder_func_t vc_copylineR12LtoRGB;
decoder_func_t vc_copylineRG48toR12L;
decoder_func_t vc_copylineRG48toRGBA;
decoder_func_t vc_copylineUYVYtoRGB;