#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "avcodec.h"
#include "dsputil.h"
#include "truemotion1data.h"
Go to the source code of this file.
Data Structures | |
| struct | TrueMotion1Context | 
| struct | frame_header | 
| struct | comp_types | 
Defines | |
| #define | FLAG_SPRITE 32 | 
| #define | FLAG_KEYFRAME 16 | 
| #define | FLAG_INTERFRAME 8 | 
| #define | FLAG_INTERPOLATED 4 | 
| #define | ALGO_NOP 0 | 
| #define | ALGO_RGB16V 1 | 
| #define | ALGO_RGB16H 2 | 
| #define | ALGO_RGB24H 3 | 
| #define | BLOCK_2x2 0 | 
| #define | BLOCK_2x4 1 | 
| #define | BLOCK_4x2 2 | 
| #define | BLOCK_4x4 3 | 
| #define | GET_NEXT_INDEX() | 
| #define | APPLY_C_PREDICTOR() | 
| #define | APPLY_C_PREDICTOR_24() | 
| #define | APPLY_Y_PREDICTOR() | 
| #define | APPLY_Y_PREDICTOR_24() | 
| #define | OUTPUT_PIXEL_PAIR() | 
Functions | |
| static void | select_delta_tables (TrueMotion1Context *s, int delta_table_index) | 
| static int | make_ydt15_entry (int p1, int p2, int16_t *ydt) | 
| static int | make_cdt15_entry (int p1, int p2, int16_t *cdt) | 
| static int | make_ydt16_entry (int p1, int p2, int16_t *ydt) | 
| static int | make_cdt16_entry (int p1, int p2, int16_t *cdt) | 
| static int | make_ydt24_entry (int p1, int p2, int16_t *ydt) | 
| static int | make_cdt24_entry (int p1, int p2, int16_t *cdt) | 
| static void | gen_vector_table15 (TrueMotion1Context *s, const uint8_t *sel_vector_table) | 
| static void | gen_vector_table16 (TrueMotion1Context *s, const uint8_t *sel_vector_table) | 
| static void | gen_vector_table24 (TrueMotion1Context *s, const uint8_t *sel_vector_table) | 
| static int | truemotion1_decode_header (TrueMotion1Context *s) | 
| static av_cold int | truemotion1_decode_init (AVCodecContext *avctx) | 
| static void | truemotion1_decode_16bit (TrueMotion1Context *s) | 
| static void | truemotion1_decode_24bit (TrueMotion1Context *s) | 
| static int | truemotion1_decode_frame (AVCodecContext *avctx, void *data, int *data_size, const uint8_t *buf, int buf_size) | 
| static av_cold int | truemotion1_decode_end (AVCodecContext *avctx) | 
Variables | |
| static const comp_types | compression_types [17] | 
| AVCodec | truemotion1_decoder | 
The TrueMotion v1 decoder presently only decodes 16-bit TM1 data and outputs RGB555 (or RGB565) data. 24-bit TM1 data is not supported yet.
Definition in file truemotion1.c.
| #define ALGO_NOP 0 | 
| #define ALGO_RGB16H 2 | 
Definition at line 103 of file truemotion1.c.
| #define ALGO_RGB16V 1 | 
Definition at line 102 of file truemotion1.c.
| #define ALGO_RGB24H 3 | 
Definition at line 104 of file truemotion1.c.
Referenced by truemotion1_decode_frame(), and truemotion1_decode_header().
| #define APPLY_C_PREDICTOR | ( | ) | 
Value:
if(index > 1023){\ av_log(s->avctx, AV_LOG_ERROR, " index %d went out of bounds\n", index); \ return; \ }\ predictor_pair = s->c_predictor_table[index]; \ horiz_pred += (predictor_pair >> 1); \ if (predictor_pair & 1) { \ GET_NEXT_INDEX() \ if (!index) { \ GET_NEXT_INDEX() \ predictor_pair = s->c_predictor_table[index]; \ horiz_pred += ((predictor_pair >> 1) * 5); \ if (predictor_pair & 1) \ GET_NEXT_INDEX() \ else \ index++; \ } \ } else \ index++;
Definition at line 521 of file truemotion1.c.
Referenced by truemotion1_decode_16bit().
| #define APPLY_C_PREDICTOR_24 | ( | ) | 
Value:
if(index > 1023){\ av_log(s->avctx, AV_LOG_ERROR, " index %d went out of bounds\n", index); \ return; \ }\ predictor_pair = s->c_predictor_table[index]; \ horiz_pred += (predictor_pair >> 1); \ if (predictor_pair & 1) { \ GET_NEXT_INDEX() \ if (!index) { \ GET_NEXT_INDEX() \ predictor_pair = s->fat_c_predictor_table[index]; \ horiz_pred += (predictor_pair >> 1); \ if (predictor_pair & 1) \ GET_NEXT_INDEX() \ else \ index++; \ } \ } else \ index++;
Definition at line 542 of file truemotion1.c.
Referenced by truemotion1_decode_24bit().
| #define APPLY_Y_PREDICTOR | ( | ) | 
Value:
if(index > 1023){\ av_log(s->avctx, AV_LOG_ERROR, " index %d went out of bounds\n", index); \ return; \ }\ predictor_pair = s->y_predictor_table[index]; \ horiz_pred += (predictor_pair >> 1); \ if (predictor_pair & 1) { \ GET_NEXT_INDEX() \ if (!index) { \ GET_NEXT_INDEX() \ predictor_pair = s->y_predictor_table[index]; \ horiz_pred += ((predictor_pair >> 1) * 5); \ if (predictor_pair & 1) \ GET_NEXT_INDEX() \ else \ index++; \ } \ } else \ index++;
Definition at line 564 of file truemotion1.c.
Referenced by truemotion1_decode_16bit().
| #define APPLY_Y_PREDICTOR_24 | ( | ) | 
Value:
if(index > 1023){\ av_log(s->avctx, AV_LOG_ERROR, " index %d went out of bounds\n", index); \ return; \ }\ predictor_pair = s->y_predictor_table[index]; \ horiz_pred += (predictor_pair >> 1); \ if (predictor_pair & 1) { \ GET_NEXT_INDEX() \ if (!index) { \ GET_NEXT_INDEX() \ predictor_pair = s->fat_y_predictor_table[index]; \ horiz_pred += (predictor_pair >> 1); \ if (predictor_pair & 1) \ GET_NEXT_INDEX() \ else \ index++; \ } \ } else \ index++;
Definition at line 585 of file truemotion1.c.
Referenced by truemotion1_decode_24bit().
| #define BLOCK_2x2 0 | 
Definition at line 107 of file truemotion1.c.
Referenced by truemotion1_decode_16bit(), and truemotion1_decode_24bit().
| #define BLOCK_2x4 1 | 
Definition at line 108 of file truemotion1.c.
| #define BLOCK_4x2 2 | 
Definition at line 109 of file truemotion1.c.
Referenced by truemotion1_decode_16bit(), and truemotion1_decode_24bit().
| #define BLOCK_4x4 3 | 
Definition at line 110 of file truemotion1.c.
| #define FLAG_INTERFRAME 8 | 
| #define FLAG_INTERPOLATED 4 | 
| #define FLAG_KEYFRAME 16 | 
Definition at line 79 of file truemotion1.c.
Referenced by truemotion1_decode_16bit(), truemotion1_decode_24bit(), and truemotion1_decode_header().
| #define FLAG_SPRITE 32 | 
| #define GET_NEXT_INDEX | ( | ) | 
Value:
{\
    if (index_stream_index >= s->index_stream_size) { \
        av_log(s->avctx, AV_LOG_INFO, " help! truemotion1 decoder went out of bounds\n"); \
        return; \
    } \
    index = s->index_stream[index_stream_index++] * 4; \
}
Definition at line 512 of file truemotion1.c.
Referenced by truemotion1_decode_16bit(), and truemotion1_decode_24bit().
| #define OUTPUT_PIXEL_PAIR | ( | ) | 
Value:
*current_pixel_pair = *vert_pred + horiz_pred; \
    *vert_pred++ = *current_pixel_pair++;
