Commit 3485332b authored by Kieran Kunhya's avatar Kieran Kunhya

avcodec: Cineform HD Decoder

Decodes YUV 4:2:2 10-bit and RGB 12-bit files.
Older files with more subbands, skips, Bayer, alpha not supported.
Alpha requires addition of GBRAP12 pixel format.
parent 31f5fa21
......@@ -210,6 +210,7 @@ OBJS-$(CONFIG_CAVS_DECODER) += cavs.o cavsdec.o cavsdsp.o \
OBJS-$(CONFIG_CCAPTION_DECODER) += ccaption_dec.o
OBJS-$(CONFIG_CDGRAPHICS_DECODER) += cdgraphics.o
OBJS-$(CONFIG_CDXL_DECODER) += cdxl.o
OBJS-$(CONFIG_CFHD_DECODER) += cfhd.o cfhddata.o
OBJS-$(CONFIG_CINEPAK_DECODER) += cinepak.o
OBJS-$(CONFIG_CINEPAK_ENCODER) += cinepakenc.o elbg.o
OBJS-$(CONFIG_CLJR_DECODER) += cljrdec.o
......
......@@ -148,6 +148,7 @@ void avcodec_register_all(void)
REGISTER_DECODER(CAVS, cavs);
REGISTER_DECODER(CDGRAPHICS, cdgraphics);
REGISTER_DECODER(CDXL, cdxl);
REGISTER_DECODER(CFHD, cfhd);
REGISTER_ENCDEC (CINEPAK, cinepak);
REGISTER_ENCDEC (CLJR, cljr);
REGISTER_DECODER(CLLC, cllc);
......
......@@ -315,6 +315,7 @@ enum AVCodecID {
AV_CODEC_ID_SMVJPEG,
AV_CODEC_ID_APNG,
AV_CODEC_ID_DAALA,
AV_CODEC_ID_CFHD,
/* various PCM "codecs" */
AV_CODEC_ID_FIRST_AUDIO = 0x10000, ///< A dummy id pointing at the start of audio codecs
......
This diff is collapsed.
/*
* Copyright (c) 2015 Kieran Kunhya
*
* This file is part of FFmpeg.
*
* FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* FFmpeg is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef AVCODEC_CFHD_H
#define AVCODEC_CFHD_H
#include <stdint.h>
#include "libavutil/avassert.h"
#include "avcodec.h"
#include "get_bits.h"
#define VLC_BITS 9
#define NB_VLC_TABLE_9 (71+3)
#define NB_VLC_TABLE_18 (263+1)
typedef struct CFHD_RL_VLC_ELEM {
int16_t level;
int8_t len;
uint16_t run;
} CFHD_RL_VLC_ELEM;
#define DWT_LEVELS 3
typedef struct SubBand {
int level;
int orientation;
int stride;
int a_width;
int width;
int a_height;
int height;
int pshift;
int quant;
uint8_t *ibuf;
} SubBand;
typedef struct Plane {
int width;
int height;
ptrdiff_t stride;
int16_t *idwt_buf;
int16_t *idwt_tmp;
/* TODO: merge this into SubBand structure */
int16_t *subband[10];
int16_t *l_h[8];
SubBand band[DWT_LEVELS][4];
} Plane;
typedef struct CFHDContext {
AVCodecContext *avctx;
CFHD_RL_VLC_ELEM table_9_rl_vlc[2088];
VLC vlc_9;
CFHD_RL_VLC_ELEM table_18_rl_vlc[4572];
VLC vlc_18;
GetBitContext gb;
int chroma_x_shift;
int chroma_y_shift;
int coded_width;
int coded_height;
int a_width;
int a_height;
int bpc;
int channel_cnt;
int subband_cnt;
int channel_num;
uint8_t lowpass_precision;
uint16_t quantisation;
int wavelet_depth;
int pshift;
int codebook;
int subband_num;
int level;
int subband_num_actual;
uint8_t prescale_shift[3];
Plane plane[4];
} CFHDContext;
int ff_cfhd_init_vlcs(CFHDContext *s);
#endif /* AVCODEC_CFHD_H */
This diff is collapsed.
......@@ -1521,6 +1521,13 @@ static const AVCodecDescriptor codec_descriptors[] = {
.props = AV_CODEC_PROP_LOSSLESS,
.mime_types= MT("image/png"),
},
{
.id = AV_CODEC_ID_CFHD,
.type = AVMEDIA_TYPE_VIDEO,
.name = "cfhd",
.long_name = NULL_IF_CONFIG_SMALL("Cineform HD"),
.props = AV_CODEC_PROP_LOSSY,
},
/* various PCM "codecs" */
{
......
......@@ -413,6 +413,7 @@ const AVCodecTag ff_codec_bmp_tags[] = {
{ AV_CODEC_ID_SCREENPRESSO, MKTAG('S', 'P', 'V', '1') },
{ AV_CODEC_ID_RSCC, MKTAG('R', 'S', 'C', 'C') },
{ AV_CODEC_ID_RSCC, MKTAG('I', 'S', 'C', 'C') },
{ AV_CODEC_ID_CFHD, MKTAG('C', 'F', 'H', 'D') },
{ AV_CODEC_ID_NONE, 0 }
};
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment