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;
200 width = bytestream_get_be16(&buf);
201 height = bytestream_get_be16(&buf);
204 if (avctx->
width < width || avctx->
height < height) {
235 const uint8_t *buf,
int buf_size)
239 const uint8_t *buf_end = buf + buf_size;
242 int y, cb, cr, alpha;
243 int r,
g,
b, r_add, g_add, b_add;
248 while (buf < buf_end) {
249 color_id = bytestream_get_byte(&buf);
250 y = bytestream_get_byte(&buf);
251 cr = bytestream_get_byte(&buf);
252 cb = bytestream_get_byte(&buf);
253 alpha = bytestream_get_byte(&buf);
258 av_dlog(avctx,
"Color %d := (%d,%d,%d,%d)\n", color_id, r, g, b, alpha);
261 ctx->
clut[color_id] =
RGBA(r,g,b,alpha);
278 const uint8_t *buf,
int buf_size,
285 int w = bytestream_get_be16(&buf);
286 int h = bytestream_get_be16(&buf);
290 av_dlog(avctx,
"Video Dimensions %dx%d\n",
322 x = bytestream_get_be16(&buf);
323 y = bytestream_get_be16(&buf);
327 av_dlog(avctx,
"Subtitle Placement x=%d, y=%d\n", x, y);
330 av_log(avctx,
AV_LOG_ERROR,
"Subtitle out of video bounds. x = %d, y = %d, video width = %d, video height = %d.\n",
358 const uint8_t *buf,
int buf_size)
369 memset(sub, 0,
sizeof(*sub));
416 int buf_size = avpkt->
size;
423 av_dlog(avctx,
"PGS sub packet:\n");
425 for (i = 0; i < buf_size; i++) {
426 av_dlog(avctx,
"%02x ", buf[i]);
440 buf_end = buf + buf_size;
443 while (buf < buf_end) {
444 segment_type = bytestream_get_byte(&buf);
445 segment_length = bytestream_get_be16(&buf);
447 av_dlog(avctx,
"Segment Length %d, Segment Type %x\n", segment_length, segment_type);
452 switch (segment_type) {
479 segment_type, segment_length);
483 buf += segment_length;