2 * Copyright (c) 2016 Vittorio Giovara <vittorio.giovara@gmail.com>
4 * This file is part of FFmpeg.
6 * FFmpeg is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * FFmpeg is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with FFmpeg; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 #include "spherical.h"
25 AVSphericalMapping
*av_spherical_alloc(size_t *size
)
27 AVSphericalMapping
*spherical
= av_mallocz(sizeof(AVSphericalMapping
));
32 *size
= sizeof(*spherical
);
37 void av_spherical_tile_bounds(const AVSphericalMapping
*map
,
38 size_t width
, size_t height
,
39 size_t *left
, size_t *top
,
40 size_t *right
, size_t *bottom
)
42 /* conversion from 0.32 coordinates to pixels */
43 uint64_t orig_width
= (uint64_t) width
* UINT32_MAX
/
44 (UINT32_MAX
- map
->bound_right
- map
->bound_left
);
45 uint64_t orig_height
= (uint64_t) height
* UINT32_MAX
/
46 (UINT32_MAX
- map
->bound_bottom
- map
->bound_top
);
48 /* add a (UINT32_MAX - 1) to round up integer division */
49 *left
= (orig_width
* map
->bound_left
+ UINT32_MAX
- 1) / UINT32_MAX
;
50 *top
= (orig_height
* map
->bound_top
+ UINT32_MAX
- 1) / UINT32_MAX
;
51 *right
= orig_width
- width
- *left
;
52 *bottom
= orig_height
- height
- *top
;
55 static const char *const spherical_projection_names
[] = {
56 [AV_SPHERICAL_EQUIRECTANGULAR
] = "equirectangular",
57 [AV_SPHERICAL_CUBEMAP
] = "cubemap",
58 [AV_SPHERICAL_EQUIRECTANGULAR_TILE
] = "tiled equirectangular",
61 const char *av_spherical_projection_name(enum AVSphericalProjection projection
)
63 if ((unsigned)projection
>= FF_ARRAY_ELEMS(spherical_projection_names
))
66 return spherical_projection_names
[projection
];
69 int av_spherical_from_name(const char *name
)
73 for (i
= 0; i
< FF_ARRAY_ELEMS(spherical_projection_names
); i
++) {
74 if (av_strstart(name
, spherical_projection_names
[i
], NULL
))