FFmpeg
Loading...
Searching...
No Matches
truemotion2.c File Reference

Duck TrueMotion2 decoder. More...

#include <inttypes.h>
#include "libavutil/mem.h"
#include "avcodec.h"
#include "bswapdsp.h"
#include "bytestream.h"
#include "codec_internal.h"
#include "decode.h"
#include "get_bits.h"

Go to the source code of this file.

Data Structures

struct  TM2Context
 
struct  TM2Codes
 Huffman codes for each of streams. More...
 
struct  TM2Huff
 structure for gathering Huffman codes information More...
 

Macros

#define TM2_ESCAPE   0x80000000
 
#define TM2_DELTAS   64
 
#define TM2_OLD_HEADER_MAGIC   0x00000100
 
#define TM2_NEW_HEADER_MAGIC   0x00000101
 
#define TM2_INIT_POINTERS()
 
#define TM2_INIT_POINTERS_2()
 
#define TM2_RECALC_BLOCK(CHR, stride, last, CD)
 
#define TM2_HEADER_SIZE   40
 

Enumerations

enum  TM2_STREAMS {
  TM2_C_HI = 0 , TM2_C_LO , TM2_L_HI , TM2_L_LO ,
  TM2_UPD , TM2_MOT , TM2_TYPE , TM2_NUM_STREAMS
}
 
enum  TM2_BLOCKS {
  TM2_HI_RES = 0 , TM2_MED_RES , TM2_LOW_RES , TM2_NULL_RES ,
  TM2_UPDATE , TM2_STILL , TM2_MOTION
}
 

Functions

static int tm2_read_tree (TM2Context *ctx, int length, TM2Huff *huff)
 
static int tm2_build_huff_table (TM2Context *ctx, TM2Codes *code)
 
static void tm2_free_codes (TM2Codes *code)
 
static int tm2_get_token (GetBitContext *gb, TM2Codes *code)
 
static int tm2_read_header (TM2Context *ctx, const uint8_t *buf)
 
static int tm2_read_deltas (TM2Context *ctx, int stream_id)
 
static int tm2_read_stream (TM2Context *ctx, const uint8_t *buf, int stream_id, int buf_size)
 
static int GET_TOK (TM2Context *ctx, int type)
 
static void tm2_apply_deltas (TM2Context *ctx, int *Y, int stride, int *deltas, int *last)
 
static void tm2_high_chroma (int *data, int stride, int *last, unsigned *CD, int *deltas)
 
static void tm2_low_chroma (int *data, int stride, int *clast, unsigned *CD, int *deltas, int bx)
 
static void tm2_hi_res_block (TM2Context *ctx, AVFrame *pic, int bx, int by)
 
static void tm2_med_res_block (TM2Context *ctx, AVFrame *pic, int bx, int by)
 
static void tm2_low_res_block (TM2Context *ctx, AVFrame *pic, int bx, int by)
 
static void tm2_null_res_block (TM2Context *ctx, AVFrame *pic, int bx, int by)
 
static void tm2_still_block (TM2Context *ctx, AVFrame *pic, int bx, int by)
 
static void tm2_update_block (TM2Context *ctx, AVFrame *pic, int bx, int by)
 
static void tm2_motion_block (TM2Context *ctx, AVFrame *pic, int bx, int by)
 
static int tm2_decode_blocks (TM2Context *ctx, AVFrame *p)
 
static int decode_frame (AVCodecContext *avctx, AVFrame *rframe, int *got_frame, AVPacket *avpkt)
 
static av_cold int decode_init (AVCodecContext *avctx)
 
static av_cold int decode_end (AVCodecContext *avctx)
 

Variables

static const int tm2_stream_order [TM2_NUM_STREAMS]
 
const FFCodec ff_truemotion2_decoder
 

Detailed Description

Duck TrueMotion2 decoder.

Definition in file truemotion2.c.

Macro Definition Documentation

◆ TM2_ESCAPE

#define TM2_ESCAPE   0x80000000

Definition at line 37 of file truemotion2.c.

Referenced by tm2_read_stream().

◆ TM2_DELTAS

#define TM2_DELTAS   64

Definition at line 38 of file truemotion2.c.

Referenced by GET_TOK(), tm2_read_deltas(), and tm2_read_stream().

◆ TM2_OLD_HEADER_MAGIC

#define TM2_OLD_HEADER_MAGIC   0x00000100

Definition at line 238 of file truemotion2.c.

Referenced by tm2_read_header().

◆ TM2_NEW_HEADER_MAGIC

#define TM2_NEW_HEADER_MAGIC   0x00000101

Definition at line 239 of file truemotion2.c.

Referenced by tm2_read_header().

◆ TM2_INIT_POINTERS

