libavutil/stereo3d: fix prefix matching in *_from_name() functions

The three *_from_name() functions used av_strstart() for prefix matching,
which returns incorrect results when one name is a prefix of another.

av_stereo3d_from_name("side by side (quincunx subsampling)") matched
"side by side" at index 1 and returned AV_STEREO3D_SIDEBYSIDE instead of
AV_STEREO3D_SIDEBYSIDE_QUINCUNX. Similarly,
av_stereo3d_primary_eye_from_name("nonexistent") matched "none" and
returned AV_PRIMARY_EYE_NONE instead of -1.

Switch all three functions from av_strstart() to strcmp() for exact
matching. No in-tree callers rely on prefix matching.

Signed-off-by: marcos ashton <marcosashiglesias@gmail.com>
This commit is contained in:
marcos ashton
2026-03-22 22:03:28 +00:00
committed by michaelni
parent 9559a6036d
commit 5d70f0844c
2 changed files with 6 additions and 7 deletions

View File

@@ -20,7 +20,6 @@
#include <string.h>
#include "avstring.h"
#include "frame.h"
#include "macros.h"
#include "mem.h"
@@ -103,7 +102,7 @@ int av_stereo3d_from_name(const char *name)
int i;
for (i = 0; i < FF_ARRAY_ELEMS(stereo3d_type_names); i++) {
if (av_strstart(name, stereo3d_type_names[i], NULL))
if (!strcmp(name, stereo3d_type_names[i]))
return i;
}
@@ -123,7 +122,7 @@ int av_stereo3d_view_from_name(const char *name)
int i;
for (i = 0; i < FF_ARRAY_ELEMS(stereo3d_view_names); i++) {
if (av_strstart(name, stereo3d_view_names[i], NULL))
if (!strcmp(name, stereo3d_view_names[i]))
return i;
}
@@ -143,7 +142,7 @@ int av_stereo3d_primary_eye_from_name(const char *name)
int i;
for (i = 0; i < FF_ARRAY_ELEMS(stereo3d_primary_eye_names); i++) {
if (av_strstart(name, stereo3d_primary_eye_names[i], NULL))
if (!strcmp(name, stereo3d_primary_eye_names[i]))
return i;
}

View File

@@ -23,7 +23,7 @@ side by side: 1
top and bottom: 2
frame alternate: 3
checkerboard: 4
side by side (quincunx subsampling): 1
side by side (quincunx subsampling): 5
interleaved lines: 6
interleaved columns: 7
unspecified: 8
@@ -35,7 +35,7 @@ type roundtrip 1 (side by side): OK
type roundtrip 2 (top and bottom): OK
type roundtrip 3 (frame alternate): OK
type roundtrip 4 (checkerboard): OK
type roundtrip 5 (side by side (quincunx subsampling)): FAIL
type roundtrip 5 (side by side (quincunx subsampling)): OK
type roundtrip 6 (interleaved lines): OK
type roundtrip 7 (interleaved columns): OK
type roundtrip 8 (unspecified): OK
@@ -70,4 +70,4 @@ Testing av_stereo3d_primary_eye_from_name()
none: 0
left: 1
right: 2
nonexistent: 0
nonexistent: -1