[FFmpeg-devel] [PATCH] avfilter: add panorama filter
Paul B Mahol
onemda at gmail.com
Sat Mar 10 11:28:42 EET 2018
On 3/9/18, Paul B Mahol <onemda at gmail.com> wrote:
> On 3/9/18, Hazem Ashmawy <hazem.s.ashmawy at gmail.com> wrote:
>> On 3/9/18, Paul B Mahol <onemda at gmail.com> wrote:
>>> On 3/9/18, Hazem Ashmawy <hazem.s.ashmawy at gmail.com> wrote:
>>>> Add filter to convert between various panorama projections. It supports
>>>> Equirectangular and Cubemaps (3x2 and 6x1 cubemap layouts).
>>>>
>>>> commit a8d80408bd9d99542cc29f30d7e6b00771846029
>>>> Author: Hazem Ashmawy <hazem.s.ashmawy at gmail.com>
>>>> Date: Thu Mar 8 10:09:36 2018 +0200
>>>>
>>>> avfilter: add convertion to/from cubemap 6x1
>>>>
>>>> Signed-off-by: Hazem Ashmawy <hazem.s.ashmawy at gmail.com>
>>>>
>>>> commit f9f6a6cc0ceb1a4e749041658b7a441696b82588
>>>> Author: Paul B Mahol <onemda at gmail.com>
>>>> Date: Thu Dec 3 21:15:13 2015 +0100
>>>>
>>>> avfilter: add panorama filter
>>>>
>>>> Signed-off-by: Paul B Mahol <onemda at gmail.com>
>>>>
>>>> Signed-off-by: Hazem Ashmawy <hazem.s.ashmawy at gmail.com>
>>>> ---
>>>> libavfilter/Makefile | 1 +
>>>> libavfilter/allfilters.c | 1 +
>>>> libavfilter/vf_panorama.c | 553
>>>> ++++++++++++++++++++++++++++++++++++++++++++++
>>>> 3 files changed, 555 insertions(+)
>>>> create mode 100644 libavfilter/vf_panorama.c
>>>>
>>>
>>> Here is partial change for converting 3x2 cubemap as given by latest
>>> youtube videos to
>>> equirectangular projection:
>>
>> Should I modify cube faces order to match the one specified here too?
>> https://github.com/google/spatial-media/blob/master/docs/spherical-video-v2-rfc.md#semantics-3
>
> Yes, The 3x2 cubemap projection should be what google use.
>
> There is also facebook own cubemap layout IIRC, but that one can came
> later.
>
>>
>>>
>>> | diff --git a/libavfilter/vf_panorama.c b/libavfilter/vf_panorama.c
>>> | index 7d9de5b62c..4d43fc0dd5 100644
>>> | --- a/libavfilter/vf_panorama.c
>>> | +++ b/libavfilter/vf_panorama.c
>>> | @@ -394,9 +394,9 @@ static int config_output(AVFilterLink *outlink)
>>> |
>>> | phi_threshold = atan2(1., 1. / cos(theta_norm));
>>> | if (phi > phi_threshold) {
>>> | - face = DOWN;
>>> | - } else if (phi < -phi_threshold) {
>>> | face = TOP;
>>> | + } else if (phi < -phi_threshold) {
>>> | + face = DOWN;
>>> | } else {
>>> | ;
>>> | }
>>> | @@ -411,14 +411,14 @@ static int config_output(AVFilterLink *outlink)
>>> | case RIGHT:
>>> | locate(z, y, x, M_PI_2, rw, rh, &ox, &oy);
>>> | break;
>>> | - case TOP:
>>> | - locate(y, z, x, M_PI, rw, rh, &ox, &oy);
>>> | + case DOWN:
>>> | + locate(y, z, x, M_PI_2, rw, rh, &ox, &oy);
>>> | break;
>>> | case BACK:
>>> | - locate(x, y, z,-M_PI_2, rw, rh, &ox, &oy);
>>> | + locate(x, y, z, 0, rw, rh, &ox, &oy);
>>> | break;
>>> | - case DOWN:
>>> | - locate(y, x, z,-M_PI_2, rw, rh, &ox, &oy);
>>> | + case TOP:
>>> | + locate(y, x, z, M_PI , rw, rh, &ox, &oy);
>>> | break;
>>> | }
>>> |
>>>
>>> Could you incorporate this?
>>> And also update all other conversions so thay match with this one?
>> Sure, I'll work on this.
>
> Good, you will also need to add frame side data support... but that can
> wait.
Actually frame side data support can not be used due certain
libavfilter limitations,
same ones as 3D frame side data patch for stereo3d filter.
More information about the ffmpeg-devel
mailing list