FFmpeg
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Data Structures | Macros | Enumerations | Functions | Variables
g2meet.c File Reference

Go2Webinar / Go2Meeting decoder. More...

#include <inttypes.h>
#include <zlib.h>
#include "libavutil/intreadwrite.h"
#include "avcodec.h"
#include "blockdsp.h"
#include "bytestream.h"
#include "elsdec.h"
#include "get_bits.h"
#include "idctdsp.h"
#include "internal.h"
#include "jpegtables.h"
#include "mjpeg.h"

Go to the source code of this file.

Data Structures

struct  ePICPixListElem
 
struct  ePICPixHashElem
 
struct  ePICPixHash
 
struct  ePICContext
 
struct  JPGContext
 
struct  G2MContext
 

Macros

#define EPIC_PIX_STACK_SIZE   1024
 
#define EPIC_PIX_STACK_MAX   (EPIC_PIX_STACK_SIZE - 1)
 
#define EPIC_HASH_SIZE   256
 
#define LOAD_NEIGHBOURS(x)
 
#define UPDATE_NEIGHBOURS(x)
 
#define R_shift   16
 
#define G_shift   8
 
#define B_shift   0
 
#define TOSIGNED(val)   (((val) >> 1) ^ -((val) & 1))
 
#define APPLY_ALPHA(src, new, alpha)   src = (src * (256 - alpha) + new * alpha) >> 8
 

Enumerations

enum  ChunkType {
  DISPLAY_INFO = 0xC8, TILE_DATA, CURSOR_POS, CURSOR_SHAPE,
  CHUNK_CC, CHUNK_CD, CHUNK_TYPE_DATA = 0x4424, CHUNK_TYPE_ASF_HEADER = 0x4824,
  CHUNK_TYPE_END = 0x4524, CHUNK_TYPE_STREAM_CHANGE = 0x4324
}
 
enum  Compression { COMPR_EPIC_J_B = 2, COMPR_KEMPF_J_B }
 

Functions

static av_cold int build_vlc (VLC *vlc, const uint8_t *bits_table, const uint8_t *val_table, int nb_codes, int is_ac)
 
static av_cold int jpg_init (AVCodecContext *avctx, JPGContext *c)
 
static av_cold void jpg_free_context (JPGContext *ctx)
 
static void jpg_unescape (const uint8_t *src, int src_size, uint8_t *dst, int *dst_size)
 
static int jpg_decode_block (JPGContext *c, GetBitContext *gb, int plane, int16_t *block)
 
static void yuv2rgb (uint8_t *out, int ridx, int Y, int U, int V)
 
static int jpg_decode_data (JPGContext *c, int width, int height, const uint8_t *src, int src_size, uint8_t *dst, int dst_stride, const uint8_t *mask, int mask_stride, int num_mbs, int swapuv)
 
static int djb2_hash (uint32_t key)
 
static void epic_hash_init (ePICPixHash *hash)
 
static ePICPixHashElemepic_hash_find (const ePICPixHash *hash, uint32_t key)
 
static ePICPixHashElemepic_hash_add (ePICPixHash *hash, uint32_t key)
 
static int epic_add_pixel_to_cache (ePICPixHash *hash, uint32_t key, uint32_t pix)
 
static int epic_cache_entries_for_pixel (const ePICPixHash *hash, uint32_t pix)
 
static void epic_free_pixel_cache (ePICPixHash *hash)
 
static int is_pixel_on_stack (const ePICContext *dc, uint32_t pix)
 
static int epic_decode_component_pred (ePICContext *dc, int N, int W, int NW)
 
static uint32_t epic_decode_pixel_pred (ePICContext *dc, int x, int y, const uint32_t *curr_row, const uint32_t *above_row)
 
static int epic_predict_pixel (ePICContext *dc, uint8_t *rung, uint32_t *pPix, uint32_t pix)
 
static int epic_handle_edges (ePICContext *dc, int x, int y, const uint32_t *curr_row, const uint32_t *above_row, uint32_t *pPix)
 
static int epic_decode_run_length (ePICContext *dc, int x, int y, int tile_width, const uint32_t *curr_row, const uint32_t *above_row, const uint32_t *above2_row, uint32_t *pPix, int *pRun)
 
static int epic_predict_pixel2 (ePICContext *dc, uint8_t *rung, uint32_t *pPix, uint32_t pix)
 
static int epic_predict_from_NW_NE (ePICContext *dc, int x, int y, int run, int tile_width, const uint32_t *curr_row, const uint32_t *above_row, uint32_t *pPix)
 
static int epic_decode_from_cache (ePICContext *dc, uint32_t W, uint32_t *pPix)
 
