[FFmpeg-cvslog] avformat/mov: set Stereo3D type when parsing eyes box

James Almer git at videolan.org
Fri Jun 28 20:44:38 EEST 2024


ffmpeg | branch: master | James Almer <jamrial at gmail.com> | Fri Jun 21 22:23:06 2024 -0300| [0b330d8642ee416774eb730946f88a236c8ce3d4] | committer: James Almer

avformat/mov: set Stereo3D type when parsing eyes box

If view is defined in the child stri box, then the type must be set to
unspecified, as these boxes don't carry packing information.
Also, don't attach a useless Stereo 3D side data if the stream is monoscopic.

Signed-off-by: James Almer <jamrial at gmail.com>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=0b330d8642ee416774eb730946f88a236c8ce3d4
---

 libavformat/mov.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/libavformat/mov.c b/libavformat/mov.c
index b4245789c4..14f43bf906 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -6546,7 +6546,8 @@ static int mov_read_eyes(MOVContext *c, AVIOContext *pb, MOVAtom atom)
     int size, flags = 0;
     int64_t remaining;
     uint32_t tag, baseline = 0;
-    enum AVStereo3DView view = AV_STEREO3D_VIEW_PACKED;
+    enum AVStereo3DView view = AV_STEREO3D_VIEW_UNSPEC;
+    enum AVStereo3DType type = AV_STEREO3D_2D;
     enum AVStereo3DPrimaryEye primary_eye = AV_PRIMARY_EYE_NONE;
     AVRational horizontal_disparity_adjustment = { 0, 1 };
 
@@ -6596,6 +6597,9 @@ static int mov_read_eyes(MOVContext *c, AVIOContext *pb, MOVAtom atom)
                 view = AV_STEREO3D_VIEW_LEFT;
             else if (has_right)
                 view = AV_STEREO3D_VIEW_RIGHT;
+            if (has_left || has_right)
+                type = AV_STEREO3D_UNSPEC;
+
             break;
         }
         case MKTAG('h','e','r','o'): {
@@ -6690,6 +6694,9 @@ static int mov_read_eyes(MOVContext *c, AVIOContext *pb, MOVAtom atom)
         return AVERROR_INVALIDDATA;
     }
 
+    if (type == AV_STEREO3D_2D)
+        return 0;
+
     if (!sc->stereo3d) {
         sc->stereo3d = av_stereo3d_alloc_size(&sc->stereo3d_size);
         if (!sc->stereo3d)
@@ -6697,6 +6704,7 @@ static int mov_read_eyes(MOVContext *c, AVIOContext *pb, MOVAtom atom)
     }
 
     sc->stereo3d->flags                           = flags;
+    sc->stereo3d->type                            = type;
     sc->stereo3d->view                            = view;
     sc->stereo3d->primary_eye                     = primary_eye;
     sc->stereo3d->baseline                        = baseline;



More information about the ffmpeg-cvslog mailing list