#define TM2_INIT_POINTERS ( )
Value:
int *last, *clast; \
int *Y, *U, *V;\
int Ystride, Ustride, Vstride;\
\
Ystride = ctx->y_stride;\
Vstride = ctx->uv_stride;\
Ustride = ctx->uv_stride;\
Y = (ctx->cur?ctx->Y2:ctx->Y1) + by * 4 * Ystride + bx * 4;\
V = (ctx->cur?ctx->V2:ctx->V1) + by * 2 * Vstride + bx * 2;\
U = (ctx->cur?ctx->U2:ctx->U1) + by * 2 * Ustride + bx * 2;\
last = ctx->last + bx * 4;\
clast = ctx->clast + bx * 4;
static AVFormatContext * ctx
#define U(x)
Definition vpx_arith.h:37
#define V
Definition avdct.c:32
#define Y
Definition boxblur.h:37

Definition at line 421 of file truemotion2.c.

Referenced by tm2_hi_res_block(), tm2_low_res_block(), tm2_med_res_block(), and tm2_null_res_block().

◆ TM2_INIT_POINTERS_2

#define TM2_INIT_POINTERS_2 ( )
Value:
unsigned *Yo, *Uo, *Vo;\
int oYstride, oUstride, oVstride;\
\
TM2_INIT_POINTERS();\
oYstride = Ystride;\
oVstride = Vstride;\
oUstride = Ustride;\
Yo = (ctx->cur?ctx->Y1:ctx->Y2) + by * 4 * oYstride + bx * 4;\
Vo = (ctx->cur?ctx->V1:ctx->V2) + by * 2 * oVstride + bx * 2;\
Uo = (ctx->cur?ctx->U1:ctx->U2) + by * 2 * oUstride + bx * 2;

Definition at line 435 of file truemotion2.c.

Referenced by tm2_motion_block(), tm2_still_block(), and tm2_update_block().

◆ TM2_RECALC_BLOCK

#define TM2_RECALC_BLOCK ( CHR,
stride,
last,
CD )
Value:
{\
CD[0] = (unsigned)CHR[ 1] - (unsigned)last[1];\
CD[1] = (unsigned)CHR[stride + 1] - (unsigned) CHR[1];\
last[0] = (int)CHR[stride + 0];\
last[1] = (int)CHR[stride + 1];}
#define stride

Definition at line 448 of file truemotion2.c.

Referenced by tm2_motion_block(), tm2_still_block(), and tm2_update_block().

◆ TM2_HEADER_SIZE

#define TM2_HEADER_SIZE   40

Definition at line 887 of file truemotion2.c.

Referenced by decode_frame().

Enumeration Type Documentation

◆ TM2_STREAMS

Enumerator
TM2_C_HI 
TM2_C_LO 
TM2_L_HI 
TM2_L_LO 
TM2_UPD 
TM2_MOT 
TM2_TYPE 
TM2_NUM_STREAMS 

Definition at line 41 of file truemotion2.c.

◆ TM2_BLOCKS

enum TM2_BLOCKS
Enumerator
TM2_HI_RES 
TM2_MED_RES 
TM2_LOW_RES 
TM2_NULL_RES 
TM2_UPDATE 
TM2_STILL 
TM2_MOTION 

Definition at line 53 of file truemotion2.c.

Function Documentation

◆ tm2_read_tree()

static int tm2_read_tree ( TM2Context * ctx,
int length,
TM2Huff * huff )
static
Returns
the length of the longest code or an AVERROR code

Definition at line 120 of file truemotion2.c.

Referenced by tm2_build_huff_table(), and tm2_read_tree().

◆ tm2_build_huff_table()

static int tm2_build_huff_table ( TM2Context * ctx,
TM2Codes * code )
static

Definition at line 150 of file truemotion2.c.

Referenced by tm2_read_stream().

◆ tm2_free_codes()

static void tm2_free_codes ( TM2Codes * code)
static

Definition at line 223 of file truemotion2.c.

Referenced by tm2_read_stream().

◆ tm2_get_token()

static int tm2_get_token ( GetBitContext * gb,
TM2Codes * code )
inlinestatic

Definition at line 229 of file truemotion2.c.

Referenced by tm2_read_stream().

◆ tm2_read_header()

static int tm2_read_header ( TM2Context * ctx,
const uint8_t * buf )
inlinestatic

Definition at line 241 of file truemotion2.c.

Referenced by decode_frame().

◆ tm2_read_deltas()

static int tm2_read_deltas ( TM2Context * ctx,
int stream_id )
static

Definition at line 258 of file truemotion2.c.

Referenced by tm2_read_stream().

◆ tm2_read_stream()

static int tm2_read_stream ( TM2Context * ctx,
const uint8_t * buf,
int stream_id,
int buf_size )
static

Definition at line 285 of file truemotion2.c.

Referenced by decode_frame().

◆ GET_TOK()

static int GET_TOK ( TM2Context * ctx,
int type )
inlinestatic

◆ tm2_apply_deltas()

static void tm2_apply_deltas ( TM2Context * ctx,
int * Y,
int stride,
int * deltas,
int * last )
inlinestatic

◆ tm2_high_chroma()

static void tm2_high_chroma ( int * data,
int stride,
int * last,
unsigned * CD,
int * deltas )
inlinestatic

