54 #define VMD_HEADER_SIZE 0x330 
   55 #define PALETTE_COUNT 256 
   66     const unsigned char *
buf;
 
   76 #define QUEUE_SIZE 0x1000 
   77 #define QUEUE_MASK 0x0FFF 
   80                       unsigned char *dest, 
int dest_len)
 
   86     unsigned int dataleft;
 
   87     unsigned int chainofs;
 
   88     unsigned int chainlen;
 
   97     dataleft = bytestream2_get_le32(&gb);
 
  101     if (bytestream2_peek_le32(&gb) == 0x56781234) {
 
  111         tag = bytestream2_get_byteu(&gb);
 
  112         if ((tag == 0xFF) && (dataleft > 8)) {
 
  115             for (i = 0; i < 8; i++) {
 
  116                 queue[qpos++] = *d++ = bytestream2_get_byteu(&gb);
 
  121             for (i = 0; i < 8; i++) {
 
  127                     queue[qpos++] = *d++ = bytestream2_get_byteu(&gb);
 
  131                     chainofs = bytestream2_get_byte(&gb);
 
  132                     chainofs |= ((bytestream2_peek_byte(&gb) & 0xF0) << 4);
 
  133                     chainlen = (bytestream2_get_byte(&gb) & 0x0F) + 3;
 
  134                     if (chainlen == speclen) {
 
  135                         chainlen = bytestream2_get_byte(&gb) + 0xF + 3;
 
  137                     if (d_end - d < chainlen)
 
  139                     for (j = 0; j < chainlen; j++) {
 
  141                         queue[qpos++] = *d++;
 
  144                     dataleft -= chainlen;
 
  152                       int src_count, 
int src_size, 
int dest_len)
 
  156     unsigned char *dest_end = dest + dest_len;
 
  165         *pd++ = bytestream2_get_byteu(&gb);
 
  172         l = bytestream2_get_byteu(&gb);
 
  183             for (i = 0; i < l; i++) {
 
  190     } 
while (used < src_count);
 
  198     unsigned int *palette32;
 
  199     unsigned char r, 
g, 
b;
 
  209     int frame_x, frame_y;
 
  210     int frame_width, frame_height;
 
  214     frame_width = 
AV_RL16(&s->
buf[10]) - frame_x + 1;
 
  215     frame_height = 
AV_RL16(&s->
buf[12]) - frame_y + 1;
 
  218         (frame_x || frame_y)) {
 
  226     if (frame_x < 0 || frame_width < 0 ||
 
  231                "Invalid horizontal range %d-%d\n",
 
  232                frame_x, frame_width);
 
  235     if (frame_y < 0 || frame_height < 0 ||
 
  240                "Invalid vertical range %d-%d\n",
 
  241                frame_x, frame_width);
 
  248         (frame_x || frame_y || (frame_width != s->
avctx->
width) ||
 
  257     if (s->
buf[15] & 0x02) {
 
  259         palette32 = (
unsigned int *)s->
palette;
 
  262                 r = bytestream2_get_byteu(&gb) * 4;
 
  263                 g = bytestream2_get_byteu(&gb) * 4;
 
  264                 b = bytestream2_get_byteu(&gb) * 4;
 
  265                 palette32[i] = 0xFF
U << 24 | (r << 16) | (g << 8) | (
b);
 
  266                 palette32[i] |= palette32[i] >> 6 & 0x30303;
 
  280     meth = bytestream2_get_byteu(&gb);
 
  284                    "Trying to unpack LZ-compressed frame with no LZ buffer\n");
 
  293     dp = &frame->
data[0][frame_y * frame->
linesize[0] + frame_x];
 
  297         for (i = 0; i < frame_height; i++) {
 
  300                 len = bytestream2_get_byte(&gb);
 
  302                     len = (len & 0x7F) + 1;
 
  303                     if (ofs + len > frame_width ||
 
  312                     memcpy(&dp[ofs], &pp[ofs], len + 1);
 
  315             } 
while (ofs < frame_width);
 
  316             if (ofs > frame_width) {
 
  318                        "offset > width (%d > %d)\n",
 
  328         for (i = 0; i < frame_height; i++) {
 
  336         for (i = 0; i < frame_height; i++) {
 
  339                 len = bytestream2_get_byte(&gb);
 
  341                     len = (len & 0x7F) + 1;
 
  342                     if (bytestream2_peek_byte(&gb) == 0xFF) {
 
  344                         bytestream2_get_byte(&gb);
 
  358                     memcpy(&dp[ofs], &pp[ofs], len + 1);
 
  361             } 
while (ofs < frame_width);
 
  362             if (ofs > frame_width) {
 
  364                        "offset > width (%d > %d)\n",
 
  390     unsigned int *palette32;
 
  391     int palette_index = 0;
 
  392     unsigned char r, 
g, 
b;
 
  393     unsigned char *vmd_header;
 
  394     unsigned char *raw_palette;
 
  405     vmd_header = (
unsigned char *)avctx->
extradata;
 
  415     raw_palette = &vmd_header[28];
 
  416     palette32 = (
unsigned int *)s->
palette;
 
  418         r = raw_palette[palette_index++] * 4;
 
  419         g = raw_palette[palette_index++] * 4;
 
  420         b = raw_palette[palette_index++] * 4;
 
  421         palette32[i] = 0xFF
U << 24 | (r << 16) | (g << 8) | (
b);
 
  422         palette32[i] |= palette32[i] >> 6 & 0x30303;
 
  435                                  void *
data, 
int *got_frame,
 
  439     int buf_size = avpkt->
size;
 
  474 #define BLOCK_TYPE_AUDIO    1 
  475 #define BLOCK_TYPE_INITIAL  2 
  476 #define BLOCK_TYPE_SILENCE  3 
  484     0x000, 0x008, 0x010, 0x020, 0x030, 0x040, 0x050, 0x060, 0x070, 0x080,
 
  485     0x090, 0x0A0, 0x0B0, 0x0C0, 0x0D0, 0x0E0, 0x0F0, 0x100, 0x110, 0x120,
 
  486     0x130, 0x140, 0x150, 0x160, 0x170, 0x180, 0x190, 0x1A0, 0x1B0, 0x1C0,
 
  487     0x1D0, 0x1E0, 0x1F0, 0x200, 0x208, 0x210, 0x218, 0x220, 0x228, 0x230,
 
  488     0x238, 0x240, 0x248, 0x250, 0x258, 0x260, 0x268, 0x270, 0x278, 0x280,
 
  489     0x288, 0x290, 0x298, 0x2A0, 0x2A8, 0x2B0, 0x2B8, 0x2C0, 0x2C8, 0x2D0,
 
  490     0x2D8, 0x2E0, 0x2E8, 0x2F0, 0x2F8, 0x300, 0x308, 0x310, 0x318, 0x320,
 
  491     0x328, 0x330, 0x338, 0x340, 0x348, 0x350, 0x358, 0x360, 0x368, 0x370,
 
  492     0x378, 0x380, 0x388, 0x390, 0x398, 0x3A0, 0x3A8, 0x3B0, 0x3B8, 0x3C0,
 
  493     0x3C8, 0x3D0, 0x3D8, 0x3E0, 0x3E8, 0x3F0, 0x3F8, 0x400, 0x440, 0x480,
 
  494     0x4C0, 0x500, 0x540, 0x580, 0x5C0, 0x600, 0x640, 0x680, 0x6C0, 0x700,
 
  495     0x740, 0x780, 0x7C0, 0x800, 0x900, 0xA00, 0xB00, 0xC00, 0xD00, 0xE00,
 
  496     0xF00, 0x1000, 0x1400, 0x1800, 0x1C00, 0x2000, 0x3000, 0x4000
 
  524            "block align = %d, sample rate = %d\n",
 
  535     const uint8_t *buf_end = buf + buf_size;
 
  537     int st = channels - 1;
 
  540     for (ch = 0; ch < channels; ch++) {
 
  541         predictor[ch] = (int16_t)
AV_RL16(buf);
 
  543         *out++ = predictor[ch];
 
  548     while (buf < buf_end) {
 
  554         predictor[ch] = av_clip_int16(predictor[ch]);
 
  555         *out++ = predictor[ch];
 
  561                                  int *got_frame_ptr, 
AVPacket *avpkt)
 
  566     int buf_size = avpkt->
size;
 
  568     int block_type, silent_chunks, audio_chunks;
 
  571     int16_t *output_samples_s16;
 
  596         silent_chunks = av_popcount(flags);
 
  599     } 
else if (block_type == BLOCK_TYPE_SILENCE) {
 
  615     output_samples_u8  =            frame->
data[0];
 
  616     output_samples_s16 = (int16_t *)frame->
data[0];
 
  619     if (silent_chunks > 0) {
 
  620         int silent_size = avctx->
block_align * silent_chunks;
 
  624             memset(output_samples_s16, 0x00, silent_size * 2);
 
  625             output_samples_s16 += silent_size;
 
  627             memset(output_samples_u8,  0x80, silent_size);
 
  628             output_samples_u8 += silent_size;
 
  633     if (audio_chunks > 0) {
 
  634         buf_end = buf + buf_size;
 
  642                 memcpy(output_samples_u8, buf, s->
chunk_size);