On 02/14/2012 05:38 PM, Paul B Mahol wrote: > On 2/14/12, Aneesh Dogra <[email protected]> wrote: >> --- >> Changelog | 1 + >> libavcodec/Makefile | 1 + >> libavcodec/allcodecs.c | 2 +- >> libavcodec/sunrastenc.c | 246 >> +++++++++++++++++++++++++++++++++++++++++++++++ >> libavformat/img2.c | 3 +- >> 5 files changed, 251 insertions(+), 2 deletions(-) >> create mode 100644 libavcodec/sunrastenc.c >> > > [...] > >> +static av_cold int sunrast_encode_init(AVCodecContext *avctx) >> +{ >> + SUNRASTContext *s = avctx->priv_data; >> + int pixels = avctx->width * avctx->height; >> + >> + avctx->coded_frame = &s->picture; >> + >> + s->maplength = 0; >> + s->type = (avctx->coder_type == FF_CODER_TYPE_RLE) ? >> + RT_BYTE_ENCODED : RT_STANDARD; >> + s->maptype = RMT_NONE; >> + >> + switch (avctx->pix_fmt) { > > This is wrong, checking for pix_fmt should not be in init(). > Sane image encoders like png,pam,bmp... check pix_fmt on the fly. > > [...] > >> +static int sunrast_encode_frame(AVCodecContext *avctx, AVPacket *avpkt, >> + const AVFrame *frame, int *got_packet_ptr) >> +{ >> + SUNRASTContext *s = avctx->priv_data; >> + AVFrame *const p = (AVFrame *)&s->picture; >> + int ret; >> + >> + if ((ret = ff_alloc_packet(avpkt, s->size * >> + ((s->type == RT_BYTE_ENCODED) ? 2 : 1))) < 0) > > This looks wrong, RLE encoding should take less memory than uncompressed.
It doesn't necessarily do so in all cases though. For 1-run values of 0x80 it encodes 2 bytes instead of 1. Also, the current code doesn't avoid runs of 2, which it ideally should do because it takes 3 bytes instead of 2. -Justin _______________________________________________ libav-devel mailing list [email protected] https://lists.libav.org/mailman/listinfo/libav-devel