static int epic_decode_tile (ePICContext *dc, uint8_t *out, int tile_height, int tile_width, int stride)
 
static int epic_jb_decode_tile (G2MContext *c, int tile_x, int tile_y, const uint8_t *src, size_t src_size, AVCodecContext *avctx)
 
static int kempf_restore_buf (const uint8_t *src, int len, uint8_t *dst, int stride, const uint8_t *jpeg_tile, int tile_stride, int width, int height, const uint8_t *pal, int npal, int tidx)
 
static int kempf_decode_tile (G2MContext *c, int tile_x, int tile_y, const uint8_t *src, int src_size)
 
static int g2m_init_buffers (G2MContext *c)
 
static int g2m_load_cursor (AVCodecContext *avctx, G2MContext *c, GetByteContext *gb)
 
static void g2m_paint_cursor (G2MContext *c, uint8_t *dst, int stride)
 
static int g2m_decode_frame (AVCodecContext *avctx, void *data, int *got_picture_ptr, AVPacket *avpkt)
 
static av_cold int g2m_decode_init (AVCodecContext *avctx)
 
static av_cold int g2m_decode_end (AVCodecContext *avctx)
 

Variables

static const uint8_t luma_quant [64]
 
static const uint8_t chroma_quant [64]
 
AVCodec ff_g2m_decoder
 

Detailed Description

Go2Webinar / Go2Meeting decoder.

Definition in file g2meet.c.

Macro Definition Documentation

#define EPIC_PIX_STACK_SIZE   1024

Definition at line 43 of file g2meet.c.

#define EPIC_PIX_STACK_MAX   (EPIC_PIX_STACK_SIZE - 1)
#define EPIC_HASH_SIZE   256

Definition at line 93 of file g2meet.c.

Referenced by djb2_hash(), and epic_free_pixel_cache().

#define LOAD_NEIGHBOURS (   x)
Value:
W = curr_row[(x) - 1]; \
N = above_row[(x)]; \
WW = curr_row[(x) - 2]; \
NW = above_row[(x) - 1]; \
NE = above_row[(x) + 1]; \
NN = above2_row[(x)]; \
NNW = above2_row[(x) - 1]; \
NWW = above_row[(x) - 2]; \
NNE = above2_row[(x) + 1]
#define N
Definition: vf_pp7.c:73
#define W(a, i, v)
Definition: jpegls.h:122

Definition at line 366 of file g2meet.c.

Referenced by epic_decode_run_length().

#define UPDATE_NEIGHBOURS (   x)
Value:
NNW = NN; \
NN = NNE; \
NWW = NW; \
NW = N; \
N = NE; \
NE = above_row[(x) + 1]; \
NNE = above2_row[(x) + 1]
#define N
Definition: vf_pp7.c:73

Definition at line 377 of file g2meet.c.

Referenced by epic_decode_run_length().

#define R_shift   16

Definition at line 386 of file g2meet.c.

Referenced by epic_decode_pixel_pred(), epic_handle_edges(), and epic_jb_decode_tile().

#define G_shift   8

Definition at line 387 of file g2meet.c.

Referenced by epic_decode_pixel_pred(), epic_handle_edges(), and epic_jb_decode_tile().

#define B_shift   0

Definition at line 388 of file g2meet.c.

Referenced by epic_decode_pixel_pred(), epic_handle_edges(), and epic_jb_decode_tile().

#define TOSIGNED (   val)    (((val) >> 1) ^ -((val) & 1))

Definition at line 505 of file g2meet.c.

Referenced by epic_decode_component_pred(), and epic_decode_pixel_pred().

#define APPLY_ALPHA (   src,
  new,
  alpha 
)    src = (src * (256 - alpha) + new * alpha) >> 8

Definition at line 1328 of file g2meet.c.

Referenced by g2m_paint_cursor().

Enumeration Type Documentation

enum ChunkType
Enumerator
DISPLAY_INFO 
TILE_DATA 
CURSOR_POS 
CURSOR_SHAPE 
CHUNK_CC 
CHUNK_CD 
CHUNK_TYPE_DATA 
CHUNK_TYPE_ASF_HEADER 
CHUNK_TYPE_END 
CHUNK_TYPE_STREAM_CHANGE 

Definition at line 46 of file g2meet.c.

Enumerator
COMPR_EPIC_J_B 
COMPR_KEMPF_J_B 

Definition at line 55 of file g2meet.c.

Function Documentation

static av_cold int build_vlc ( VLC vlc,
const uint8_t bits_table,
const uint8_t val_table,
int  nb_codes,
int  is_ac 
)
static

Definition at line 160 of file g2meet.c.

Referenced by jpg_init().

static av_cold int jpg_init ( AVCodecContext avctx,
JPGContext c 
)
static

