libavcodec/mpeg12.c File Reference

MPEG-1/2 decoder. More...

#include "internal.h"
#include "avcodec.h"
#include "dsputil.h"
#include "mpegvideo.h"
#include "libavutil/avassert.h"
#include "mpeg12.h"
#include "mpeg12data.h"
#include "mpeg12decdata.h"
#include "bytestream.h"
#include "vdpau_internal.h"
#include "xvmc_internal.h"
#include "thread.h"

Go to the source code of this file.

Defines

#define UNCHECKED_BITSTREAM_READER   1
#define MV_VLC_BITS   9
#define MBINCR_VLC_BITS   9
#define MB_PAT_VLC_BITS   9
#define MB_PTYPE_VLC_BITS   6
#define MB_BTYPE_VLC_BITS   6
#define INIT_2D_VLC_RL(rl, static_size)
#define MT_FIELD   1
#define MT_FRAME   2
#define MT_16X8   2
#define MT_DMV   3
#define DECODE_SLICE_ERROR   -1
#define DECODE_SLICE_OK   0

Functions

static int mpeg_decode_motion (MpegEncContext *s, int fcode, int pred)
static int mpeg1_decode_block_intra (MpegEncContext *s, DCTELEM *block, int n)
int ff_mpeg1_decode_block_intra (MpegEncContext *s, DCTELEM *block, int n)
static int mpeg1_decode_block_inter (MpegEncContext *s, DCTELEM *block, int n)
static int mpeg1_fast_decode_block_inter (MpegEncContext *s, DCTELEM *block, int n)
static int mpeg2_decode_block_non_intra (MpegEncContext *s, DCTELEM *block, int n)
static int mpeg2_fast_decode_block_non_intra (MpegEncContext *s, DCTELEM *block, int n)
static int mpeg2_decode_block_intra (MpegEncContext *s, DCTELEM *block, int n)
static int mpeg2_fast_decode_block_intra (MpegEncContext *s, DCTELEM *block, int n)
static void init_2d_vlc_rl (RLTable *rl)
void ff_mpeg12_common_init (MpegEncContext *s)
void ff_mpeg1_clean_buffers (MpegEncContext *s)
av_cold void ff_mpeg12_init_vlcs (void)
static int get_dmv (MpegEncContext *s)
static int get_qscale (MpegEncContext *s)
static void exchange_uv (MpegEncContext *s)
static int mpeg_decode_mb (MpegEncContext *s, DCTELEM block[12][64])
static av_cold int mpeg_decode_init (AVCodecContext *avctx)
static int mpeg_decode_update_thread_context (AVCodecContext *avctx, const AVCodecContext *avctx_from)
static void quant_matrix_rebuild (uint16_t *matrix, const uint8_t *old_perm, const uint8_t *new_perm)
static int uses_vdpau (AVCodecContext *avctx)
static enum PixelFormat mpeg_get_pixelformat (AVCodecContext *avctx)
static int mpeg_decode_postinit (AVCodecContext *avctx)
static int mpeg1_decode_picture (AVCodecContext *avctx, const uint8_t *buf, int buf_size)
static void mpeg_decode_sequence_extension (Mpeg1Context *s1)
static void mpeg_decode_sequence_display_extension (Mpeg1Context *s1)
static void mpeg_decode_picture_display_extension (Mpeg1Context *s1)
static int load_matrix (MpegEncContext *s, uint16_t matrix0[64], uint16_t matrix1[64], int intra)
static void mpeg_decode_quant_matrix_extension (MpegEncContext *s)
static void mpeg_decode_picture_coding_extension (Mpeg1Context *s1)
static int mpeg_field_start (MpegEncContext *s, const uint8_t *buf, int buf_size)
static int mpeg_decode_slice (MpegEncContext *s, int mb_y, const uint8_t **buf, int buf_size)
 Decode a slice.
static int slice_decode_thread (AVCodecContext *c, void *arg)
static int slice_end (AVCodecContext *avctx, AVFrame *pict)
 Handle slice ends.
