FFmpeg
Data Structures | Macros | Enumerations | Functions | Variables
g2meet.c File Reference
#include <inttypes.h>
#include <zlib.h>
#include "libavutil/imgutils.h"
#include "libavutil/intreadwrite.h"
#include "libavutil/mem_internal.h"
#include "avcodec.h"
#include "blockdsp.h"
#include "bytestream.h"
#include "codec_internal.h"
#include "elsdec.h"
#include "get_bits.h"
#include "idctdsp.h"
#include "internal.h"
#include "jpegtables.h"
#include "mjpeg.h"
#include "mjpegdec.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 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, AVFrame *pic, 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]
 
const FFCodec ff_g2m_decoder
 

Detailed Description

Go2Webinar / Go2Meeting decoder

Definition in file g2meet.c.

Macro Definition Documentation

◆ EPIC_PIX_STACK_SIZE

#define EPIC_PIX_STACK_SIZE   1024

Definition at line 47 of file g2meet.c.

◆ EPIC_PIX_STACK_MAX

#define EPIC_PIX_STACK_MAX   (EPIC_PIX_STACK_SIZE - 1)

Definition at line 48 of file g2meet.c.

◆ EPIC_HASH_SIZE

#define EPIC_HASH_SIZE   256

Definition at line 97 of file g2meet.c.

◆ LOAD_NEIGHBOURS

#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]

Definition at line 352 of file g2meet.c.

◆ UPDATE_NEIGHBOURS

#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]

Definition at line 363 of file g2meet.c.

◆ R_shift

#define R_shift   16

Definition at line 372 of file g2meet.c.

◆ G_shift

#define G_shift   8

Definition at line 373 of file g2meet.c.

◆ B_shift

#define B_shift   0

Definition at line 374 of file g2meet.c.

◆ TOSIGNED

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

Definition at line 491 of file g2meet.c.

◆ APPLY_ALPHA

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

Definition at line 1323 of file g2meet.c.

Enumeration Type Documentation

◆ ChunkType

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 50 of file g2meet.c.

◆ Compression

Enumerator
COMPR_EPIC_J_B 
COMPR_KEMPF_J_B 

Definition at line 59 of file g2meet.c.

Function Documentation

◆ jpg_init()

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

Definition at line 164 of file g2meet.c.

Referenced by g2m_decode_init().

◆ jpg_free_context()

static av_cold void jpg_free_context ( JPGContext ctx)
static

Definition at line 193 of file g2meet.c.

Referenced by g2m_decode_end().

◆ jpg_unescape()

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

Definition at line 205 of file g2meet.c.

Referenced by jpg_decode_data().

◆ jpg_decode_block()

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

Definition at line 222 of file g2meet.c.

Referenced by jpg_decode_data().

◆ yuv2rgb()

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

Definition at line 262 of file g2meet.c.

Referenced by create_filtergraph(), jpg_decode_data(), and tonemap_opencl_init().

◆ 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 269 of file g2meet.c.

Referenced by epic_jb_decode_tile(), and kempf_decode_tile().

◆ djb2_hash()

static int djb2_hash ( uint32_t  key)
static

Definition at line 377 of file g2meet.c.

Referenced by epic_hash_add(), and epic_hash_find().

◆ epic_hash_init()

static void epic_hash_init ( ePICPixHash hash)
static

Definition at line 389 of file g2meet.c.

Referenced by epic_jb_decode_tile().

◆ epic_hash_find()

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

◆ epic_hash_add()

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

Definition at line 406 of file g2meet.c.

Referenced by epic_add_pixel_to_cache().

◆ epic_add_pixel_to_cache()

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

Definition at line 429 of file g2meet.c.

Referenced by epic_decode_tile().

◆ epic_cache_entries_for_pixel()

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

Definition at line 450 of file g2meet.c.

Referenced by epic_decode_tile().

◆ epic_free_pixel_cache()

static void epic_free_pixel_cache ( ePICPixHash hash)
static

Definition at line 461 of file g2meet.c.

Referenced by epic_jb_decode_tile().

◆ is_pixel_on_stack()

static int is_pixel_on_stack ( const ePICContext dc,
uint32_t  pix 
)
inlinestatic

◆ epic_decode_component_pred()

static int epic_decode_component_pred ( ePICContext dc,
int  N,
int  W,
int  NW 
)
inlinestatic

Definition at line 493 of file g2meet.c.

Referenced by epic_decode_pixel_pred().

◆ 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 500 of file g2meet.c.