Definition at line 181 of file g2meet.c.

Referenced by g2m_decode_init().

static av_cold void jpg_free_context ( JPGContext ctx)
static

Definition at line 210 of file g2meet.c.

Referenced by g2m_decode_end(), and g2m_decode_init().

static void jpg_unescape ( const uint8_t src,
int  src_size,
uint8_t dst,
int dst_size 
)
static

Definition at line 222 of file g2meet.c.

Referenced by jpg_decode_data().

static int jpg_decode_block ( JPGContext c,
GetBitContext gb,
int  plane,
int16_t *  block 
)
static

Definition at line 239 of file g2meet.c.

Referenced by jpg_decode_data().

static void yuv2rgb ( uint8_t out,
int  ridx,
int  Y,
int  U,
int  V 
)
inlinestatic

Definition at line 276 of file g2meet.c.

Referenced by create_filtergraph(), and jpg_decode_data().

static int jpg_decode_data ( JPGContext c,
int  width,
int  height,
const uint8_t src,
int  src_size,
uint8_t dst,
int  dst_stride,
const uint8_t mask,
int  mask_stride,
int  num_mbs,
int  swapuv 
)
static

Definition at line 283 of file g2meet.c.

Referenced by epic_jb_decode_tile(), and kempf_decode_tile().

static int djb2_hash ( uint32_t  key)
static

Definition at line 391 of file g2meet.c.

Referenced by epic_hash_add(), and epic_hash_find().

static void epic_hash_init ( ePICPixHash hash)
static

Definition at line 403 of file g2meet.c.

Referenced by epic_jb_decode_tile().

static ePICPixHashElem* epic_hash_find ( const ePICPixHash hash,
uint32_t  key 
)
static
static ePICPixHashElem* epic_hash_add ( ePICPixHash hash,
uint32_t  key 
)
static

Definition at line 420 of file g2meet.c.

Referenced by epic_add_pixel_to_cache().

static int epic_add_pixel_to_cache ( ePICPixHash hash,
uint32_t  key,
uint32_t  pix 
)
static

Definition at line 443 of file g2meet.c.

Referenced by epic_decode_tile().

static int epic_cache_entries_for_pixel ( const ePICPixHash hash,
uint32_t  pix 
)
inlinestatic

Definition at line 464 of file g2meet.c.

Referenced by epic_decode_tile().

static void epic_free_pixel_cache ( ePICPixHash hash)
static

Definition at line 475 of file g2meet.c.

Referenced by epic_jb_decode_tile().

static int is_pixel_on_stack ( const ePICContext dc,
uint32_t  pix 
)
inlinestatic
static int epic_decode_component_pred ( ePICContext dc,
int  N,
int  W,
int  NW 
)
inlinestatic

Definition at line 507 of file g2meet.c.

Referenced by epic_decode_pixel_pred().

static uint32_t epic_decode_pixel_pred ( ePICContext dc,
int  x,
int  y,
const uint32_t *  curr_row,
const uint32_t *  above_row 
)
static

Definition at line 514 of file g2meet.c.

Referenced by epic_decode_tile().

static int epic_predict_pixel ( ePICContext dc,
uint8_t rung,
uint32_t *  pPix,
uint32_t  pix 
)
static

Definition at line 566 of file g2meet.c.

Referenced by epic_handle_edges().

static int epic_handle_edges ( ePICContext dc,
int  x,
int  y,
const uint32_t *  curr_row,
const uint32_t *  above_row,
uint32_t *  pPix 
)
static

Definition at line 577 of file g2meet.c.

Referenced by epic_decode_tile().

static int epic_decode_run_length ( ePICContext dc,
int  x,
int  y,
int  tile_width,
const uint32_t *  curr_row,
const uint32_t *  above_row,
const uint32_t *  above2_row,
uint32_t *  pPix,
int pRun 
)
static

Definition at line 608 of file g2meet.c.

Referenced by epic_decode_tile().

static int epic_predict_pixel2 ( ePICContext dc,
uint8_t rung,
uint32_t *  pPix,
uint32_t  pix 
)
static

Definition at line 743 of file g2meet.c.

Referenced by epic_predict_from_NW_NE().

static int epic_predict_from_NW_NE ( ePICContext dc,
int  x,
int  y,
int  run,
int  tile_width,
const uint32_t *  curr_row,
const uint32_t *  above_row,
uint32_t *  pPix 
)
static

Definition at line 754 of file g2meet.c.

Referenced by epic_decode_tile().

static int epic_decode_from_cache ( ePICContext dc,
uint32_t  W,
uint32_t *  pPix 
)
static

Definition at line 782 of file g2meet.c.