static int mpeg1_decode_sequence (AVCodecContext *avctx, const uint8_t *buf, int buf_size)
static int vcr2_init_sequence (AVCodecContext *avctx)
static void mpeg_decode_user_data (AVCodecContext *avctx, const uint8_t *p, int buf_size)
static void mpeg_decode_gop (AVCodecContext *avctx, const uint8_t *buf, int buf_size)
int ff_mpeg1_find_frame_end (ParseContext *pc, const uint8_t *buf, int buf_size, AVCodecParserContext *s)
 Find the end of the current frame in the bitstream.
static int decode_chunks (AVCodecContext *avctx, AVFrame *picture, int *data_size, const uint8_t *buf, int buf_size)
static int mpeg_decode_frame (AVCodecContext *avctx, void *data, int *data_size, AVPacket *avpkt)
static void flush (AVCodecContext *avctx)
static int mpeg_decode_end (AVCodecContext *avctx)

Variables

static VLC mv_vlc
uint8_t ff_mpeg12_static_rl_table_store [2][2][2 *MAX_RUN+MAX_LEVEL+3]
VLC ff_dc_lum_vlc
VLC ff_dc_chroma_vlc
static VLC mbincr_vlc
static VLC mb_ptype_vlc
static VLC mb_btype_vlc
static VLC mb_pat_vlc
static enum PixelFormat mpeg1_hwaccel_pixfmt_list_420 []
static enum PixelFormat mpeg2_hwaccel_pixfmt_list_420 []
static const AVProfile mpeg2_video_profiles []
AVCodec ff_mpeg1video_decoder
AVCodec ff_mpeg2video_decoder
AVCodec ff_mpegvideo_decoder


Detailed Description

MPEG-1/2 decoder.

Definition in file mpeg12.c.


Define Documentation

#define DECODE_SLICE_ERROR   -1

Definition at line 1654 of file mpeg12.c.

Referenced by mpeg_decode_slice().

#define DECODE_SLICE_OK   0

Definition at line 1655 of file mpeg12.c.

Referenced by mpeg_decode_slice().

#define INIT_2D_VLC_RL ( rl,
static_size   ) 

Value:

{\
    static RL_VLC_ELEM rl_vlc_table[static_size];\
    INIT_VLC_STATIC(&rl.vlc, TEX_VLC_BITS, rl.n + 2,\
                    &rl.table_vlc[0][1], 4, 2,\
                    &rl.table_vlc[0][0], 4, 2, static_size);\
\
    rl.rl_vlc[0] = rl_vlc_table;\
    init_2d_vlc_rl(&rl);\
}

Definition at line 598 of file mpeg12.c.

Referenced by ff_mpeg12_init_vlcs().

#define MB_BTYPE_VLC_BITS   6

Definition at line 53 of file mpeg12.c.

Referenced by ff_mpeg12_init_vlcs(), and mpeg_decode_mb().

#define MB_PAT_VLC_BITS   9

Definition at line 51 of file mpeg12.c.

Referenced by ff_mpeg12_init_vlcs(), and mpeg_decode_mb().

#define MB_PTYPE_VLC_BITS   6

Definition at line 52 of file mpeg12.c.

Referenced by ff_mpeg12_init_vlcs(), and mpeg_decode_mb().

#define MBINCR_VLC_BITS   9

Definition at line 50 of file mpeg12.c.

Referenced by ff_mpeg12_init_vlcs(), and mpeg_decode_slice().

#define MT_16X8   2

Definition at line 737 of file mpeg12.c.

#define MT_DMV   3

Definition at line 738 of file mpeg12.c.

Referenced by mpeg_decode_mb().

#define MT_FIELD   1

Definition at line 735 of file mpeg12.c.

Referenced by mpeg_decode_mb().

#define MT_FRAME   2

Definition at line 736 of file mpeg12.c.

Referenced by mpeg_decode_mb().

#define MV_VLC_BITS   9

Definition at line 49 of file mpeg12.c.

#define UNCHECKED_BITSTREAM_READER   1

Definition at line 28 of file mpeg12.c.


Function Documentation

static int decode_chunks ( AVCodecContext avctx,
AVFrame picture,
int *  data_size,
const uint8_t *  buf,
int  buf_size 
) [static]

Definition at line 2294 of file mpeg12.c.

Referenced by mpeg_decode_frame().

static void exchange_uv ( MpegEncContext s  )  [static]

Definition at line 725 of file mpeg12.c.

Referenced by mpeg_decode_mb(), and vcr2_init_sequence().

