[FFmpeg-devel] [PATCH] CrystalHD decoder support v3

Philip Langdale philipl
Tue Feb 1 06:35:50 CET 2011


On Mon, 31 Jan 2011 23:17:31 +0100
Diego Biurrun <diego at biurrun.de> wrote:

> On Sun, Jan 30, 2011 at 06:53:08PM -0800, Philip Langdale wrote:
> > 
> > --- a/configure
> > +++ b/configure
> > @@ -1212,6 +1213,13 @@ binkaudio_dct_decoder_select="mdct rdft dct"
> >  binkaudio_rdft_decoder_select="mdct rdft"
> >  cavs_decoder_select="golomb"
> >  cook_decoder_select="mdct"
> > +h264_crystalhd_decoder_select="crystalhd"
> > +mpeg1_crystalhd_decoder_select="crystalhd"
> > +mpeg2_crystalhd_decoder_select="crystalhd"
> > +mpeg4_crystalhd_decoder_select="crystalhd"
> > +msmpeg4_crystalhd_decoder_select="crystalhd"
> > +vc1_crystalhd_decoder_select="crystalhd"
> > +wmv3_crystalhd_decoder_select="crystalhd"
> >  cscd_decoder_suggest="zlib"
> >  dca_decoder_select="mdct"
> >  dnxhd_encoder_select="aandct"
> 
> alphabetical order
> 
> > --- a/libavcodec/allcodecs.c
> > +++ b/libavcodec/allcodecs.c
> > @@ -86,6 +86,13 @@ void avcodec_register_all(void)
> >      REGISTER_DECODER (CDGRAPHICS, cdgraphics);
> >      REGISTER_DECODER (CINEPAK, cinepak);
> >      REGISTER_DECODER (CLJR, cljr);
> > +    REGISTER_DECODER (H264_CRYSTALHD, h264_crystalhd);
> > +    REGISTER_DECODER (MPEG1_CRYSTALHD, mpeg1_crystalhd);
> > +    REGISTER_DECODER (MPEG2_CRYSTALHD, mpeg2_crystalhd);
> > +    REGISTER_DECODER (MPEG4_CRYSTALHD, mpeg4_crystalhd);
> > +    REGISTER_DECODER (MSMPEG4_CRYSTALHD, msmpeg4_crystalhd);
> > +    REGISTER_DECODER (VC1_CRYSTALHD, vc1_crystalhd);
> > +    REGISTER_DECODER (WMV3_CRYSTALHD, wmv3_crystalhd);
> >      REGISTER_DECODER (CSCD, cscd);
> >      REGISTER_DECODER (CYUV, cyuv);
> 
> alphabetical order

Will move these.

> > --- /dev/null
> > +++ b/libavcodec/crystalhd.c
> > @@ -0,0 +1,903 @@
> > +
> > +typedef enum CopyRet CopyRet;
> > +
> > +typedef struct OpaqueList OpaqueList;
> 
> I hate such typedefs - IMO just use the struct...
> 
> > +static inline int extract_sps_pps_from_avcc(CHDContext *priv,
> > +                                            uint8_t *data,
> > +                                            uint32_t data_size)
> > +{
> > +    int profile;
> > +    unsigned int nal_size;
> > +    unsigned int num_sps, num_pps;
> > +
> > +    if (*data == 1) {
> > +        priv->is_nal = 1;
> > +        priv->nal_length_size = (data[4] & 0x03) + 1;
> > +    } else {
> > +        priv->is_nal = 0;
> > +        priv->nal_length_size = 4;
> > +        return 0;
> 
> nit: align the =, same in other places

In the case of these formatting items, can I assume that vp8.c is a
valid example? 

> > +static inline void *memcpy_pic(void *dst, const void *src,
> > +                               int bytesPerLine, int height,
> > +                               int dstStride, int srcStride)
> > +{
> > +    int i;
> > +    void *retval = dst;
> > +
> > +    for(i = 0; i < height; i++) {
> 
> for (

Will fix.

> > +static av_cold int init(AVCodecContext *avctx)
> > +{
> > +    CHDContext* priv;
> > +    BC_INPUT_FORMAT format;
> > +    BC_STATUS ret;
> > +
> > +    memset(&format, 0, sizeof(BC_INPUT_FORMAT));
> > +    format.FGTEnable = FALSE;
> > +    format.Progressive = TRUE;
> > +    format.OptFlags = 0x80000000 | vdecFrameRate59_94 | 0x40;
> > +    format.width = avctx->width;
> > +    format.height = avctx->height;
> 
> BC_INPUT_FORMAT format = { 0 };
> 
> instead of the memset seems nicer.

Good point. Will do.

Thanks,

--phil



More information about the ffmpeg-devel mailing list