gpt4 book ai didi

c - AVSubtitleRect DVBSub格式解释

转载 作者:行者123 更新时间:2023-12-04 22:58:37 25 4
gpt4 key购买 nike

我正在尝试将 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;
}
}

这里有一些信息 Dump subtitle from AVSubtitle in the file但我不确定我是否正确理解它。

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

最佳答案

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

希望这些有所帮助。

关于c - AVSubtitleRect DVBSub格式解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60551861/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com