void ff_mpeg12_common_init ( MpegEncContext s  ) 

Definition at line 642 of file mpeg12.c.

Referenced by ff_mpeg1_encode_init(), and mpeg_decode_init().

av_cold void ff_mpeg12_init_vlcs ( void   ) 

Definition at line 670 of file mpeg12.c.

Referenced by decode_init(), mpeg_decode_init(), and tqi_decode_init().

void ff_mpeg1_clean_buffers ( MpegEncContext s  ) 

Definition at line 650 of file mpeg12.c.

Referenced by encode_thread(), and mpeg_decode_slice().

int ff_mpeg1_decode_block_intra ( MpegEncContext s,
DCTELEM block,
int  n 
)

Definition at line 157 of file mpeg12.c.

Referenced by tqi_decode_mb().

int ff_mpeg1_find_frame_end ( ParseContext pc,
const uint8_t *  buf,
int  buf_size,
AVCodecParserContext s 
)

Find the end of the current frame in the bitstream.

Returns:
the position of the first byte of the next frame, or -1

Definition at line 2183 of file mpeg12.c.

Referenced by mpeg_decode_frame(), and mpegvideo_parse().

static void flush ( AVCodecContext avctx  )  [static]

Definition at line 2533 of file mpeg12.c.

static int get_dmv ( MpegEncContext s  )  [inline, static]

Definition at line 707 of file mpeg12.c.

Referenced by mpeg_decode_mb().

static int get_qscale ( MpegEncContext s  )  [inline, static]

static void init_2d_vlc_rl ( RLTable rl  )  [static]

Definition at line 609 of file mpeg12.c.

static int load_matrix ( MpegEncContext s,
uint16_t  matrix0[64],
uint16_t  matrix1[64],
int  intra 
) [static]

Definition at line 1487 of file mpeg12.c.

static int mpeg1_decode_block_inter ( MpegEncContext s,
DCTELEM block,
int  n 
) [inline, static]

Definition at line 162 of file mpeg12.c.

Referenced by mpeg_decode_mb().

static int mpeg1_decode_block_intra ( MpegEncContext s,
DCTELEM block,
int  n 
) [inline, static]

Definition at line 86 of file mpeg12.c.

Referenced by ff_mpeg1_decode_block_intra(), and mpeg_decode_mb().

static int mpeg1_decode_picture ( AVCodecContext avctx,
const uint8_t *  buf,
int  buf_size 
) [static]

Definition at line 1351 of file mpeg12.c.

Referenced by decode_chunks().

static int mpeg1_decode_sequence ( AVCodecContext avctx,
const uint8_t *  buf,
int  buf_size 
) [static]

Definition at line 1973 of file mpeg12.c.

Referenced by decode_chunks().

static int mpeg1_fast_decode_block_inter ( MpegEncContext s,
DCTELEM block,
int  n 
) [inline, static]

Definition at line 237 of file mpeg12.c.

Referenced by mpeg_decode_mb().

static int mpeg2_decode_block_intra ( MpegEncContext s,
DCTELEM block,
int  n 
) [inline, static]

Definition at line 450 of file mpeg12.c.

Referenced by mpeg_decode_mb().

static int mpeg2_decode_block_non_intra ( MpegEncContext s,
DCTELEM block,
int  n 
) [inline, static]

Definition at line 309 of file mpeg12.c.

Referenced by mpeg_decode_mb().

static int mpeg2_fast_decode_block_intra ( MpegEncContext s,
DCTELEM block,
int  n 
) [inline, static]

Definition at line 528 of file mpeg12.c.

Referenced by mpeg_decode_mb().

static int mpeg2_fast_decode_block_non_intra ( MpegEncContext s,
DCTELEM block,
int  n 
) [inline, static]

Definition at line 388 of file mpeg12.c.

Referenced by mpeg_decode_mb().

static int mpeg_decode_end ( AVCodecContext avctx  )  [static]

Definition at line 2542 of file mpeg12.c.

static int mpeg_decode_frame ( AVCodecContext avctx,
void *  data,
int *  data_size,
AVPacket avpkt 
) [static]

Definition at line 2248 of file mpeg12.c.

static void mpeg_decode_gop ( AVCodecContext avctx,
const uint8_t *  buf,
int  buf_size 
) [static]

