[FFmpeg-devel] Trans.: a64multienc.c and drawutils.c optimisations
Michael Niedermayer
michaelni at gmx.at
Tue Dec 27 21:48:37 CET 2011
On Tue, Dec 27, 2011 at 09:39:19PM +0100, yann.lepetitcorps at free.fr wrote:
> The same thing but with a very little optimization that economize one
> multiplication into the memcpy on the memset_sized() func in drawutils.C
>
> @+
> Yannoo
>
> Selon yann.lepetitcorps at free.fr:
>
> > I have download the FFMPEG git into my linux box, make modifications,
> > compiled
> > the new version and generated the diff file in attachment.
> >
> >
> >
> > @+
> > Yannoo
> >
> >
> > Selon yann.lepetitcorps at free.fr:
> >
> > > No problem :)
> > >
> > > => I download the current git head on my linux box and work only with it
> > > (instead the 0.9 version that I have previously used on my Apple box)
> > >
> > > @+
> > > Yannoo
> > >
> > > Selon Carl Eugen Hoyos <cehoyos at ag.or.at>:
> > >
> > > > <yann.lepetitcorps <at> free.fr> writes:
> > > >
> > > > > I have begin to analyse FFMPEG 0.9 sources and think to has found somes
> > > > areas
> > > >
> > > > Please do not work on a release, only develop with current git head!
> > > >
> > > > > that can to be a little optimised such as in a64multienc.c or
> > drawutils.c
> > > >
> > > > If you feel unable to use git send-email (which is the preferred way of
> > > > sending
> > > > patches), please at least do "git diff >patchfile.diff" and send the
> > result
> > > > as
> > > > an attachment.
> > > >
> > > > Carl Eugen
> > > >
> > > > _______________________________________________
> > > > ffmpeg-devel mailing list
> > > > ffmpeg-devel at ffmpeg.org
> > > > http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> > > >
> > >
> > >
> > > _______________________________________________
> > > ffmpeg-devel mailing list
> > > ffmpeg-devel at ffmpeg.org
> > > http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> > >
> >
> >
> >
>
>
> libavcodec/a64multienc.c | 5 ++-
> libavfilter/drawutils.c | 61 ++++++++++++++++++++++++++++++++++++++++++++++-
> libavfilter/drawutils.h | 6 ++++
> 3 files changed, 69 insertions(+), 3 deletions(-)
> fb09107371ee746b3b3a4ae5a576ad70fc6e71ec ylp_27dec2011_21h19.diff
> diff --git a/libavcodec/a64multienc.c b/libavcodec/a64multienc.c
> index 5a665d0..b0e7b14 100644
> --- a/libavcodec/a64multienc.c
> +++ b/libavcodec/a64multienc.c
> @@ -49,15 +49,16 @@ static void to_meta_with_crop(AVCodecContext *avctx, AVFrame *p, int *dest)
> int height = FFMIN(avctx->height, C64YRES);
> int width = FFMIN(avctx->width , C64XRES);
> uint8_t *src = p->data[0];
> + uint8_t *src2;
>
> for (blocky = 0; blocky < C64YRES; blocky += 8) {
> for (blockx = 0; blockx < C64XRES; blockx += 8) {
> for (y = blocky; y < blocky + 8 && y < C64YRES; y++) {
> + src2 = src + y * p->linesize[0];
> for (x = blockx; x < blockx + 8 && x < C64XRES; x += 2) {
> if(x < width && y < height) {
> /* build average over 2 pixels */
> - luma = (src[(x + 0 + y * p->linesize[0])] +
> - src[(x + 1 + y * p->linesize[0])]) / 2;
> + luma = ((int)(src2[x]) + (int)(src2[x+1])) / 2;
the casts are unneeded
> /* write blocks as linear data now so they are suitable for elbg */
> dest[0] = luma;
> }
> diff --git a/libavfilter/drawutils.c b/libavfilter/drawutils.c
> index bf308a1..055cfd0 100644
> --- a/libavfilter/drawutils.c
> +++ b/libavfilter/drawutils.c
> @@ -38,6 +38,46 @@ int ff_fill_rgba_map(uint8_t *rgba_map, enum PixelFormat pix_fmt)
> return 0;
> }
>
> +void memset8(char *dst, char *val, int num)
> +{
> + memset(dst, *val, num);
> +}
should be static or needs a ff_ prefix to avoid namespace conflicts
with other libs
also if it has a ff_ prefix / is intended to be used from outside
char val seems easier to use than char *val
> +
> +void memset16(short int *dst, short int *val, int num)
> +{
> + int i;
> + short int set16 = *val;
should be int16_t, as short is not guranteed to be 16bit
> +
> + for(i=0;i<num;i++)
> + *dst++ = set16;
> +}
> +
> +void memset32(int *dst, int *val, int num)
> +{
> + int i;
> + int set32 = *val;
int32_t
> +
> + for(i=0;i<num;i++)
> + *dst++ = set32;
> +}
> +
> +
> +void memset24(char *dst, char *src, int num)
> +{
> + int i;
> +
> + for (i = 0; i < num; i++)
> + memcpy(dst + i * 3, src, 3);
> +}
> +
> +void memset_sized(char *dst, char *src, int num, int stepsize)
> +{
> + int i;
> +
> + for (i = 0; i < num; i++, dst += stepsize)
> + memcpy(dst, src, stepsize);
> +}
> +
> int ff_fill_line_with_color(uint8_t *line[4], int pixel_step[4], int w, uint8_t dst_color[4],
> enum PixelFormat pix_fmt, uint8_t rgba_color[4],
> int *is_packed_rgba, uint8_t rgba_map_ptr[4])
> @@ -55,8 +95,27 @@ int ff_fill_line_with_color(uint8_t *line[4], int pixel_step[4], int w, uint8_t
> dst_color[rgba_map[i]] = rgba_color[i];
>
> line[0] = av_malloc(w * pixel_step[0]);
> - for (i = 0; i < w; i++)
> + /* for (i = 0; i < w; i++)
> memcpy(line[0] + i * pixel_step[0], dst_color, pixel_step[0]);
> + */
that can be removed entirely
> + switch(av_get_bits_per_pixel(pix_desc))
tabs are forbidden in git
thanks
--
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
If you think the mosad wants you dead since a long time then you are either
wrong or dead since a long time.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: Digital signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20111227/506e3edb/attachment.asc>
More information about the ffmpeg-devel
mailing list