[FFmpeg-cvslog] cljr: add encoder
Paul B Mahol
git at videolan.org
Fri Dec 9 00:18:55 CET 2011
ffmpeg | branch: master | Paul B Mahol <onemda at gmail.com> | Thu Dec 8 00:05:23 2011 +0000| [e93947b7d845168beb768c988f4e13fe9601d670] | committer: Diego Biurrun
cljr: add encoder
Signed-off-by: Diego Biurrun <diego at biurrun.de>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=e93947b7d845168beb768c988f4e13fe9601d670
---
Changelog | 1 +
doc/general.texi | 2 +-
libavcodec/allcodecs.c | 2 +-
libavcodec/cljr.c | 43 ++++++++++++++++++++++++++-----------------
libavcodec/version.h | 2 +-
libavformat/riff.c | 2 +-
6 files changed, 31 insertions(+), 21 deletions(-)
diff --git a/Changelog b/Changelog
index bfb411e..ab4136a 100644
--- a/Changelog
+++ b/Changelog
@@ -105,6 +105,7 @@ easier to use. The changes are:
- CRI ADX audio format demuxer
- Playstation Portable PMP format demuxer
- PCM format support in OMA demuxer
+- CLJR encoder
version 0.7:
diff --git a/doc/general.texi b/doc/general.texi
index ca9731e..2c74e6d 100644
--- a/doc/general.texi
+++ b/doc/general.texi
@@ -382,7 +382,7 @@ following image formats are supported:
@tab Codec used in Delphine Software International games.
@item Discworld II BMV Video @tab @tab X
@item Cinepak @tab @tab X
- at item Cirrus Logic AccuPak @tab @tab X
+ at item Cirrus Logic AccuPak @tab X @tab X
@tab fourcc: CLJR
@item Creative YUV (CYUV) @tab @tab X
@item DFA @tab @tab X
diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c
index 82023ff..59795b1 100644
--- a/libavcodec/allcodecs.c
+++ b/libavcodec/allcodecs.c
@@ -87,7 +87,7 @@ void avcodec_register_all(void)
REGISTER_DECODER (CAVS, cavs);
REGISTER_DECODER (CDGRAPHICS, cdgraphics);
REGISTER_DECODER (CINEPAK, cinepak);
- REGISTER_DECODER (CLJR, cljr);
+ REGISTER_ENCDEC (CLJR, cljr);
REGISTER_DECODER (CSCD, cscd);
REGISTER_DECODER (CYUV, cyuv);
REGISTER_DECODER (DFA, dfa);
diff --git a/libavcodec/cljr.c b/libavcodec/cljr.c
index 6c7d7b0..dd72082 100644
--- a/libavcodec/cljr.c
+++ b/libavcodec/cljr.c
@@ -25,12 +25,8 @@
*/
#include "avcodec.h"
-#include "dsputil.h"
#include "get_bits.h"
-
-/* Disable the encoder. */
-#undef CONFIG_CLJR_ENCODER
-#define CONFIG_CLJR_ENCODER 0
+#include "put_bits.h"
typedef struct CLJRContext{
AVCodecContext *avctx;
@@ -92,24 +88,35 @@ static int decode_frame(AVCodecContext *avctx,
#if CONFIG_CLJR_ENCODER
static int encode_frame(AVCodecContext *avctx, unsigned char *buf, int buf_size, void *data){
- CLJRContext * const a = avctx->priv_data;
- AVFrame *pict = data;
- AVFrame * const p= (AVFrame*)&a->picture;
- int size;
+ PutBitContext pb;
+ AVFrame *p = data;
+ int x, y;
- *p = *pict;
p->pict_type= AV_PICTURE_TYPE_I;
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);
- while(get_bit_count(&a->pb)&31)
- put_bits(&a->pb, 8, 0);
+ flush_put_bits(&pb);
- size= get_bit_count(&a->pb)/32;
+ emms_c();
- return size*4;
+ return put_bits_count(&pb) / 8;
}
#endif
@@ -165,6 +172,8 @@ AVCodec ff_cljr_encoder = {
.priv_data_size = sizeof(CLJRContext),
.init = encode_init,
.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
diff --git a/libavcodec/version.h b/libavcodec/version.h
index 3918b13..a41234f 100644
--- a/libavcodec/version.h
+++ b/libavcodec/version.h
@@ -21,7 +21,7 @@
#define AVCODEC_VERSION_H
#define LIBAVCODEC_VERSION_MAJOR 53
-#define LIBAVCODEC_VERSION_MINOR 26
+#define LIBAVCODEC_VERSION_MINOR 27
#define LIBAVCODEC_VERSION_MICRO 0
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
diff --git a/libavformat/riff.c b/libavformat/riff.c
index 2a989cd..1161e97 100644
--- a/libavformat/riff.c
+++ b/libavformat/riff.c
@@ -264,7 +264,7 @@ const AVCodecTag ff_codec_bmp_tags[] = {
{ CODEC_ID_TARGA, MKTAG('t', 'g', 'a', ' ') },
{ CODEC_ID_PNG, MKTAG('M', 'P', 'N', 'G') },
{ 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_RPZA, MKTAG('a', 'z', 'p', 'r') },
{ CODEC_ID_RPZA, MKTAG('R', 'P', 'Z', 'A') },
More information about the ffmpeg-cvslog
mailing list