Definition at line 606 of file truemotion1.c.
Referenced by truemotion1_decode_16bit(), and truemotion1_decode_24bit().
| static void gen_vector_table15 | ( | TrueMotion1Context * | s, | |
| const uint8_t * | sel_vector_table | |||
| ) |  [static] | 
        
| static void gen_vector_table16 | ( | TrueMotion1Context * | s, | |
| const uint8_t * | sel_vector_table | |||
| ) |  [static] | 
        
| static void gen_vector_table24 | ( | TrueMotion1Context * | s, | |
| const uint8_t * | sel_vector_table | |||
| ) |  [static] | 
        
| static int make_cdt15_entry | ( | int | p1, | |
| int | p2, | |||
| int16_t * | cdt | |||
| ) |  [static] | 
        
| static int make_cdt16_entry | ( | int | p1, | |
| int | p2, | |||
| int16_t * | cdt | |||
| ) |  [static] | 
        
| static int make_cdt24_entry | ( | int | p1, | |
| int | p2, | |||
| int16_t * | cdt | |||
| ) |  [static] | 
        
| static int make_ydt15_entry | ( | int | p1, | |
| int | p2, | |||
| int16_t * | ydt | |||
| ) |  [static] | 
        
| static int make_ydt16_entry | ( | int | p1, | |
| int | p2, | |||
| int16_t * | ydt | |||
| ) |  [static] | 
        
