35 #define RGBA(r,g,b,a) (((a) << 24) | ((r) << 16) | ((g) << 8) | (b))
96 const uint8_t *buf,
unsigned int buf_size)
99 int pixel_count, line_count;
101 rle_bitmap_end = buf + buf_size;
111 while (buf < rle_bitmap_end && line_count < sub->rects[0]->h) {
115 color = bytestream_get_byte(&buf);
119 flags = bytestream_get_byte(&buf);
122 run = (run << 8) + bytestream_get_byte(&buf);
123 color = flags & 0x80 ? bytestream_get_byte(&buf) : 0;
126 if (run > 0 && pixel_count + run <= sub->rects[0]->w * sub->
rects[0]->
h) {
127 memset(sub->
rects[0]->
pict.
data[0] + pixel_count, color, run);
134 if (pixel_count % sub->
rects[0]->
w > 0)
141 if (pixel_count < sub->rects[0]->w * sub->
rects[0]->
h) {
146 av_dlog(avctx,
"Pixel Count = %d, Area = %d\n", pixel_count, sub->
rects[0]->
w * sub->
rects[0]->
h);
163 const uint8_t *buf,
int buf_size)
178 sequence_desc = bytestream_get_byte(&buf);
180 if (!(sequence_desc & 0x80)) {
197 rle_bitmap_len = bytestream_get_be24(&buf) - 2*2;
199 if (buf_size > rle_bitmap_len) {
201 "Buffer dimension %d larger than the expected RLE data %d\n",
202 buf_size, rle_bitmap_len);
207 width = bytestream_get_be16(&buf);
208 height = bytestream_get_be16(&buf);
211 if (avctx->
width < width || avctx->
height < height) {
242 const uint8_t *buf,
int buf_size)
246 const uint8_t *buf_end = buf + buf_size;
249 int y, cb, cr, alpha;
250 int r,
g,
b, r_add, g_add, b_add;
255 while (buf < buf_end) {
256 color_id = bytestream_get_byte(&buf);
257 y = bytestream_get_byte(&buf);
258 cr = bytestream_get_byte(&buf);
259 cb = bytestream_get_byte(&buf);
260 alpha = bytestream_get_byte(&buf);
265 av_dlog(avctx,
"Color %d := (%d,%d,%d,%d)\n", color_id, r, g, b, alpha);
268 ctx->
clut[color_id] =
RGBA(r,g,b,alpha);
285 const uint8_t *buf,
int buf_size,
292 int w = bytestream_get_be16(&buf);
293 int h = bytestream_get_be16(&buf);
297 av_dlog(avctx,
"Video Dimensions %dx%d\n",
329 x = bytestream_get_be16(&buf);
330 y = bytestream_get_be16(&buf);
334 av_dlog(avctx,
"Subtitle Placement x=%d, y=%d\n", x, y);
337 av_log(avctx,
AV_LOG_ERROR,
"Subtitle out of video bounds. x = %d, y = %d, video width = %d, video height = %d.\n",
365 const uint8_t *buf,
int buf_size)
376 memset(sub, 0,
sizeof(*sub));
423 int buf_size = avpkt->
size;
430 av_dlog(avctx,
"PGS sub packet:\n");
432 for (i = 0; i < buf_size; i++) {
433 av_dlog(avctx,
"%02x ", buf[i]);
447 buf_end = buf + buf_size;
450 while (buf < buf_end) {
451 segment_type = bytestream_get_byte(&buf);
452 segment_length = bytestream_get_be16(&buf);
454 av_dlog(avctx,
"Segment Length %d, Segment Type %x\n", segment_length, segment_type);
459 switch (segment_type) {
486 segment_type, segment_length);
490 buf += segment_length;