[FFmpeg-devel] [PATCH] Indeo5 decoder

Diego Biurrun diego
Fri Mar 27 17:31:16 CET 2009


On Fri, Mar 27, 2009 at 04:41:18PM +0100, Maxim wrote:
> 
> Any further reviews plz!

Your patch is missing a documentation and changelog update.

> --- libavcodec/indeo5.c	(Revision 0)
> +++ libavcodec/indeo5.c	(Revision 0)
> @@ -0,0 +1,846 @@
> +
> +/**
> + * @file indeo5.c

Add the subdirectory prefix, i.e. libavcodec/.

> + * This is an open-source decoder for Indeo Video Interactive v5

I think stating that it is open source is redundant within FFmpeg
doxygen documentation.

> +    RVMapDesc       rvmap_tabs[9]; ///< local changeable copy of the static rvmap tables
> +    IVIPlaneDesc    planes[3]; ///< color planes
> +    uint32_t        frame_type;
> +    uint32_t        prev_frame_type; ///< frame type of the previous frame
> +    uint32_t        frame_num;
> +    uint32_t        pic_hdr_size; ///< picture header size in bytes
> +    uint8_t         frame_flags;
> +    uint16_t        check_sum; ///< frame checksum
> +
> +    int16_t         mb_huff_sel; ///< MB huffman table selector
> +    IVIHuffDesc     mb_huff_desc; ///< MB table descriptor associated with the selector above
> +    VLC             *mb_vlc; ///< ptr to the vlc table for decoding macroblock data
> +    VLC             mb_vlc_cust; ///< custom macroblock vlc table

The comments could be vertically aligned.

> +static uint16_t     deq8x8_intra[5][24][64]; ///< dequant tables for intra blocks 8x8
> +static uint16_t     deq8x8_inter[5][24][64]; ///< dequant tables for inter blocks 8x8
> +static uint16_t     deq4x4_intra[24][16]; ///< dequant tables for intra blocks 4x4
> +static uint16_t     deq4x4_inter[24][16]; ///< dequant tables for inter blocks 4x4

ditto

> +static av_cold void ivi5_build_dequant_tables ()

Leave out the space before the ( to conform with K&R, same below.

Functions without parameters should have 'void' as parameter list.

> +/**
> + *  decode indeo5 GOP (Group of pictures) header
> + *  this header is present in key frames only
> + *  it defines parameters for all frames in a GOP

Please capitalize sentences and end them in periods.  This reads awkward
because it is not clear where sentences begin and end.  same below.

> +                av_log(avctx,AV_LOG_ERROR,"Extended transform info encountered!\n");
> +            if (get_bits(&ctx->gb,2)) {
> +                av_log(avctx,AV_LOG_ERROR,"End marker missing!\n");

I would place spaces after the commas.  It makes the code easier to read
and conforms to K&R.  Also, you inconsistently do it in some places, but
not in others.  Please do it everywhere.

> +/**
> + *  decode info (block type, cbp, quant delta, motion vector) for all macroblocks in the current tile

needlessly long line

> +static int ivi5_decode_mb_info (IVI5DecContext *ctx, IVIBandDesc *band, IVITile *tile, AVCodecContext *avctx)

ditto and same in other places

> +    mb = tile->mbs;
> +    ref_mb = tile->ref_mbs;
> +    offs = tile->ypos * band->pitch + tile->xpos;
> +    mv_x = mv_y = 0;
> +    mv_scale = (ctx->planes[0].bands[0].mb_size >> 3) - (band->mb_size >> 3); /* factor for motion vector scaling */

Some of this could be aligned.

> +static av_cold int ivi5_decode_init(AVCodecContext *avctx)

BTW, is the ivi5 prefix necessary on all those functions?

> +static int ivi5_decode_frame(AVCodecContext *avctx,
> +                               void *data, int *data_size,
> +                               const uint8_t *buf, int buf_size)

weird indentation


