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

Reply via email to