Definition at line 473 of file truemotion2.c.

Referenced by tm2_hi_res_block(), and tm2_low_chroma().

◆ tm2_low_chroma()

static void tm2_low_chroma ( int * data,
int stride,
int * clast,
unsigned * CD,
int * deltas,
int bx )
inlinestatic

Definition at line 486 of file truemotion2.c.

Referenced by tm2_low_res_block(), tm2_med_res_block(), and tm2_null_res_block().

◆ tm2_hi_res_block()

static void tm2_hi_res_block ( TM2Context * ctx,
AVFrame * pic,
int bx,
int by )
inlinestatic

Definition at line 505 of file truemotion2.c.

Referenced by tm2_decode_blocks().

◆ tm2_med_res_block()

static void tm2_med_res_block ( TM2Context * ctx,
AVFrame * pic,
int bx,
int by )
inlinestatic

Definition at line 526 of file truemotion2.c.

Referenced by tm2_decode_blocks().

◆ tm2_low_res_block()

static void tm2_low_res_block ( TM2Context * ctx,
AVFrame * pic,
int bx,
int by )
inlinestatic

Definition at line 548 of file truemotion2.c.

Referenced by tm2_decode_blocks().

◆ tm2_null_res_block()

static void tm2_null_res_block ( TM2Context * ctx,
AVFrame * pic,
int bx,
int by )
inlinestatic

Definition at line 589 of file truemotion2.c.

Referenced by tm2_decode_blocks().

◆ tm2_still_block()

static void tm2_still_block ( TM2Context * ctx,
AVFrame * pic,
int bx,
int by )
inlinestatic

Definition at line 636 of file truemotion2.c.

Referenced by tm2_decode_blocks().

◆ tm2_update_block()

static void tm2_update_block ( TM2Context * ctx,
AVFrame * pic,
int bx,
int by )
inlinestatic

Definition at line 671 of file truemotion2.c.

Referenced by tm2_decode_blocks().

◆ tm2_motion_block()

static void tm2_motion_block ( TM2Context * ctx,
AVFrame * pic,
int bx,
int by )
inlinestatic

Definition at line 711 of file truemotion2.c.

Referenced by tm2_decode_blocks().

◆ tm2_decode_blocks()

static int tm2_decode_blocks ( TM2Context * ctx,
AVFrame * p )
static

Definition at line 765 of file truemotion2.c.

Referenced by decode_frame().

◆ decode_frame()

static int decode_frame ( AVCodecContext * avctx,
AVFrame * rframe,
int * got_frame,
AVPacket * avpkt )
static

Definition at line 889 of file truemotion2.c.

◆ decode_init()

static av_cold int decode_init ( AVCodecContext * avctx)
static

Definition at line 948 of file truemotion2.c.

◆ decode_end()

static av_cold int decode_end ( AVCodecContext * avctx)
static

Definition at line 994 of file truemotion2.c.

Variable Documentation

◆ tm2_stream_order

const int tm2_stream_order[TM2_NUM_STREAMS]
static
Initial value:
= {
}
@ TM2_C_LO
Definition truemotion2.c:43
@ TM2_L_LO
Definition truemotion2.c:45
@ TM2_TYPE
Definition truemotion2.c:48
@ TM2_L_HI
Definition truemotion2.c:44
@ TM2_MOT
Definition truemotion2.c:47
@ TM2_UPD
Definition truemotion2.c:46
@ TM2_C_HI
Definition truemotion2.c:42

Definition at line 883 of file truemotion2.c.

Referenced by decode_frame().

◆ ff_truemotion2_decoder

const FFCodec ff_truemotion2_decoder
Initial value:
= {
.p.name = "truemotion2",
CODEC_LONG_NAME("Duck TrueMotion 2.0"),
.p.type = AVMEDIA_TYPE_VIDEO,
.priv_data_size = sizeof(TM2Context),
.p.capabilities = AV_CODEC_CAP_DR1,
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
}
static av_cold void close(AVCodecParserContext *s)
Definition apv_parser.c:197
#define FF_CODEC_DECODE_CB(func)
#define CODEC_LONG_NAME(str)
#define FF_CODEC_CAP_INIT_CLEANUP
The codec allows calling the close function for deallocation even if the init function returned a fai...
int(* init)(AVBSFContext *ctx)
Definition dts2pts.c:608
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() or get_encode_buffer() for allocating buffers and supports custom allocators.
Definition codec.h:49
@ AV_CODEC_ID_TRUEMOTION2
Definition codec_id.h:127
@ AVMEDIA_TYPE_VIDEO
Definition avutil.h:200
static av_cold int decode_init(AVCodecContext *avctx)
Definition 4xm.c:998
static av_cold int decode_end(AVCodecContext *avctx)
Definition 4xm.c:980
static int decode_frame(AVCodecContext *avctx, AVFrame *picture, int *got_frame, AVPacket *avpkt)
Definition 4xm.c:837

Definition at line 1013 of file truemotion2.c.