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",
 
  380     unsigned int *palette32;
 
  381     int palette_index = 0;
 
  382     unsigned char r, 
g, 
b;
 
  383     unsigned char *vmd_header;
 
  384     unsigned char *raw_palette;
 
  395     vmd_header = (
unsigned char *)avctx->
extradata;
 
  405     raw_palette = &vmd_header[28];
 
  406     palette32 = (
unsigned int *)s->
palette;
 
  408         r = raw_palette[palette_index++] * 4;
 
  409         g = raw_palette[palette_index++] * 4;
 
  410         b = raw_palette[palette_index++] * 4;
 
  411         palette32[i] = 0xFF
U << 24 | (r << 16) | (g << 8) | (
b);
 
  412         palette32[i] |= palette32[i] >> 6 & 0x30303;
 
  421                                  void *
data, 
int *got_frame,
 
  425     int buf_size = avpkt->
size;
 
  471 #define BLOCK_TYPE_AUDIO    1 
  472 #define BLOCK_TYPE_INITIAL  2 
  473 #define BLOCK_TYPE_SILENCE  3 
  481     0x000, 0x008, 0x010, 0x020, 0x030, 0x040, 0x050, 0x060, 0x070, 0x080,
 
  482     0x090, 0x0A0, 0x0B0, 0x0C0, 0x0D0, 0x0E0, 0x0F0, 0x100, 0x110, 0x120,
 
  483     0x130, 0x140, 0x150, 0x160, 0x170, 0x180, 0x190, 0x1A0, 0x1B0, 0x1C0,
 
  484     0x1D0, 0x1E0, 0x1F0, 0x200, 0x208, 0x210, 0x218, 0x220, 0x228, 0x230,
 
  485     0x238, 0x240, 0x248, 0x250, 0x258, 0x260, 0x268, 0x270, 0x278, 0x280,
 
  486     0x288, 0x290, 0x298, 0x2A0, 0x2A8, 0x2B0, 0x2B8, 0x2C0, 0x2C8, 0x2D0,
 
  487     0x2D8, 0x2E0, 0x2E8, 0x2F0, 0x2F8, 0x300, 0x308, 0x310, 0x318, 0x320,
 
  488     0x328, 0x330, 0x338, 0x340, 0x348, 0x350, 0x358, 0x360, 0x368, 0x370,
 
  489     0x378, 0x380, 0x388, 0x390, 0x398, 0x3A0, 0x3A8, 0x3B0, 0x3B8, 0x3C0,
 
  490     0x3C8, 0x3D0, 0x3D8, 0x3E0, 0x3E8, 0x3F0, 0x3F8, 0x400, 0x440, 0x480,
 
  491     0x4C0, 0x500, 0x540, 0x580, 0x5C0, 0x600, 0x640, 0x680, 0x6C0, 0x700,
 
  492     0x740, 0x780, 0x7C0, 0x800, 0x900, 0xA00, 0xB00, 0xC00, 0xD00, 0xE00,
 
  493     0xF00, 0x1000, 0x1400, 0x1800, 0x1C00, 0x2000, 0x3000, 0x4000
 
  521            "block align = %d, sample rate = %d\n",
 
  532     const uint8_t *buf_end = buf + buf_size;
 
  534     int st = channels - 1;
 
  537     for (ch = 0; ch < channels; ch++) {
 
  538         predictor[ch] = (int16_t)
AV_RL16(buf);
 
  540         *out++ = predictor[ch];
 
  545     while (buf < buf_end) {
 
  551         predictor[ch] = av_clip_int16(predictor[ch]);
 
  552         *out++ = predictor[ch];
 
  558                                  int *got_frame_ptr, 
AVPacket *avpkt)
 
  563     int buf_size = avpkt->
size;
 
  565     int block_type, silent_chunks, audio_chunks;
 
  568     int16_t *output_samples_s16;
 
  593         silent_chunks = av_popcount(flags);
 
  596     } 
else if (block_type == BLOCK_TYPE_SILENCE) {
 
  612     output_samples_u8  =            frame->
data[0];
 
  613     output_samples_s16 = (int16_t *)frame->
data[0];
 
  616     if (silent_chunks > 0) {
 
  617         int silent_size = avctx->
block_align * silent_chunks;
 
  621             memset(output_samples_s16, 0x00, silent_size * 2);
 
  622             output_samples_s16 += silent_size;
 
  624             memset(output_samples_u8,  0x80, silent_size);
 
  625             output_samples_u8 += silent_size;
 
  630     if (audio_chunks > 0) {
 
  631         buf_end = buf + buf_size;
 
  639                 memcpy(output_samples_u8, buf, s->
chunk_size);