Definition at line 2149 of file mpeg12.c.

Referenced by decode_chunks().

static av_cold int mpeg_decode_init ( AVCodecContext avctx  )  [static]

Definition at line 1117 of file mpeg12.c.

static int mpeg_decode_mb ( MpegEncContext s,
DCTELEM  block[12][64] 
) [static]

Definition at line 740 of file mpeg12.c.

Referenced by mpeg_decode_slice().

static int mpeg_decode_motion ( MpegEncContext s,
int  fcode,
int  pred 
) [static]

Definition at line 58 of file mpeg12.c.

Referenced by mpeg_decode_mb().

static void mpeg_decode_picture_coding_extension ( Mpeg1Context s1  )  [static]

Definition at line 1519 of file mpeg12.c.

Referenced by decode_chunks().

static void mpeg_decode_picture_display_extension ( Mpeg1Context s1  )  [static]

Definition at line 1454 of file mpeg12.c.

Referenced by decode_chunks().

static int mpeg_decode_postinit ( AVCodecContext avctx  )  [static]

Definition at line 1241 of file mpeg12.c.

Referenced by decode_chunks().

static void mpeg_decode_quant_matrix_extension ( MpegEncContext s  )  [static]

Definition at line 1509 of file mpeg12.c.

Referenced by decode_chunks().

static void mpeg_decode_sequence_display_extension ( Mpeg1Context s1  )  [static]

Definition at line 1430 of file mpeg12.c.

Referenced by decode_chunks().

static void mpeg_decode_sequence_extension ( Mpeg1Context s1  )  [static]

Definition at line 1393 of file mpeg12.c.

Referenced by decode_chunks().

static int mpeg_decode_slice ( MpegEncContext s,
int  mb_y,
const uint8_t **  buf,
int  buf_size 
) [static]

Decode a slice.

MpegEncContext.mb_y must be set to the MB row from the startcode.

Returns:
DECODE_SLICE_ERROR if the slice is damaged, DECODE_SLICE_OK if this slice is OK

Definition at line 1663 of file mpeg12.c.

Referenced by decode_chunks(), and slice_decode_thread().

static int mpeg_decode_update_thread_context ( AVCodecContext avctx,
const AVCodecContext avctx_from 
) [static]

Definition at line 1148 of file mpeg12.c.

static void mpeg_decode_user_data ( AVCodecContext avctx,
const uint8_t *  p,
int  buf_size 
) [static]

Definition at line 2113 of file mpeg12.c.

Referenced by decode_chunks().

static int mpeg_field_start ( MpegEncContext s,
const uint8_t *  buf,
int  buf_size 
) [static]

Definition at line 1595 of file mpeg12.c.

Referenced by decode_chunks().

static enum PixelFormat mpeg_get_pixelformat ( AVCodecContext avctx  )  [static]

Definition at line 1216 of file mpeg12.c.

Referenced by vcr2_init_sequence().

static void quant_matrix_rebuild ( uint16_t *  matrix,
const uint8_t *  old_perm,
const uint8_t *  new_perm 
) [static]

Definition at line 1169 of file mpeg12.c.

static int slice_decode_thread ( AVCodecContext c,
void *  arg 
) [static]

Definition at line 1884 of file mpeg12.c.

Referenced by decode_chunks().

static int slice_end ( AVCodecContext avctx,
AVFrame pict 
) [static]

Handle slice ends.

Returns:
1 if it seems to be the last slice

Definition at line 1927 of file mpeg12.c.

Referenced by decode_chunks(), and decode_frame().

static int uses_vdpau ( AVCodecContext avctx  )  [inline, static]

Definition at line 1212 of file mpeg12.c.

Referenced by decode_chunks().

static int vcr2_init_sequence ( AVCodecContext avctx  )  [static]

Definition at line 2053 of file mpeg12.c.

Referenced by mpeg_decode_frame().


Variable Documentation

Definition at line 663 of file mpeg12.c.

Definition at line 662 of file mpeg12.c.

uint8_t ff_mpeg12_static_rl_table_store[2][2][2 *MAX_RUN+MAX_LEVEL+3]

Definition at line 596 of file mpeg12.c.

Referenced by ff_mpeg12_init_vlcs(), and ff_mpeg1_encode_init().

