annotate png.c @ 12197:fbf4d5b1b664 libavcodec

Remove FF_MM_SSE2/3 flags for CPUs where this is generally not faster than regular MMX code. Examples of this are the Core1 CPU. Instead, set a new flag, FF_MM_SSE2/3SLOW, which can be checked for particular SSE2/3 functions that have been checked specifically on such CPUs and are actually faster than their MMX counterparts. In addition, use this flag to enable particular VP8 and LPC SSE2 functions that are faster than their MMX counterparts. Based on a patch by Loren Merritt <lorenm AT u washington edu>.
author rbultje
date Mon, 19 Jul 2010 22:38:23 +0000
parents 04423b2f6e0b
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2342
8b6668325ff8 porting png support from -f image to -f image2
michael
parents:
diff changeset
1 /*
8b6668325ff8 porting png support from -f image to -f image2
michael
parents:
diff changeset
2 * PNG image format
8629
04423b2f6e0b cosmetics: Remove pointless period after copyright statement non-sentences.
diego
parents: 6406
diff changeset
3 * Copyright (c) 2003 Fabrice Bellard
2342
8b6668325ff8 porting png support from -f image to -f image2
michael
parents:
diff changeset
4 *
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3777
diff changeset
5 * This file is part of FFmpeg.
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3777
diff changeset
6 *
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3777
diff changeset
7 * FFmpeg is free software; you can redistribute it and/or
2342
8b6668325ff8 porting png support from -f image to -f image2
michael
parents:
diff changeset
8 * modify it under the terms of the GNU Lesser General Public
8b6668325ff8 porting png support from -f image to -f image2
michael
parents:
diff changeset
9 * License as published by the Free Software Foundation; either
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3777
diff changeset
10 * version 2.1 of the License, or (at your option) any later version.
2342
8b6668325ff8 porting png support from -f image to -f image2
michael
parents:
diff changeset
11 *
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3777
diff changeset
12 * FFmpeg is distributed in the hope that it will be useful,
2342
8b6668325ff8 porting png support from -f image to -f image2
michael
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
8b6668325ff8 porting png support from -f image to -f image2
michael
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
8b6668325ff8 porting png support from -f image to -f image2
michael
parents:
diff changeset
15 * Lesser General Public License for more details.
8b6668325ff8 porting png support from -f image to -f image2
michael
parents:
diff changeset
16 *
8b6668325ff8 porting png support from -f image to -f image2
michael
parents:
diff changeset
17 * You should have received a copy of the GNU Lesser General Public
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3777
diff changeset
18 * License along with FFmpeg; if not, write to the Free Software
3036
0b546eab515d Update licensing information: The FSF changed postal address.
diego
parents: 2967
diff changeset
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
2342
8b6668325ff8 porting png support from -f image to -f image2
michael
parents:
diff changeset
20 */
8b6668325ff8 porting png support from -f image to -f image2
michael
parents:
diff changeset
21 #include "avcodec.h"
5067
6166fbf375cc Remove duplicate bytestream functions
ramiro
parents: 4515
diff changeset
22 #include "bytestream.h"
5337
26f4095e35d2 separate en/decoder specific parts from png.c
mru
parents: 5097
diff changeset
23 #include "png.h"
2342
8b6668325ff8 porting png support from -f image to -f image2
michael
parents:
diff changeset
24
5337
26f4095e35d2 separate en/decoder specific parts from png.c
mru
parents: 5097
diff changeset
25 const uint8_t ff_pngsig[8] = {137, 80, 78, 71, 13, 10, 26, 10};
6406
49dcfab1bda3 decode mng color decorrelation
lorenm
parents: 5339
diff changeset
26 const uint8_t ff_mngsig[8] = {138, 77, 78, 71, 13, 10, 26, 10};
2342
8b6668325ff8 porting png support from -f image to -f image2
michael
parents:
diff changeset
27
8b6668325ff8 porting png support from -f image to -f image2
michael
parents:
diff changeset
28 /* Mask to determine which y pixels are valid in a pass */
5337
26f4095e35d2 separate en/decoder specific parts from png.c
mru
parents: 5097
diff changeset
29 const uint8_t ff_png_pass_ymask[NB_PASSES] = {
2342
8b6668325ff8 porting png support from -f image to -f image2
michael
parents:
diff changeset
30 0x80, 0x80, 0x08, 0x88, 0x22, 0xaa, 0x55,
8b6668325ff8 porting png support from -f image to -f image2
michael
parents:
diff changeset
31 };
8b6668325ff8 porting png support from -f image to -f image2
michael
parents:
diff changeset
32
8b6668325ff8 porting png support from -f image to -f image2
michael
parents:
diff changeset
33 /* minimum x value */
5337
26f4095e35d2 separate en/decoder specific parts from png.c
mru
parents: 5097
diff changeset
34 const uint8_t ff_png_pass_xmin[NB_PASSES] = {
2342
8b6668325ff8 porting png support from -f image to -f image2
michael
parents:
diff changeset
35 0, 4, 0, 2, 0, 1, 0
8b6668325ff8 porting png support from -f image to -f image2
michael
parents:
diff changeset
36 };
8b6668325ff8 porting png support from -f image to -f image2
michael
parents:
diff changeset
37
8b6668325ff8 porting png support from -f image to -f image2
michael
parents:
diff changeset
38 /* x shift to get row width */
5337
26f4095e35d2 separate en/decoder specific parts from png.c
mru
parents: 5097
diff changeset
39 const uint8_t ff_png_pass_xshift[NB_PASSES] = {
2342
8b6668325ff8 porting png support from -f image to -f image2
michael
parents:
diff changeset
40 3, 3, 2, 2, 1, 1, 0
8b6668325ff8 porting png support from -f image to -f image2
michael
parents:
diff changeset
41 };
8b6668325ff8 porting png support from -f image to -f image2
michael
parents:
diff changeset
42
8b6668325ff8 porting png support from -f image to -f image2
michael
parents:
diff changeset
43 /* Mask to determine which pixels are valid in a pass */
5337
26f4095e35d2 separate en/decoder specific parts from png.c
mru
parents: 5097
diff changeset
44 const uint8_t ff_png_pass_mask[NB_PASSES] = {
2342
8b6668325ff8 porting png support from -f image to -f image2
michael
parents:
diff changeset
45 0x80, 0x08, 0x88, 0x22, 0xaa, 0x55, 0xff
8b6668325ff8 porting png support from -f image to -f image2
michael
parents:
diff changeset
46 };
8b6668325ff8 porting png support from -f image to -f image2
michael
parents:
diff changeset
47
5337
26f4095e35d2 separate en/decoder specific parts from png.c
mru
parents: 5097
diff changeset
48 void *ff_png_zalloc(void *opaque, unsigned int items, unsigned int size)
2342
8b6668325ff8 porting png support from -f image to -f image2
michael
parents:
diff changeset
49 {
2422
18b8b2dcc037 various security fixes and precautionary checks
michael
parents: 2347
diff changeset
50 if(items >= UINT_MAX / size)
18b8b2dcc037 various security fixes and precautionary checks
michael
parents: 2347
diff changeset
51 return NULL;
2342
8b6668325ff8 porting png support from -f image to -f image2
michael
parents:
diff changeset
52 return av_malloc(items * size);
8b6668325ff8 porting png support from -f image to -f image2
michael
parents:
diff changeset
53 }
8b6668325ff8 porting png support from -f image to -f image2
michael
parents:
diff changeset
54
5337
26f4095e35d2 separate en/decoder specific parts from png.c
mru
parents: 5097
diff changeset
55 void ff_png_zfree(void *opaque, void *ptr)
2342
8b6668325ff8 porting png support from -f image to -f image2
michael
parents:
diff changeset
56 {
8b6668325ff8 porting png support from -f image to -f image2
michael
parents:
diff changeset
57 av_free(ptr);
8b6668325ff8 porting png support from -f image to -f image2
michael
parents:
diff changeset
58 }
8b6668325ff8 porting png support from -f image to -f image2
michael
parents:
diff changeset
59
5337
26f4095e35d2 separate en/decoder specific parts from png.c
mru
parents: 5097
diff changeset
60 int ff_png_get_nb_channels(int color_type)
2342
8b6668325ff8 porting png support from -f image to -f image2
michael
parents:
diff changeset
61 {
8b6668325ff8 porting png support from -f image to -f image2
michael
parents:
diff changeset
62 int channels;
8b6668325ff8 porting png support from -f image to -f image2
michael
parents:
diff changeset
63 channels = 1;
8b6668325ff8 porting png support from -f image to -f image2
michael
parents:
diff changeset
64 if ((color_type & (PNG_COLOR_MASK_COLOR | PNG_COLOR_MASK_PALETTE)) ==
8b6668325ff8 porting png support from -f image to -f image2
michael
parents:
diff changeset
65 PNG_COLOR_MASK_COLOR)
8b6668325ff8 porting png support from -f image to -f image2
michael
parents:
diff changeset
66 channels = 3;
8b6668325ff8 porting png support from -f image to -f image2
michael
parents:
diff changeset
67 if (color_type & PNG_COLOR_MASK_ALPHA)
8b6668325ff8 porting png support from -f image to -f image2
michael
parents:
diff changeset
68 channels++;
8b6668325ff8 porting png support from -f image to -f image2
michael
parents:
diff changeset
69 return channels;
8b6668325ff8 porting png support from -f image to -f image2
michael
parents:
diff changeset
70 }
8b6668325ff8 porting png support from -f image to -f image2
michael
parents:
diff changeset
71
8b6668325ff8 porting png support from -f image to -f image2
michael
parents:
diff changeset
72 /* compute the row size of an interleaved pass */
5337
26f4095e35d2 separate en/decoder specific parts from png.c
mru
parents: 5097
diff changeset
73 int ff_png_pass_row_size(int pass, int bits_per_pixel, int width)
2342
8b6668325ff8 porting png support from -f image to -f image2
michael
parents:
diff changeset
74 {
8b6668325ff8 porting png support from -f image to -f image2
michael
parents:
diff changeset
75 int shift, xmin, pass_width;
8b6668325ff8 porting png support from -f image to -f image2
michael
parents:
diff changeset
76
5337
26f4095e35d2 separate en/decoder specific parts from png.c
mru
parents: 5097
diff changeset
77 xmin = ff_png_pass_xmin[pass];
2342
8b6668325ff8 porting png support from -f image to -f image2
michael
parents:
diff changeset
78 if (width <= xmin)
8b6668325ff8 porting png support from -f image to -f image2
michael
parents:
diff changeset
79 return 0;
5337
26f4095e35d2 separate en/decoder specific parts from png.c
mru
parents: 5097
diff changeset
80 shift = ff_png_pass_xshift[pass];
2342
8b6668325ff8 porting png support from -f image to -f image2
michael
parents:
diff changeset
81 pass_width = (width - xmin + (1 << shift) - 1) >> shift;
8b6668325ff8 porting png support from -f image to -f image2
michael
parents:
diff changeset
82 return (pass_width * bits_per_pixel + 7) >> 3;
8b6668325ff8 porting png support from -f image to -f image2
michael
parents:
diff changeset
83 }