[FFmpeg-devel] [PATCH 2/8 v2] avutil/stereo3d: add a Stereo3D type to signal that the packing is defined by the view field

James Almer jamrial at gmail.com
Sat Jun 22 22:59:42 EEST 2024


On 6/22/2024 12:31 PM, James Almer wrote:
> Given that a video stream/frame may have only one view coded, or both packed in
> an undefined way, and as the values of AVStereo3DView and AVStereo3DType may
> clash (namely if type is AV_STEREO3D_2D, then AV_STEREO3D_VIEW_PACKED would be
> invalid, and if it's anything other than it, then only AV_STEREO3D_VIEW_PACKED
> would be valid), this commit adds a new type value AV_STEREO3D_VIEW that
> signals the user that AVStereo3D.view contains information about the nature of
> the stream, with the added constrain that AVStereo3D.view should be ignored if
> AVStereo3D.type is anything other than AV_STEREO3D_VIEW.
> 
> Signed-off-by: James Almer <jamrial at gmail.com>
> ---
> This is the only way i could think of to work around the fact AVStereo3DType
> and AVStereo3DView just can't work well together if we want to keep AVStereo
> backwards compatible.

And this is also not ok given that type == AV_STEREO3D_FRAMESEQUENCE can 
(and should) go alongside view == AV_STEREO3D_VIEW_{LEFT,RIGHT}. Plus 
the fact AVStereo3DView has been around for a while, so the 
inconsistencies (like type 2D and view packed being default) are not new...

I'll look at this a bit more and send a new set.

> 
>   libavutil/stereo3d.c |  1 +
>   libavutil/stereo3d.h | 11 ++++++++++-
>   2 files changed, 11 insertions(+), 1 deletion(-)
> 
> diff --git a/libavutil/stereo3d.c b/libavutil/stereo3d.c
> index 0c0cad127c..e8e5030db9 100644
> --- a/libavutil/stereo3d.c
> +++ b/libavutil/stereo3d.c
> @@ -65,6 +65,7 @@ static const char * const stereo3d_type_names[] = {
>       [AV_STEREO3D_SIDEBYSIDE_QUINCUNX] = "side by side (quincunx subsampling)",
>       [AV_STEREO3D_LINES]               = "interleaved lines",
>       [AV_STEREO3D_COLUMNS]             = "interleaved columns",
> +    [AV_STEREO3D_VIEW]                = "view defined",
>   };
>   
>   static const char * const stereo3d_view_names[] = {
> diff --git a/libavutil/stereo3d.h b/libavutil/stereo3d.h
> index 77340f72b2..e3af519e03 100644
> --- a/libavutil/stereo3d.h
> +++ b/libavutil/stereo3d.h
> @@ -136,6 +136,14 @@ enum AVStereo3DType {
>        * @endcode
>        */
>       AV_STEREO3D_COLUMNS,
> +
> +    /**
> +     * Video may be monoscopic, or stereoscopic where either the
> +     * packing is unknown or only one view is present.
> +     *
> +     * @see AVStereo3DView
> +     */
> +    AV_STEREO3D_VIEW,
>   };
>   
>   /**
> @@ -207,7 +215,8 @@ typedef struct AVStereo3D {
>       int flags;
>   
>       /**
> -     * Determines which views are packed.
> +     * Determines which views are packed. This field should be ignored when
> +     * @ref type is set to anything other than AV_STEREO3D_VIEW.
>        */
>       enum AVStereo3DView view;
>   


More information about the ffmpeg-devel mailing list