[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