Referenced by epic_decode_tile().

◆ epic_predict_pixel()

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

Definition at line 552 of file g2meet.c.

Referenced by epic_handle_edges().

◆ 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 563 of file g2meet.c.

Referenced by epic_decode_tile().

◆ epic_decode_run_length()

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 594 of file g2meet.c.

Referenced by epic_decode_tile().

◆ epic_predict_pixel2()

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

Definition at line 729 of file g2meet.c.

Referenced by epic_predict_from_NW_NE().

◆ 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 740 of file g2meet.c.

Referenced by epic_decode_tile().

◆ epic_decode_from_cache()

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

Definition at line 768 of file g2meet.c.

Referenced by epic_decode_tile().

◆ 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 797 of file g2meet.c.

Referenced by epic_jb_decode_tile().

◆ 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 863 of file g2meet.c.

Referenced by g2m_decode_frame().

◆ kempf_restore_buf()

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 1014 of file g2meet.c.

Referenced by kempf_decode_tile().

◆ 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 1049 of file g2meet.c.

Referenced by g2m_decode_frame().

◆ g2m_init_buffers()

static int g2m_init_buffers ( G2MContext c)
static

Definition at line 1160 of file g2meet.c.

Referenced by g2m_decode_frame().

◆ g2m_load_cursor()

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

Definition at line 1204 of file g2meet.c.

Referenced by g2m_decode_frame().

◆ g2m_paint_cursor()

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

Definition at line 1326 of file g2meet.c.

Referenced by g2m_decode_frame().

◆ g2m_decode_frame()

static int g2m_decode_frame ( AVCodecContext avctx,
AVFrame pic,
int got_picture_ptr,
AVPacket avpkt 
)
static

Definition at line 1375 of file g2meet.c.

◆ g2m_decode_init()

static av_cold int g2m_decode_init ( AVCodecContext avctx)
static

Definition at line 1588 of file g2meet.c.

◆ g2m_decode_end()

static av_cold int g2m_decode_end ( AVCodecContext avctx)
static

Definition at line 1607 of file g2meet.c.

Variable Documentation

◆ luma_quant

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 64 of file g2meet.c.

Referenced by jpg_decode_block().

◆ chroma_quant

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 75 of file g2meet.c.

Referenced by jpg_decode_block().

◆ ff_g2m_decoder

const FFCodec ff_g2m_decoder
Initial value:
= {
.p.name = "g2m",
.p.long_name = NULL_IF_CONFIG_SMALL("Go2Meeting"),
.p.type = AVMEDIA_TYPE_VIDEO,
.p.id = AV_CODEC_ID_G2M,
.priv_data_size = sizeof(G2MContext),
.close = g2m_decode_end,
.p.capabilities = AV_CODEC_CAP_DR1,
}

Definition at line 1625 of file g2meet.c.

FF_CODEC_CAP_INIT_CLEANUP
#define FF_CODEC_CAP_INIT_CLEANUP
The codec allows calling the close function for deallocation even if the init function returned a fai...
Definition: codec_internal.h:39
NN
#define NN(type, name)
Definition: vf_shear.c:115
g2m_decode_init
static av_cold int g2m_decode_init(AVCodecContext *avctx)
Definition: g2meet.c:1588
init
static int init
Definition: av_tx.c:47
FF_CODEC_DECODE_CB
#define FF_CODEC_DECODE_CB(func)
Definition: codec_internal.h:254
g2m_decode_end
static av_cold int g2m_decode_end(AVCodecContext *avctx)
Definition: g2meet.c:1607
g2m_decode_frame
static int g2m_decode_frame(AVCodecContext *avctx, AVFrame *pic, int *got_picture_ptr, AVPacket *avpkt)
Definition: g2meet.c:1375
AV_CODEC_CAP_DR1
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() or get_encode_buffer() for allocating buffers and supports custom allocators.
Definition: codec.h:52
NULL_IF_CONFIG_SMALL
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
Definition: internal.h:117
N
#define N
Definition: af_mcompand.c:53
FF_CODEC_CAP_INIT_THREADSAFE
#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: codec_internal.h:31
W
@ W
Definition: vf_addroi.c:26
G2MContext
Definition: g2meet.c:134
AVMEDIA_TYPE_VIDEO
@ AVMEDIA_TYPE_VIDEO
Definition: avutil.h:201
AV_CODEC_ID_G2M
@ AV_CODEC_ID_G2M
Definition: codec_id.h:221