Initial value:

 {
    .name           = "mpeg1video",
    .type           = AVMEDIA_TYPE_VIDEO,
    .id             = CODEC_ID_MPEG1VIDEO,
    .priv_data_size = sizeof(Mpeg1Context),
    .init           = mpeg_decode_init,
    .close          = mpeg_decode_end,
    .decode         = mpeg_decode_frame,
    .capabilities   = CODEC_CAP_DRAW_HORIZ_BAND | CODEC_CAP_DR1 | CODEC_CAP_TRUNCATED | CODEC_CAP_DELAY | CODEC_CAP_SLICE_THREADS,
    .flush          = flush,
    .max_lowres     = 3,
    .long_name      = NULL_IF_CONFIG_SMALL("MPEG-1 video"),
    .update_thread_context = ONLY_IF_THREADS_ENABLED(mpeg_decode_update_thread_context)
}

Definition at line 2564 of file mpeg12.c.

Initial value:

 {
    .name           = "mpeg2video",
    .type           = AVMEDIA_TYPE_VIDEO,
    .id             = CODEC_ID_MPEG2VIDEO,
    .priv_data_size = sizeof(Mpeg1Context),
    .init           = mpeg_decode_init,
    .close          = mpeg_decode_end,
    .decode         = mpeg_decode_frame,
    .capabilities   = CODEC_CAP_DRAW_HORIZ_BAND | CODEC_CAP_DR1 | CODEC_CAP_TRUNCATED | CODEC_CAP_DELAY | CODEC_CAP_SLICE_THREADS,
    .flush          = flush,
    .max_lowres     = 3,
    .long_name      = NULL_IF_CONFIG_SMALL("MPEG-2 video"),
    .profiles       = NULL_IF_CONFIG_SMALL(mpeg2_video_profiles),
}

Definition at line 2579 of file mpeg12.c.

Initial value:

 {
    .name           = "mpegvideo",
    .type           = AVMEDIA_TYPE_VIDEO,
    .id             = CODEC_ID_MPEG2VIDEO,
    .priv_data_size = sizeof(Mpeg1Context),
    .init           = mpeg_decode_init,
    .close          = mpeg_decode_end,
    .decode         = mpeg_decode_frame,
    .capabilities   = CODEC_CAP_DRAW_HORIZ_BAND | CODEC_CAP_DR1 | CODEC_CAP_TRUNCATED | CODEC_CAP_DELAY | CODEC_CAP_SLICE_THREADS,
    .flush          = flush,
    .max_lowres     = 3,
    .long_name      = NULL_IF_CONFIG_SMALL("MPEG-1 video"),
}

Definition at line 2595 of file mpeg12.c.

VLC mb_btype_vlc [static]

Definition at line 667 of file mpeg12.c.

VLC mb_pat_vlc [static]

Definition at line 668 of file mpeg12.c.

VLC mb_ptype_vlc [static]

Definition at line 666 of file mpeg12.c.

VLC mbincr_vlc [static]

Definition at line 665 of file mpeg12.c.

Initial value:

Definition at line 1182 of file mpeg12.c.

Referenced by mpeg_get_pixelformat().

Initial value:

Definition at line 1194 of file mpeg12.c.

Referenced by mpeg_get_pixelformat().

const AVProfile mpeg2_video_profiles[] [static]

Initial value:

 {
    { FF_PROFILE_MPEG2_422,          "4:2:2"              },
    { FF_PROFILE_MPEG2_HIGH,         "High"               },
    { FF_PROFILE_MPEG2_SS,           "Spatially Scalable" },
    { FF_PROFILE_MPEG2_SNR_SCALABLE, "SNR Scalable"       },
    { FF_PROFILE_MPEG2_MAIN,         "Main"               },
    { FF_PROFILE_MPEG2_SIMPLE,       "Simple"             },
    { FF_PROFILE_RESERVED,           "Reserved"           },
    { FF_PROFILE_RESERVED,           "Reserved"           },
    { FF_PROFILE_UNKNOWN },
}

Definition at line 2551 of file mpeg12.c.

VLC mv_vlc [static]

Definition at line 55 of file mpeg12.c.


Generated on Fri Oct 26 02:46:09 2012 for FFmpeg by  doxygen 1.5.8