This source file includes following definitions.
- ff_get_qtpalette
#include <stdio.h>
#include <stdint.h>
#include "avformat.h"
#include "libavutil/intreadwrite.h"
#include "qtpalette.h"
int ff_get_qtpalette(int codec_id, AVIOContext *pb, uint32_t *palette)
{
int tmp, bit_depth, color_table_id, greyscale, i;
avio_seek(pb, 82, SEEK_CUR);
tmp = avio_rb16(pb);
bit_depth = tmp & 0x1F;
greyscale = tmp & 0x20;
color_table_id = avio_rb16(pb);
if (greyscale && codec_id == AV_CODEC_ID_CINEPAK)
return 0;
if ((bit_depth == 1 || bit_depth == 2 || bit_depth == 4 || bit_depth == 8)) {
uint32_t color_count, color_start, color_end;
uint32_t r, g, b;
if (greyscale && bit_depth > 1 && color_table_id) {
int color_index, color_dec;
color_count = 1 << bit_depth;
color_index = 255;
color_dec = 256 / (color_count - 1);
for (i = 0; i < color_count; i++) {
r = g = b = color_index;
palette[i] = (0xFFU << 24) | (r << 16) | (g << 8) | (b);
color_index -= color_dec;
if (color_index < 0)
color_index = 0;
}
} else if (color_table_id) {
const uint8_t *color_table;
color_count = 1 << bit_depth;
if (bit_depth == 1)
color_table = ff_qt_default_palette_2;
else if (bit_depth == 2)
color_table = ff_qt_default_palette_4;
else if (bit_depth == 4)
color_table = ff_qt_default_palette_16;
else
color_table = ff_qt_default_palette_256;
for (i = 0; i < color_count; i++) {
r = color_table[i * 3 + 0];
g = color_table[i * 3 + 1];
b = color_table[i * 3 + 2];
palette[i] = (0xFFU << 24) | (r << 16) | (g << 8) | (b);
}
} else {
color_start = avio_rb32(pb);
avio_rb16(pb);
color_end = avio_rb16(pb);
if ((color_start <= 255) && (color_end <= 255)) {
for (i = color_start; i <= color_end; i++) {
avio_skip(pb, 2);
r = avio_r8(pb);
avio_r8(pb);
g = avio_r8(pb);
avio_r8(pb);
b = avio_r8(pb);
avio_r8(pb);
palette[i] = (0xFFU << 24) | (r << 16) | (g << 8) | (b);
}
}
}
return 1;
}
return 0;
}