c-AVSubtitleRect DVBSub格式说明



我正在尝试将AVSubtitle中的DVBSub数据转换为RGB格式,但似乎不起作用。我只是随便弄点颜色。

这是代码:

/* rects comes from AVSubtitleRect type elsewhere*/
int bw = rects[0].w;
int bh = rects[0].h;
uint32_t colour;
uint32_t *bitmap;
int r, g, b;
/* Give it some memory */
bitmap = malloc(bw * bh * sizeof(uint32_t));
for (int y = 0; y < bh; y++) 
{
for (int x = 0; x < bw; x++) 
{
/* data[0] holds index data */
const uint8_t index = rects[0]->data[0][y * bw + x]; 
/* data[1] holds colours - get colour from index */
colour = rects[0]->data[1][4 * index];
r = (colour >> 16) & 0xFF;
g = (colour >>  8) & 0xFF;
b = (colour >>  0) & 0xFF;
/* construct bitmap pixel by pixel (24 bit RGB) */
bitmap[y * bw + x] = r << 16 | g << 8 | b;
}
}

这里有一些信息从文件中的AVSubtitle转储字幕,但我不确定我是否正确理解。

我确信我得到的数据是正确的,基于文本的字幕看起来很好。不太确定我在这里做错了什么。

DVBSub矩形使用索引彩色位图。每使用一个像素2、16或256种颜色。话虽如此,这些矩形几乎总是使用16(4位(索引的颜色格式。然而,单个像素占用整个8位(4位+4位零(
CLUT(颜色查找表(使用完整的32位ARGB格式(是的,Alpha通道用于透明度(。因此,对于16色格式,CLUT大小为64字节(16*4(。

希望这些能有所帮助。

相关内容

  • 没有找到相关文章

最新更新