> +AVCodec indeo5_decoder = {
> +    .name = "indeo5",
> +    .type = CODEC_TYPE_VIDEO,
> +    .id = CODEC_ID_INDEO5,
> +    .priv_data_size = sizeof(IVI5DecContext),
> +    .init = ivi5_decode_init,
> +    .close = ivi5_decode_close,
> +    .decode = ivi5_decode_frame,
> +    .long_name = NULL_IF_CONFIG_SMALL("Intel Indeo Video Interactive 5"),

This could be aligned.

> --- libavcodec/ivi_common.c	(Revision 0)
> +++ libavcodec/ivi_common.c	(Revision 0)
> @@ -0,0 +1,1453 @@
> +/*
> + * Common functions for Indeo Video Interactive codecs (indeo4.c and indeo5.c)

Leave out the filenames, they have a tendency to be overlooked when
files get moved around.

> +/**
> + * @file ivi_common.c

directory prefix

> +            mb->xpos = x;
> +            mb->ypos = y;
> +            mb->buf_offs = mb_offset;
> +
> +            mb->type = 1; /* set the macroblocks type = INTER */
> +            mb->cbp = 0; /* all blocks are empty */
> +
> +            if (!band->qdelta_present && band->plane == 0 && band->band_num == 0) {
> +                mb->q_delta = band->glob_quant;
> +                mb->mv_x = 0;
> +                mb->mv_y = 0;

align

> +const IVIHuffDesc blk_huff_desc[8] = {
[...]

All these tables could profit from being aligned.

> --- libavcodec/ivi_common.h	(Revision 0)
> +++ libavcodec/ivi_common.h	(Revision 0)
> @@ -0,0 +1,195 @@
> +/*
> + * Common functions for Indeo Video Interactive codecs (indeo4.c and indeo5.c)

see above about file names

> +/**
> + * @file ivi_common.h

directory prefix

> + * This file contains structures and macros shared by both Indeo4 and Indeo5 decoders.
> + */
> +
> +#ifndef AVCODEC_IVI_COMMON_H
> +#define AVCODEC_IVI_COMMON_H
> +
> +#include <stdint.h>
> +
> +typedef struct {
> +    int16_t     xpos;
> +    int16_t     ypos;
> +    uint32_t    buf_offs; ///< address in the output buffer for this mb
> +    uint8_t     type; ///< macroblock type
> +    uint8_t     cbp; ///< coded block pattern
> +    uint8_t     q_delta; ///< quant delta
> +    int8_t      mv_x; ///< motion vector (x component)
> +    int8_t      mv_y; ///< motion vector (y component)

The comments could be aligned, same below.

> +/**
> + *  this structure a color plane (luma or chroma)

this sentence no verb

> +static inline int ivi_pic_config_cmp(IVIPicConfig *str1, IVIPicConfig *str2)
> +{
> +    return (str1->pic_width    != str2->pic_width    || str1->pic_height    != str2->pic_height ||
> +            str1->chroma_width != str2->chroma_width || str1->chroma_height != str2->chroma_height ||
> +            str1->tile_width   != str2->tile_width   || str1->tile_height   != str2->tile_height ||
> +            str1->luma_bands   != str2->luma_bands   || str1->chroma_bands  != str2->chroma_bands);

The || could be aligned.

> --- libavcodec/indeo5data.h	(Revision 0)
> +++ libavcodec/indeo5data.h	(Revision 0)
> @@ -0,0 +1,211 @@
> +
> +/**
> + * @file indeo5data.h

directory prefix

> +} ivi5_common_pic_sizes[15] = {{640, 480}, {320, 240}, {160, 120}, {704, 480}, {352, 240}, {352, 288}, {176, 144},
> +                          {240, 180}, {640, 240}, {704, 240}, {80, 60}, {88, 72}, {0, 0}, {0, 0}, {0, 0}};

This could be aligned.

Diego



More information about the ffmpeg-devel mailing list