Referenced by epic_decode_tile().

static int epic_decode_tile ( ePICContext dc,
uint8_t out,
int  tile_height,
int  tile_width,
int  stride 
)
static

Definition at line 811 of file g2meet.c.

Referenced by epic_jb_decode_tile().

static int epic_jb_decode_tile ( G2MContext c,
int  tile_x,
int  tile_y,
const uint8_t src,
size_t  src_size,
AVCodecContext avctx 
)
static

Definition at line 874 of file g2meet.c.

Referenced by g2m_decode_frame().

static int kempf_restore_buf ( const uint8_t src,
int  len,
uint8_t dst,
int  stride,
const uint8_t jpeg_tile,
int  tile_stride,
int  width,
int  height,
const uint8_t pal,
int  npal,
int  tidx 
)
static

Definition at line 1019 of file g2meet.c.

Referenced by kempf_decode_tile().

static int kempf_decode_tile ( G2MContext c,
int  tile_x,
int  tile_y,
const uint8_t src,
int  src_size 
)
static

Definition at line 1054 of file g2meet.c.

Referenced by g2m_decode_frame().

static int g2m_init_buffers ( G2MContext c)
static

Definition at line 1165 of file g2meet.c.

Referenced by g2m_decode_frame().

static int g2m_load_cursor ( AVCodecContext avctx,
G2MContext c,
GetByteContext gb 
)
static

Definition at line 1209 of file g2meet.c.

Referenced by g2m_decode_frame().

static void g2m_paint_cursor ( G2MContext c,
uint8_t dst,
int  stride 
)
static

Definition at line 1331 of file g2meet.c.

Referenced by g2m_decode_frame().

static int g2m_decode_frame ( AVCodecContext avctx,
void data,
int got_picture_ptr,
AVPacket avpkt 
)
static

Definition at line 1378 of file g2meet.c.

static av_cold int g2m_decode_init ( AVCodecContext avctx)
static

Definition at line 1591 of file g2meet.c.

static av_cold int g2m_decode_end ( AVCodecContext avctx)
static

Definition at line 1611 of file g2meet.c.

Variable Documentation

const uint8_t luma_quant[64]
static
Initial value:
= {
8, 6, 5, 8, 12, 20, 26, 31,
6, 6, 7, 10, 13, 29, 30, 28,
7, 7, 8, 12, 20, 29, 35, 28,
7, 9, 11, 15, 26, 44, 40, 31,
9, 11, 19, 28, 34, 55, 52, 39,
12, 18, 28, 32, 41, 52, 57, 46,
25, 32, 39, 44, 52, 61, 60, 51,
36, 46, 48, 49, 56, 50, 52, 50
}

Definition at line 60 of file g2meet.c.

Referenced by jpg_decode_block().

const uint8_t chroma_quant[64]
static
Initial value:
= {
9, 9, 12, 24, 50, 50, 50, 50,
9, 11, 13, 33, 50, 50, 50, 50,
12, 13, 28, 50, 50, 50, 50, 50,
24, 33, 50, 50, 50, 50, 50, 50,
50, 50, 50, 50, 50, 50, 50, 50,
50, 50, 50, 50, 50, 50, 50, 50,
50, 50, 50, 50, 50, 50, 50, 50,
50, 50, 50, 50, 50, 50, 50, 50,
}

Definition at line 71 of file g2meet.c.

Referenced by jpg_decode_block().

AVCodec ff_g2m_decoder
Initial value:
= {
.name = "g2m",
.long_name = NULL_IF_CONFIG_SMALL("Go2Meeting"),
.priv_data_size = sizeof(G2MContext),
.close = g2m_decode_end,
.capabilities = AV_CODEC_CAP_DR1,
.caps_internal = FF_CODEC_CAP_INIT_THREADSAFE,
}
static av_cold int init(AVCodecContext *avctx)
Definition: avrndec.c:35
static void decode(AVCodecContext *dec_ctx, AVPacket *pkt, AVFrame *frame, FILE *outfile)
Definition: decode_audio.c:42
#define FF_CODEC_CAP_INIT_THREADSAFE
The codec does not modify any global variables in the init function, allowing to call the init functi...
Definition: internal.h:40
static av_cold int g2m_decode_init(AVCodecContext *avctx)
Definition: g2meet.c:1591
static av_cold int g2m_decode_end(AVCodecContext *avctx)
Definition: g2meet.c:1611
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
Definition: internal.h:179
static int g2m_decode_frame(AVCodecContext *avctx, void *data, int *got_picture_ptr, AVPacket *avpkt)
Definition: g2meet.c:1378
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators.
Definition: avcodec.h:1002

Definition at line 1629 of file g2meet.c.