Commit e93947b7 authored by Paul B Mahol's avatar Paul B Mahol Committed by Diego Biurrun

cljr: add encoder

Signed-off-by: 's avatarDiego Biurrun <diego@biurrun.de>
parent 47b20a1d
...@@ -105,6 +105,7 @@ easier to use. The changes are: ...@@ -105,6 +105,7 @@ easier to use. The changes are:
- CRI ADX audio format demuxer - CRI ADX audio format demuxer
- Playstation Portable PMP format demuxer - Playstation Portable PMP format demuxer
- PCM format support in OMA demuxer - PCM format support in OMA demuxer
- CLJR encoder
version 0.7: version 0.7:
......
...@@ -382,7 +382,7 @@ following image formats are supported: ...@@ -382,7 +382,7 @@ following image formats are supported:
@tab Codec used in Delphine Software International games. @tab Codec used in Delphine Software International games.
@item Discworld II BMV Video @tab @tab X @item Discworld II BMV Video @tab @tab X
@item Cinepak @tab @tab X @item Cinepak @tab @tab X
@item Cirrus Logic AccuPak @tab @tab X @item Cirrus Logic AccuPak @tab X @tab X
@tab fourcc: CLJR @tab fourcc: CLJR
@item Creative YUV (CYUV) @tab @tab X @item Creative YUV (CYUV) @tab @tab X
@item DFA @tab @tab X @item DFA @tab @tab X
......
...@@ -87,7 +87,7 @@ void avcodec_register_all(void) ...@@ -87,7 +87,7 @@ void avcodec_register_all(void)
REGISTER_DECODER (CAVS, cavs); REGISTER_DECODER (CAVS, cavs);
REGISTER_DECODER (CDGRAPHICS, cdgraphics); REGISTER_DECODER (CDGRAPHICS, cdgraphics);
REGISTER_DECODER (CINEPAK, cinepak); REGISTER_DECODER (CINEPAK, cinepak);
REGISTER_DECODER (CLJR, cljr); REGISTER_ENCDEC (CLJR, cljr);
REGISTER_DECODER (CSCD, cscd); REGISTER_DECODER (CSCD, cscd);
REGISTER_DECODER (CYUV, cyuv); REGISTER_DECODER (CYUV, cyuv);
REGISTER_DECODER (DFA, dfa); REGISTER_DECODER (DFA, dfa);
......
...@@ -25,12 +25,8 @@ ...@@ -25,12 +25,8 @@
*/ */
#include "avcodec.h" #include "avcodec.h"
#include "dsputil.h"
#include "get_bits.h" #include "get_bits.h"
#include "put_bits.h"
/* Disable the encoder. */
#undef CONFIG_CLJR_ENCODER
#define CONFIG_CLJR_ENCODER 0
typedef struct CLJRContext{ typedef struct CLJRContext{
AVCodecContext *avctx; AVCodecContext *avctx;
...@@ -92,24 +88,35 @@ static int decode_frame(AVCodecContext *avctx, ...@@ -92,24 +88,35 @@ static int decode_frame(AVCodecContext *avctx,
#if CONFIG_CLJR_ENCODER #if CONFIG_CLJR_ENCODER
static int encode_frame(AVCodecContext *avctx, unsigned char *buf, int buf_size, void *data){ static int encode_frame(AVCodecContext *avctx, unsigned char *buf, int buf_size, void *data){
CLJRContext * const a = avctx->priv_data; PutBitContext pb;
AVFrame *pict = data; AVFrame *p = data;
AVFrame * const p= (AVFrame*)&a->picture; int x, y;
int size;
*p = *pict;
p->pict_type= AV_PICTURE_TYPE_I; p->pict_type= AV_PICTURE_TYPE_I;
p->key_frame= 1; p->key_frame= 1;
emms_c(); init_put_bits(&pb, buf, buf_size / 8);
for (y = 0; y < avctx->height; y++) {
uint8_t *luma = &p->data[0][y * p->linesize[0]];
uint8_t *cb = &p->data[1][y * p->linesize[1]];
uint8_t *cr = &p->data[2][y * p->linesize[2]];
for (x = 0; x < avctx->width; x += 4) {
put_bits(&pb, 5, luma[3] >> 3);
put_bits(&pb, 5, luma[2] >> 3);
put_bits(&pb, 5, luma[1] >> 3);
put_bits(&pb, 5, luma[0] >> 3);
luma += 4;
put_bits(&pb, 6, *(cb++) >> 2);
put_bits(&pb, 6, *(cr++) >> 2);
}
}
avpriv_align_put_bits(&a->pb); flush_put_bits(&pb);
while(get_bit_count(&a->pb)&31)
put_bits(&a->pb, 8, 0);
size= get_bit_count(&a->pb)/32; emms_c();
return size*4; return put_bits_count(&pb) / 8;
} }
#endif #endif
...@@ -165,6 +172,8 @@ AVCodec ff_cljr_encoder = { ...@@ -165,6 +172,8 @@ AVCodec ff_cljr_encoder = {
.priv_data_size = sizeof(CLJRContext), .priv_data_size = sizeof(CLJRContext),
.init = encode_init, .init = encode_init,
.encode = encode_frame, .encode = encode_frame,
.long_name = NULL_IF_CONFIG_SMALL("Cirrus Logic AccuPak"), .pix_fmts = (const enum PixelFormat[]) { PIX_FMT_YUV411P,
PIX_FMT_NONE },
.long_name = NULL_IF_CONFIG_SMALL("Cirrus Logic AccuPak"),
}; };
#endif #endif
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
#define AVCODEC_VERSION_H #define AVCODEC_VERSION_H
#define LIBAVCODEC_VERSION_MAJOR 53 #define LIBAVCODEC_VERSION_MAJOR 53
#define LIBAVCODEC_VERSION_MINOR 26 #define LIBAVCODEC_VERSION_MINOR 27
#define LIBAVCODEC_VERSION_MICRO 0 #define LIBAVCODEC_VERSION_MICRO 0
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
......
...@@ -264,7 +264,7 @@ const AVCodecTag ff_codec_bmp_tags[] = { ...@@ -264,7 +264,7 @@ const AVCodecTag ff_codec_bmp_tags[] = {
{ CODEC_ID_TARGA, MKTAG('t', 'g', 'a', ' ') }, { CODEC_ID_TARGA, MKTAG('t', 'g', 'a', ' ') },
{ CODEC_ID_PNG, MKTAG('M', 'P', 'N', 'G') }, { CODEC_ID_PNG, MKTAG('M', 'P', 'N', 'G') },
{ CODEC_ID_PNG, MKTAG('P', 'N', 'G', '1') }, { CODEC_ID_PNG, MKTAG('P', 'N', 'G', '1') },
{ CODEC_ID_CLJR, MKTAG('c', 'l', 'j', 'r') }, { CODEC_ID_CLJR, MKTAG('C', 'L', 'J', 'R') },
{ CODEC_ID_DIRAC, MKTAG('d', 'r', 'a', 'c') }, { CODEC_ID_DIRAC, MKTAG('d', 'r', 'a', 'c') },
{ CODEC_ID_RPZA, MKTAG('a', 'z', 'p', 'r') }, { CODEC_ID_RPZA, MKTAG('a', 'z', 'p', 'r') },
{ CODEC_ID_RPZA, MKTAG('R', 'P', 'Z', 'A') }, { CODEC_ID_RPZA, MKTAG('R', 'P', 'Z', 'A') },
......
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