On Thu, Dec 08, 2011 at 04:35:44AM +0000, Paul B Mahol wrote:
> ---
> Changelog | 1 +
> doc/general.texi | 2 +-
> libavcodec/allcodecs.c | 2 +-
> libavcodec/cljr.c | 50 ++++++++++++++++++++++++++++++-----------------
> libavcodec/version.h | 2 +-
> libavformat/riff.c | 2 +-
> 6 files changed, 37 insertions(+), 22 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
> -@item Cirrus Logic AccuPak @tab @tab X
> +@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..4ac79f4 100644
> --- a/libavcodec/cljr.c
> +++ b/libavcodec/cljr.c
> @@ -25,18 +25,15 @@
> */
>
> #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;
> AVFrame picture;
> } CLJRContext;
>
> +#if CONFIG_CLJR_DECODER
> static int decode_frame(AVCodecContext *avctx,
> void *data, int *data_size,
> AVPacket *avpkt)
> @@ -89,27 +86,39 @@ static int decode_frame(AVCodecContext *avctx,
>
> return buf_size;
> }
> +#endif /* CONFIG_CLJR_DECODER */
>
> #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;
not mandatory but it would look nicer with a space before =
> - emms_c();
> + init_put_bits(&pb, buf, buf_size / 8);
>
> - avpriv_align_put_bits(&a->pb);
> - while(get_bit_count(&a->pb)&31)
> - put_bits(&a->pb, 8, 0);
> + 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);
> + }
> + }
>
> - size= get_bit_count(&a->pb)/32;
> + flush_put_bits(&pb);
>
> - return size*4;
> + emms_c();
emms_c() is not needed here at all (since there's no MMX used here)
the rest LGTM
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel