[FFmpeg-cvslog] avutil/channel_layout: return earlier on UNSPEC layouts in av_channel_layout_subset()

James Almer git at videolan.org
Fri Mar 25 22:12:58 EET 2022


ffmpeg | branch: master | James Almer <jamrial at gmail.com> | Fri Mar 25 16:46:46 2022 -0300| [f2967490f16393cc9c3c1a74db1672ada129e06f] | committer: James Almer

avutil/channel_layout: return earlier on UNSPEC layouts in av_channel_layout_subset()

No point running all 64 iterations in the loop to never write anything to ret.
Also make ambisonic layouts check its mask too while at it.

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

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

 libavutil/channel_layout.c | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/libavutil/channel_layout.c b/libavutil/channel_layout.c
index c28b8928da..21b70173b7 100644
--- a/libavutil/channel_layout.c
+++ b/libavutil/channel_layout.c
@@ -989,12 +989,16 @@ uint64_t av_channel_layout_subset(const AVChannelLayout *channel_layout,
     uint64_t ret = 0;
     int i;
 
-    if (channel_layout->order == AV_CHANNEL_ORDER_NATIVE)
+    switch (channel_layout->order) {
+    case AV_CHANNEL_ORDER_NATIVE:
+    case AV_CHANNEL_ORDER_AMBISONIC:
         return channel_layout->u.mask & mask;
-
-    for (i = 0; i < 64; i++)
-        if (mask & (1ULL << i) && av_channel_layout_index_from_channel(channel_layout, i) >= 0)
-            ret |= (1ULL << i);
+    case AV_CHANNEL_ORDER_CUSTOM:
+        for (i = 0; i < 64; i++)
+            if (mask & (1ULL << i) && av_channel_layout_index_from_channel(channel_layout, i) >= 0)
+                ret |= (1ULL << i);
+        break;
+    }
 
     return ret;
 }



More information about the ffmpeg-cvslog mailing list