| static int make_ydt24_entry | ( | int | p1, | |
| int | p2, | |||
| int16_t * | ydt | |||
| ) |  [static] | 
        
| static void select_delta_tables | ( | TrueMotion1Context * | s, | |
| int | delta_table_index | |||
| ) |  [static] | 
        
| static void truemotion1_decode_16bit | ( | TrueMotion1Context * | s | ) |  [static] | 
        
| static void truemotion1_decode_24bit | ( | TrueMotion1Context * | s | ) |  [static] | 
        
| static av_cold int truemotion1_decode_end | ( | AVCodecContext * | avctx | ) |  [static] | 
        
Definition at line 896 of file truemotion1.c.
| static int truemotion1_decode_frame | ( | AVCodecContext * | avctx, | |
| void * | data, | |||
| int * | data_size, | |||
| const uint8_t * | buf, | |||
| int | buf_size | |||
| ) |  [static] | 
        
Definition at line 863 of file truemotion1.c.
| static int truemotion1_decode_header | ( | TrueMotion1Context * | s | ) |  [static] | 
        
| static av_cold int truemotion1_decode_init | ( | AVCodecContext * | avctx | ) |  [static] | 
        
Definition at line 464 of file truemotion1.c.
const comp_types compression_types[17] [static]           | 
        
Initial value:
 {
    { ALGO_NOP,    0, 0, 0 },
    { ALGO_RGB16V, 4, 4, BLOCK_4x4 },
    { ALGO_RGB16H, 4, 4, BLOCK_4x4 },
    { ALGO_RGB16V, 4, 2, BLOCK_4x2 },
    { ALGO_RGB16H, 4, 2, BLOCK_4x2 },
    { ALGO_RGB16V, 2, 4, BLOCK_2x4 },
    { ALGO_RGB16H, 2, 4, BLOCK_2x4 },
    { ALGO_RGB16V, 2, 2, BLOCK_2x2 },
    { ALGO_RGB16H, 2, 2, BLOCK_2x2 },
    { ALGO_NOP,    4, 4, BLOCK_4x4 },
    { ALGO_RGB24H, 4, 4, BLOCK_4x4 },
    { ALGO_NOP,    4, 2, BLOCK_4x2 },
    { ALGO_RGB24H, 4, 2, BLOCK_4x2 },
    { ALGO_NOP,    2, 4, BLOCK_2x4 },
    { ALGO_RGB24H, 2, 4, BLOCK_2x4 },
    { ALGO_NOP,    2, 2, BLOCK_2x2 },
    { ALGO_RGB24H, 2, 2, BLOCK_2x2 }
}
Definition at line 120 of file truemotion1.c.
Initial value:
 {
    "truemotion1",
    CODEC_TYPE_VIDEO,
    CODEC_ID_TRUEMOTION1,
    sizeof(TrueMotion1Context),
    truemotion1_decode_init,
    NULL,
    truemotion1_decode_end,
    truemotion1_decode_frame,
    CODEC_CAP_DR1,
    .long_name = NULL_IF_CONFIG_SMALL("Duck TrueMotion 1.0"),
}
Definition at line 908 of file truemotion1.c.
 1.5.8