Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
* [FFmpeg-devel] [PATCH 1/9] avformat/matroskaenc: Avoid atoi()
@ 2023-08-11 10:34 Andreas Rheinhardt
  2023-08-11 10:43 ` [FFmpeg-devel] [PATCH 2/9] avformat/matroska: Move ff_matroska_video_stereo_plane to demuxer Andreas Rheinhardt
                   ` (10 more replies)
  0 siblings, 11 replies; 14+ messages in thread
From: Andreas Rheinhardt @ 2023-08-11 10:34 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Andreas Rheinhardt

It has undefined behaviour in case the value does not fit into an int.
Also stop allowing to override a stream level "alpha_mode" tag
by an AVFormatContext one and properly check that the stereo_mode
number given via a tag is actually in the range 0..14: Negative
values would have been treated as zero before this patch.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
---
 libavformat/matroskaenc.c | 11 +++++------
 1 file changed, 5 insertions(+), 6 deletions(-)

diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c
index e813ef86cf..9bdf087c67 100644
--- a/libavformat/matroskaenc.c
+++ b/libavformat/matroskaenc.c
@@ -1592,7 +1592,7 @@ static int mkv_write_stereo_mode(AVFormatContext *s, EbmlWriter *writer,
     // convert metadata into proper side data and add it to the stream
     if ((tag = av_dict_get(st->metadata, "stereo_mode", NULL, 0)) ||
         (tag = av_dict_get( s->metadata, "stereo_mode", NULL, 0))) {
-        int stereo_mode = atoi(tag->value);
+        long stereo_mode = strtol(tag->value, NULL, 0);
 
         for (int i = 0; i < MATROSKA_VIDEO_STEREOMODE_TYPE_NB; i++)
             if (!strcmp(tag->value, ff_matroska_video_stereo_mode[i])){
@@ -1600,7 +1600,7 @@ static int mkv_write_stereo_mode(AVFormatContext *s, EbmlWriter *writer,
                 break;
             }
 
-        if (stereo_mode < MATROSKA_VIDEO_STEREOMODE_TYPE_NB &&
+        if ((unsigned long)stereo_mode < MATROSKA_VIDEO_STEREOMODE_TYPE_NB &&
             stereo_mode != 10 && stereo_mode != 12) {
             int ret = ff_mkv_stereo3d_conv(st, stereo_mode);
             if (ret < 0)
@@ -1748,11 +1748,10 @@ static int mkv_write_track_video(AVFormatContext *s, MatroskaMuxContext *mkv,
     if (ret < 0)
         return ret;
 
-    if (((tag = av_dict_get(st->metadata, "alpha_mode", NULL, 0)) && atoi(tag->value)) ||
-        ((tag = av_dict_get( s->metadata, "alpha_mode", NULL, 0)) && atoi(tag->value)) ||
-        (par->format == AV_PIX_FMT_YUVA420P)) {
+    if (par->format == AV_PIX_FMT_YUVA420P ||
+        ((tag = av_dict_get(st->metadata, "alpha_mode", NULL, 0)) ||
+         (tag = av_dict_get( s->metadata, "alpha_mode", NULL, 0))) && strtol(tag->value, NULL, 0))
         ebml_writer_add_uint(&writer, MATROSKA_ID_VIDEOALPHAMODE, 1);
-    }
 
     // write DisplayWidth and DisplayHeight, they contain the size of
     // a single source view and/or the display aspect ratio
-- 
2.34.1

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 14+ messages in thread

* [FFmpeg-devel] [PATCH 2/9] avformat/matroska: Move ff_matroska_video_stereo_plane to demuxer
  2023-08-11 10:34 [FFmpeg-devel] [PATCH 1/9] avformat/matroskaenc: Avoid atoi() Andreas Rheinhardt
@ 2023-08-11 10:43 ` Andreas Rheinhardt
  2023-08-11 10:43 ` [FFmpeg-devel] [PATCH 3/9] avformat/matroska: Add macro for stereomode<->AVStereo3D correspondence Andreas Rheinhardt
                   ` (9 subsequent siblings)
  10 siblings, 0 replies; 14+ messages in thread
From: Andreas Rheinhardt @ 2023-08-11 10:43 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Andreas Rheinhardt

Only used there.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
---
 libavformat/matroska.c    | 6 ------
 libavformat/matroska.h    | 1 -
 libavformat/matroskadec.c | 8 +++++++-
 3 files changed, 7 insertions(+), 8 deletions(-)

diff --git a/libavformat/matroska.c b/libavformat/matroska.c
index 79b2d09984..acfacc85dd 100644
--- a/libavformat/matroska.c
+++ b/libavformat/matroska.c
@@ -146,12 +146,6 @@ const char * const ff_matroska_video_stereo_mode[MATROSKA_VIDEO_STEREOMODE_TYPE_
     "block_rl",
 };
 
-const char * const ff_matroska_video_stereo_plane[MATROSKA_VIDEO_STEREO_PLANE_COUNT] = {
-    "left",
-    "right",
-    "background",
-};
-
 int ff_mkv_stereo3d_conv(AVStream *st, MatroskaVideoStereoModeType stereo_mode)
 {
     AVStereo3D *stereo;
diff --git a/libavformat/matroska.h b/libavformat/matroska.h
index ead7c085b9..c5b5a4b310 100644
--- a/libavformat/matroska.h
+++ b/libavformat/matroska.h
@@ -387,7 +387,6 @@ extern const CodecTags ff_mkv_codec_tags[];
 extern const CodecTags ff_webm_codec_tags[];
 extern const AVMetadataConv ff_mkv_metadata_conv[];
 extern const char * const ff_matroska_video_stereo_mode[MATROSKA_VIDEO_STEREOMODE_TYPE_NB];
-extern const char * const ff_matroska_video_stereo_plane[MATROSKA_VIDEO_STEREO_PLANE_COUNT];
 
 /* AVStream Metadata tag keys for WebM Dash Manifest */
 #define INITIALIZATION_RANGE "webm_dash_manifest_initialization_range"
diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c
index 49950956b6..c6042eed2b 100644
--- a/libavformat/matroskadec.c
+++ b/libavformat/matroskadec.c
@@ -824,6 +824,12 @@ static const CodecMime mkv_mime_tags[] = {
     {""                           , AV_CODEC_ID_NONE}
 };
 
+static const char * const matroska_video_stereo_plane[MATROSKA_VIDEO_STEREO_PLANE_COUNT] = {
+    "left",
+    "right",
+    "background",
+};
+
 static const char *const matroska_doctypes[] = { "matroska", "webm" };
 
 /*
@@ -2991,7 +2997,7 @@ static int matroska_parse_tracks(AVFormatContext *s)
                 if (planes[j].type >= MATROSKA_VIDEO_STEREO_PLANE_COUNT)
                     continue;
                 snprintf(buf, sizeof(buf), "%s_%d",
-                         ff_matroska_video_stereo_plane[planes[j].type], i);
+                         matroska_video_stereo_plane[planes[j].type], i);
                 for (k=0; k < matroska->tracks.nb_elem; k++)
                     if (planes[j].uid == tracks[k].uid && tracks[k].stream) {
                         av_dict_set(&tracks[k].stream->metadata,
-- 
2.34.1

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 14+ messages in thread

* [FFmpeg-devel] [PATCH 3/9] avformat/matroska: Add macro for stereomode<->AVStereo3D correspondence
  2023-08-11 10:34 [FFmpeg-devel] [PATCH 1/9] avformat/matroskaenc: Avoid atoi() Andreas Rheinhardt
  2023-08-11 10:43 ` [FFmpeg-devel] [PATCH 2/9] avformat/matroska: Move ff_matroska_video_stereo_plane to demuxer Andreas Rheinhardt
@ 2023-08-11 10:43 ` Andreas Rheinhardt
  2023-08-11 10:43 ` [FFmpeg-devel] [PATCH 4/9] avformat/matroskaenc: Don't add side-data to input stream Andreas Rheinhardt
                   ` (8 subsequent siblings)
  10 siblings, 0 replies; 14+ messages in thread
From: Andreas Rheinhardt @ 2023-08-11 10:43 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Andreas Rheinhardt

It will allow to create tables for easy conversion from AVStereo3D
to stereomode and back again as well as derive the properties
of a given stereomode.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
---
 libavformat/matroska.h | 37 +++++++++++++++++++++++++++++++++++++
 1 file changed, 37 insertions(+)

diff --git a/libavformat/matroska.h b/libavformat/matroska.h
index c5b5a4b310..3a1ee740ce 100644
--- a/libavformat/matroska.h
+++ b/libavformat/matroska.h
@@ -386,6 +386,43 @@ typedef struct CodecTags{
 extern const CodecTags ff_mkv_codec_tags[];
 extern const CodecTags ff_webm_codec_tags[];
 extern const AVMetadataConv ff_mkv_metadata_conv[];
+
+/* The following macro contains all the information about which
+ * MATROSKA_VIDEO_STEREOMODE_TYPE_* correspond to which AVStereo3D
+ * structures and also the relevant horizontal/vertical divisors
+ * as well as WebM compatibility.
+ *
+ * MAP and MKV_ONLY are macros to be provided by the user.
+ * MAP(MatroskaVideoStereoModeType, AVStereo3DType, AV_STEREO3D_FLAG_*,
+ *     HALF_WIDTH, HALF_HEIGHT, WebM-compatibility)
+ * is for the stereo modes that have a Stereo3D counterpart.
+ * MKV_ONLY(MatroskaVideoStereoModeType, HALF_WIDTH, HALF_HEIGHT, WebM)
+ * is for those that don't have a Stereo3D counterpart.
+ * */
+#define STEREOMODE_STEREO3D_MAPPING(MAP, MKV_ONLY)                                            \
+    MAP(MATROSKA_VIDEO_STEREOMODE_TYPE_MONO, AV_STEREO3D_2D, 0, 0, 0, 1)                      \
+    MAP(MATROSKA_VIDEO_STEREOMODE_TYPE_LEFT_RIGHT, AV_STEREO3D_SIDEBYSIDE, 0, 1, 0, 1)        \
+    MAP(MATROSKA_VIDEO_STEREOMODE_TYPE_BOTTOM_TOP, AV_STEREO3D_TOPBOTTOM,                     \
+        AV_STEREO3D_FLAG_INVERT, 0, 1, 1)                                                     \
+    MAP(MATROSKA_VIDEO_STEREOMODE_TYPE_TOP_BOTTOM, AV_STEREO3D_TOPBOTTOM,  0, 0, 1, 1)        \
+    MAP(MATROSKA_VIDEO_STEREOMODE_TYPE_CHECKERBOARD_RL, AV_STEREO3D_CHECKERBOARD,             \
+        AV_STEREO3D_FLAG_INVERT, 0, 0, 0)                                                     \
+    MAP(MATROSKA_VIDEO_STEREOMODE_TYPE_CHECKERBOARD_LR, AV_STEREO3D_CHECKERBOARD, 0, 0, 0, 0) \
+    MAP(MATROSKA_VIDEO_STEREOMODE_TYPE_ROW_INTERLEAVED_RL, AV_STEREO3D_LINES,                 \
+        AV_STEREO3D_FLAG_INVERT, 0, 1, 0)                                                     \
+    MAP(MATROSKA_VIDEO_STEREOMODE_TYPE_ROW_INTERLEAVED_LR, AV_STEREO3D_LINES, 0, 0, 1, 0)     \
+    MAP(MATROSKA_VIDEO_STEREOMODE_TYPE_COL_INTERLEAVED_RL, AV_STEREO3D_COLUMNS,               \
+        AV_STEREO3D_FLAG_INVERT, 1, 0, 0)                                                     \
+    MAP(MATROSKA_VIDEO_STEREOMODE_TYPE_COL_INTERLEAVED_LR, AV_STEREO3D_COLUMNS, 0, 1, 0, 0)   \
+    MKV_ONLY(MATROSKA_VIDEO_STEREOMODE_TYPE_ANAGLYPH_CYAN_RED, 0, 0, 0)                       \
+    MAP(MATROSKA_VIDEO_STEREOMODE_TYPE_RIGHT_LEFT, AV_STEREO3D_SIDEBYSIDE,                    \
+        AV_STEREO3D_FLAG_INVERT, 1, 0, 1)                                                     \
+    MKV_ONLY(MATROSKA_VIDEO_STEREOMODE_TYPE_ANAGLYPH_GREEN_MAG, 0, 0, 0)                      \
+    MAP(MATROSKA_VIDEO_STEREOMODE_TYPE_BOTH_EYES_BLOCK_LR, AV_STEREO3D_FRAMESEQUENCE,         \
+        0, 0, 0, 0)                                                                           \
+    MAP(MATROSKA_VIDEO_STEREOMODE_TYPE_BOTH_EYES_BLOCK_RL, AV_STEREO3D_FRAMESEQUENCE,         \
+        AV_STEREO3D_FLAG_INVERT, 0, 0, 0)
+
 extern const char * const ff_matroska_video_stereo_mode[MATROSKA_VIDEO_STEREOMODE_TYPE_NB];
 
 /* AVStream Metadata tag keys for WebM Dash Manifest */
-- 
2.34.1

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 14+ messages in thread

* [FFmpeg-devel] [PATCH 4/9] avformat/matroskaenc: Don't add side-data to input stream
  2023-08-11 10:34 [FFmpeg-devel] [PATCH 1/9] avformat/matroskaenc: Avoid atoi() Andreas Rheinhardt
  2023-08-11 10:43 ` [FFmpeg-devel] [PATCH 2/9] avformat/matroska: Move ff_matroska_video_stereo_plane to demuxer Andreas Rheinhardt
  2023-08-11 10:43 ` [FFmpeg-devel] [PATCH 3/9] avformat/matroska: Add macro for stereomode<->AVStereo3D correspondence Andreas Rheinhardt
@ 2023-08-11 10:43 ` Andreas Rheinhardt
  2023-08-11 10:43 ` [FFmpeg-devel] [PATCH 5/9] avformat/matroskaenc: Improve message for WebM-incompatible StereoModes Andreas Rheinhardt
                   ` (7 subsequent siblings)
  10 siblings, 0 replies; 14+ messages in thread
From: Andreas Rheinhardt @ 2023-08-11 10:43 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Andreas Rheinhardt

When muxing, the AVStreams' side-data is typically set
by the caller before avformat_write_header();
it is not documented to be else. Yet the Matroska muxer
added an AVStereo3D side data if certain metadata
was present:

Since commit 4d686fb721b485ebbc4c7779d927d876c1e630f7
(adding support for AVStereo3D stream side-data),
the Matroska muxer checked certain stream tags that
contain Matroska's StereoMode and (if they are present)
converted this value into an AVStereo3D struct that
gets attached to the AVStream (reusing a function from
the demuxer). Afterwards the AVStereo3D side data struct
(whether it has just been added by the muxer or not) gets
parsed and converted back into a Matroska StereoMode.

Besides being an API violation this change broke
StereoMode values without a corresponding AVStereo3D
(namely the anaglyph ones).

This commit fixes this: A StereoMode given via tags
is now used-as-is; if no such tag exists and an AVStereo3D
side data exists, it is converted into the corresponding
StereoMode (if possible).

The new STEREOMODE_STEREO3D_MAPPING has been put to
good use for this.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
---
mkv_write_tracks() now no longer modifies the public AVStream at all
any more.

 libavformat/matroskaenc.c | 125 +++++++++++++++++++-------------------
 1 file changed, 63 insertions(+), 62 deletions(-)

diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c
index 9bdf087c67..20d3af3b42 100644
--- a/libavformat/matroskaenc.c
+++ b/libavformat/matroskaenc.c
@@ -1580,95 +1580,96 @@ static void mkv_write_field_order(EbmlWriter *writer, int is_webm,
 
 #define MAX_STEREO_MODE_ELEMS 1
 static int mkv_write_stereo_mode(AVFormatContext *s, EbmlWriter *writer,
-                                 AVStream *st, int is_webm,
+                                 const AVStream *st, int is_webm,
                                  int *h_width, int *h_height)
 {
     const AVDictionaryEntry *tag;
     MatroskaVideoStereoModeType format = MATROSKA_VIDEO_STEREOMODE_TYPE_NB;
-    const AVStereo3D *stereo;
+
+    /* The following macros create bitfields where the ith bit
+     * indicates whether the MatroskaVideoStereoModeType with that value
+     * uses double width/height or is WebM compatible. */
+#define FLAG(STEREOMODETYPE, BOOL) | (BOOL) << (STEREOMODETYPE)
+#define WDIV1(STEREOMODETYPE, STEREO3DTYPE, FLAGS, WDIV, HDIV, WEBM) \
+    FLAG(STEREOMODETYPE, WDIV)
+#define WDIV2(STEREOMODETYPE, WDIV, HDIV, WEBM) \
+    FLAG(STEREOMODETYPE, WDIV)
+    // The zero in the following line consumes the first '|'.
+    const unsigned width_bitfield = 0 STEREOMODE_STEREO3D_MAPPING(WDIV1, WDIV2);
+
+#define HDIV1(STEREOMODETYPE, STEREO3DTYPE, FLAGS, WDIV, HDIV, WEBM) \
+    FLAG(STEREOMODETYPE, HDIV)
+#define HDIV2(STEREOMODETYPE, WDIV, HDIV, WEBM) \
+    FLAG(STEREOMODETYPE, HDIV)
+    const unsigned height_bitfield = 0 STEREOMODE_STEREO3D_MAPPING(HDIV1, HDIV2);
+
+#define WEBM1(STEREOMODETYPE, STEREO3DTYPE, FLAGS, WDIV, HDIV, WEBM) \
+    FLAG(STEREOMODETYPE, WEBM)
+#define WEBM2(STEREOMODETYPE, WDIV, HDIV, WEBM) \
+    FLAG(STEREOMODETYPE, WEBM)
+    const unsigned webm_bitfield = 0 STEREOMODE_STEREO3D_MAPPING(WEBM1, WEBM2);
 
     *h_width = 1;
     *h_height = 1;
-    // convert metadata into proper side data and add it to the stream
+
     if ((tag = av_dict_get(st->metadata, "stereo_mode", NULL, 0)) ||
         (tag = av_dict_get( s->metadata, "stereo_mode", NULL, 0))) {
-        long stereo_mode = strtol(tag->value, NULL, 0);
 
         for (int i = 0; i < MATROSKA_VIDEO_STEREOMODE_TYPE_NB; i++)
             if (!strcmp(tag->value, ff_matroska_video_stereo_mode[i])){
-                stereo_mode = i;
+                format = i;
                 break;
             }
-
-        if ((unsigned long)stereo_mode < MATROSKA_VIDEO_STEREOMODE_TYPE_NB &&
-            stereo_mode != 10 && stereo_mode != 12) {
-            int ret = ff_mkv_stereo3d_conv(st, stereo_mode);
-            if (ret < 0)
-                return ret;
+        if (format == MATROSKA_VIDEO_STEREOMODE_TYPE_NB) {
+            long stereo_mode = strtol(tag->value, NULL, 0);
+            if ((unsigned long)stereo_mode >= MATROSKA_VIDEO_STEREOMODE_TYPE_NB)
+                goto fail;
+            format = stereo_mode;
         }
-    }
+    } else {
+        const AVStereo3D *stereo;
+        /* The following macro presumes all MATROSKA_VIDEO_STEREOMODE_TYPE_*
+         * values to be in the range 0..254. */
+#define STEREOMODE(STEREOMODETYPE, STEREO3DTYPE, FLAGS, WDIV, HDIV, WEBM) \
+    [(STEREO3DTYPE)][!!((FLAGS) & AV_STEREO3D_FLAG_INVERT)] = (STEREOMODETYPE) + 1,
+#define IGNORE(STEREOMODETYPE, WDIV, HDIV, WEBM)
+        static const unsigned char conversion_table[][2] = {
+            STEREOMODE_STEREO3D_MAPPING(STEREOMODE, IGNORE)
+        };
+        int fmt;
 
     stereo = (const AVStereo3D*)av_stream_get_side_data(st, AV_PKT_DATA_STEREO3D,
                                                         NULL);
-    if (stereo) {
-        switch (stereo->type) {
-        case AV_STEREO3D_2D:
-            format = MATROSKA_VIDEO_STEREOMODE_TYPE_MONO;
-            break;
-        case AV_STEREO3D_SIDEBYSIDE:
-            format = (stereo->flags & AV_STEREO3D_FLAG_INVERT)
-                     ? MATROSKA_VIDEO_STEREOMODE_TYPE_RIGHT_LEFT
-                     : MATROSKA_VIDEO_STEREOMODE_TYPE_LEFT_RIGHT;
-            *h_width = 2;
-            break;
-        case AV_STEREO3D_TOPBOTTOM:
-            format = MATROSKA_VIDEO_STEREOMODE_TYPE_TOP_BOTTOM;
-            if (stereo->flags & AV_STEREO3D_FLAG_INVERT)
-                format--;
-            *h_height = 2;
-            break;
-        case AV_STEREO3D_CHECKERBOARD:
-            format = MATROSKA_VIDEO_STEREOMODE_TYPE_CHECKERBOARD_LR;
-            if (stereo->flags & AV_STEREO3D_FLAG_INVERT)
-                format--;
-            break;
-        case AV_STEREO3D_LINES:
-            format = MATROSKA_VIDEO_STEREOMODE_TYPE_ROW_INTERLEAVED_LR;
-            if (stereo->flags & AV_STEREO3D_FLAG_INVERT)
-                format--;
-            *h_height = 2;
-            break;
-        case AV_STEREO3D_COLUMNS:
-            format = MATROSKA_VIDEO_STEREOMODE_TYPE_COL_INTERLEAVED_LR;
-            if (stereo->flags & AV_STEREO3D_FLAG_INVERT)
-                format--;
-            *h_width = 2;
-            break;
-        case AV_STEREO3D_FRAMESEQUENCE:
-            format = MATROSKA_VIDEO_STEREOMODE_TYPE_BOTH_EYES_BLOCK_LR;
-            if (stereo->flags & AV_STEREO3D_FLAG_INVERT)
-                format++;
-            break;
-        }
-    }
+        if (!stereo)
+            return 0;
 
-    if (format == MATROSKA_VIDEO_STEREOMODE_TYPE_NB)
-        return 0;
+        /* A garbage AVStereo3D or something with no Matroska analogon. */
+        if ((unsigned)stereo->type >= FF_ARRAY_ELEMS(conversion_table))
+            return 0;
+
+        fmt = conversion_table[stereo->type][!!(stereo->flags & AV_STEREO3D_FLAG_INVERT)];
+        /* Format with no Matroska analogon; ignore it */
+        if (!fmt)
+            return 0;
+        format = fmt - 1;
+    }
 
     // if webm, do not write unsupported modes
-    if ((is_webm &&
-        format > MATROSKA_VIDEO_STEREOMODE_TYPE_TOP_BOTTOM &&
-        format != MATROSKA_VIDEO_STEREOMODE_TYPE_RIGHT_LEFT)
-        || format >= MATROSKA_VIDEO_STEREOMODE_TYPE_NB) {
-        av_log(s, AV_LOG_ERROR,
-               "The specified stereo mode is not valid.\n");
-        return AVERROR(EINVAL);
+    if (is_webm && !(webm_bitfield >> format)) {
+        goto fail;
     }
 
+    *h_width  = 1 << ((width_bitfield  >> format) & 1);
+    *h_height = 1 << ((height_bitfield >> format) & 1);
+
     // write StereoMode if format is valid
     ebml_writer_add_uint(writer, MATROSKA_ID_VIDEOSTEREOMODE, format);
 
     return 0;
+fail:
+    av_log(s, AV_LOG_ERROR,
+            "The specified stereo mode is not valid.\n");
+    return AVERROR(EINVAL);
 }
 
 static void mkv_write_blockadditionmapping(AVFormatContext *s, const MatroskaMuxContext *mkv,
-- 
2.34.1

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 14+ messages in thread

* [FFmpeg-devel] [PATCH 5/9] avformat/matroskaenc: Improve message for WebM-incompatible StereoModes
  2023-08-11 10:34 [FFmpeg-devel] [PATCH 1/9] avformat/matroskaenc: Avoid atoi() Andreas Rheinhardt
                   ` (2 preceding siblings ...)
  2023-08-11 10:43 ` [FFmpeg-devel] [PATCH 4/9] avformat/matroskaenc: Don't add side-data to input stream Andreas Rheinhardt
@ 2023-08-11 10:43 ` Andreas Rheinhardt
  2023-08-11 10:43 ` [FFmpeg-devel] [PATCH 6/9] avformat/matroska: Move ff_mkv_stereo3d_conv() to demuxer Andreas Rheinhardt
                   ` (6 subsequent siblings)
  10 siblings, 0 replies; 14+ messages in thread
From: Andreas Rheinhardt @ 2023-08-11 10:43 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Andreas Rheinhardt

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
---
 libavformat/matroskaenc.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c
index 20d3af3b42..c4be6791ab 100644
--- a/libavformat/matroskaenc.c
+++ b/libavformat/matroskaenc.c
@@ -1583,6 +1583,7 @@ static int mkv_write_stereo_mode(AVFormatContext *s, EbmlWriter *writer,
                                  const AVStream *st, int is_webm,
                                  int *h_width, int *h_height)
 {
+    const char *error_message_addendum = "";
     const AVDictionaryEntry *tag;
     MatroskaVideoStereoModeType format = MATROSKA_VIDEO_STEREOMODE_TYPE_NB;
 
@@ -1656,6 +1657,7 @@ static int mkv_write_stereo_mode(AVFormatContext *s, EbmlWriter *writer,
 
     // if webm, do not write unsupported modes
     if (is_webm && !(webm_bitfield >> format)) {
+        error_message_addendum = " for WebM";
         goto fail;
     }
 
@@ -1668,7 +1670,8 @@ static int mkv_write_stereo_mode(AVFormatContext *s, EbmlWriter *writer,
     return 0;
 fail:
     av_log(s, AV_LOG_ERROR,
-            "The specified stereo mode is not valid.\n");
+            "The specified stereo mode is not valid%s.\n",
+            error_message_addendum);
     return AVERROR(EINVAL);
 }
 
-- 
2.34.1

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 14+ messages in thread

* [FFmpeg-devel] [PATCH 6/9] avformat/matroska: Move ff_mkv_stereo3d_conv() to demuxer
  2023-08-11 10:34 [FFmpeg-devel] [PATCH 1/9] avformat/matroskaenc: Avoid atoi() Andreas Rheinhardt
                   ` (3 preceding siblings ...)
  2023-08-11 10:43 ` [FFmpeg-devel] [PATCH 5/9] avformat/matroskaenc: Improve message for WebM-incompatible StereoModes Andreas Rheinhardt
@ 2023-08-11 10:43 ` Andreas Rheinhardt
  2023-08-11 10:43 ` [FFmpeg-devel] [PATCH 7/9] avformat/matroskadec: Replace switch with array Andreas Rheinhardt
                   ` (5 subsequent siblings)
  10 siblings, 0 replies; 14+ messages in thread
From: Andreas Rheinhardt @ 2023-08-11 10:43 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Andreas Rheinhardt

It is now its only user; also make it static.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
---
 libavformat/matroska.c    | 58 ---------------------------------------
 libavformat/matroska.h    |  2 --
 libavformat/matroskadec.c | 58 ++++++++++++++++++++++++++++++++++++++-
 3 files changed, 57 insertions(+), 61 deletions(-)

diff --git a/libavformat/matroska.c b/libavformat/matroska.c
index acfacc85dd..5878594e68 100644
--- a/libavformat/matroska.c
+++ b/libavformat/matroska.c
@@ -19,8 +19,6 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
-#include "libavutil/stereo3d.h"
-
 #include "matroska.h"
 
 /* If you add a tag here that is not in ff_codec_bmp_tags[]
@@ -145,59 +143,3 @@ const char * const ff_matroska_video_stereo_mode[MATROSKA_VIDEO_STEREOMODE_TYPE_
     "block_lr",
     "block_rl",
 };
-
-int ff_mkv_stereo3d_conv(AVStream *st, MatroskaVideoStereoModeType stereo_mode)
-{
-    AVStereo3D *stereo;
-    int ret;
-
-    stereo = av_stereo3d_alloc();
-    if (!stereo)
-        return AVERROR(ENOMEM);
-
-    // note: the missing breaks are intentional
-    switch (stereo_mode) {
-    case MATROSKA_VIDEO_STEREOMODE_TYPE_MONO:
-        stereo->type = AV_STEREO3D_2D;
-        break;
-    case MATROSKA_VIDEO_STEREOMODE_TYPE_RIGHT_LEFT:
-        stereo->flags |= AV_STEREO3D_FLAG_INVERT;
-    case MATROSKA_VIDEO_STEREOMODE_TYPE_LEFT_RIGHT:
-        stereo->type = AV_STEREO3D_SIDEBYSIDE;
-        break;
-    case MATROSKA_VIDEO_STEREOMODE_TYPE_BOTTOM_TOP:
-        stereo->flags |= AV_STEREO3D_FLAG_INVERT;
-    case MATROSKA_VIDEO_STEREOMODE_TYPE_TOP_BOTTOM:
-        stereo->type = AV_STEREO3D_TOPBOTTOM;
-        break;
-    case MATROSKA_VIDEO_STEREOMODE_TYPE_CHECKERBOARD_RL:
-        stereo->flags |= AV_STEREO3D_FLAG_INVERT;
-    case MATROSKA_VIDEO_STEREOMODE_TYPE_CHECKERBOARD_LR:
-        stereo->type = AV_STEREO3D_CHECKERBOARD;
-        break;
-    case MATROSKA_VIDEO_STEREOMODE_TYPE_ROW_INTERLEAVED_RL:
-        stereo->flags |= AV_STEREO3D_FLAG_INVERT;
-    case MATROSKA_VIDEO_STEREOMODE_TYPE_ROW_INTERLEAVED_LR:
-        stereo->type = AV_STEREO3D_LINES;
-        break;
-    case MATROSKA_VIDEO_STEREOMODE_TYPE_COL_INTERLEAVED_RL:
-        stereo->flags |= AV_STEREO3D_FLAG_INVERT;
-    case MATROSKA_VIDEO_STEREOMODE_TYPE_COL_INTERLEAVED_LR:
-        stereo->type = AV_STEREO3D_COLUMNS;
-        break;
-    case MATROSKA_VIDEO_STEREOMODE_TYPE_BOTH_EYES_BLOCK_RL:
-        stereo->flags |= AV_STEREO3D_FLAG_INVERT;
-    case MATROSKA_VIDEO_STEREOMODE_TYPE_BOTH_EYES_BLOCK_LR:
-        stereo->type = AV_STEREO3D_FRAMESEQUENCE;
-        break;
-    }
-
-    ret = av_stream_add_side_data(st, AV_PKT_DATA_STEREO3D, (uint8_t *)stereo,
-                                  sizeof(*stereo));
-    if (ret < 0) {
-        av_freep(&stereo);
-        return ret;
-    }
-
-    return 0;
-}
diff --git a/libavformat/matroska.h b/libavformat/matroska.h
index 3a1ee740ce..359eb87832 100644
--- a/libavformat/matroska.h
+++ b/libavformat/matroska.h
@@ -437,8 +437,6 @@ extern const char * const ff_matroska_video_stereo_mode[MATROSKA_VIDEO_STEREOMOD
 #define TRACK_NUMBER "webm_dash_manifest_track_number"
 #define CODEC_PRIVATE_SIZE "webm_dash_manifest_codec_priv_size"
 
-int ff_mkv_stereo3d_conv(AVStream *st, MatroskaVideoStereoModeType stereo_mode);
-
 #define DVCC_DVVC_BLOCK_TYPE_NAME "Dolby Vision configuration"
 
 #endif /* AVFORMAT_MATROSKA_H */
diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c
index c6042eed2b..98695479c6 100644
--- a/libavformat/matroskadec.c
+++ b/libavformat/matroskadec.c
@@ -2163,6 +2163,62 @@ static void mkv_stereo_mode_display_mul(int stereo_mode,
     }
 }
 
+static int mkv_stereo3d_conv(AVStream *st, MatroskaVideoStereoModeType stereo_mode)
+{
+    AVStereo3D *stereo;
+    int ret;
+
+    stereo = av_stereo3d_alloc();
+    if (!stereo)
+        return AVERROR(ENOMEM);
+
+    // note: the missing breaks are intentional
+    switch (stereo_mode) {
+    case MATROSKA_VIDEO_STEREOMODE_TYPE_MONO:
+        stereo->type = AV_STEREO3D_2D;
+        break;
+    case MATROSKA_VIDEO_STEREOMODE_TYPE_RIGHT_LEFT:
+        stereo->flags |= AV_STEREO3D_FLAG_INVERT;
+    case MATROSKA_VIDEO_STEREOMODE_TYPE_LEFT_RIGHT:
+        stereo->type = AV_STEREO3D_SIDEBYSIDE;
+        break;
+    case MATROSKA_VIDEO_STEREOMODE_TYPE_BOTTOM_TOP:
+        stereo->flags |= AV_STEREO3D_FLAG_INVERT;
+    case MATROSKA_VIDEO_STEREOMODE_TYPE_TOP_BOTTOM:
+        stereo->type = AV_STEREO3D_TOPBOTTOM;
+        break;
+    case MATROSKA_VIDEO_STEREOMODE_TYPE_CHECKERBOARD_RL:
+        stereo->flags |= AV_STEREO3D_FLAG_INVERT;
+    case MATROSKA_VIDEO_STEREOMODE_TYPE_CHECKERBOARD_LR:
+        stereo->type = AV_STEREO3D_CHECKERBOARD;
+        break;
+    case MATROSKA_VIDEO_STEREOMODE_TYPE_ROW_INTERLEAVED_RL:
+        stereo->flags |= AV_STEREO3D_FLAG_INVERT;
+    case MATROSKA_VIDEO_STEREOMODE_TYPE_ROW_INTERLEAVED_LR:
+        stereo->type = AV_STEREO3D_LINES;
+        break;
+    case MATROSKA_VIDEO_STEREOMODE_TYPE_COL_INTERLEAVED_RL:
+        stereo->flags |= AV_STEREO3D_FLAG_INVERT;
+    case MATROSKA_VIDEO_STEREOMODE_TYPE_COL_INTERLEAVED_LR:
+        stereo->type = AV_STEREO3D_COLUMNS;
+        break;
+    case MATROSKA_VIDEO_STEREOMODE_TYPE_BOTH_EYES_BLOCK_RL:
+        stereo->flags |= AV_STEREO3D_FLAG_INVERT;
+    case MATROSKA_VIDEO_STEREOMODE_TYPE_BOTH_EYES_BLOCK_LR:
+        stereo->type = AV_STEREO3D_FRAMESEQUENCE;
+        break;
+    }
+
+    ret = av_stream_add_side_data(st, AV_PKT_DATA_STEREO3D, (uint8_t *)stereo,
+                                  sizeof(*stereo));
+    if (ret < 0) {
+        av_freep(&stereo);
+        return ret;
+    }
+
+    return 0;
+}
+
 static int mkv_parse_video_color(AVStream *st, const MatroskaTrack *track) {
     const MatroskaTrackVideoColor *color = track->video.color.elem;
     const MatroskaMasteringMeta *mastering_meta;
@@ -3008,7 +3064,7 @@ static int matroska_parse_tracks(AVFormatContext *s)
             // add stream level stereo3d side data if it is a supported format
             if (track->video.stereo_mode < MATROSKA_VIDEO_STEREOMODE_TYPE_NB &&
                 track->video.stereo_mode != 10 && track->video.stereo_mode != 12) {
-                int ret = ff_mkv_stereo3d_conv(st, track->video.stereo_mode);
+                int ret = mkv_stereo3d_conv(st, track->video.stereo_mode);
                 if (ret < 0)
                     return ret;
             }
-- 
2.34.1

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 14+ messages in thread

* [FFmpeg-devel] [PATCH 7/9] avformat/matroskadec: Replace switch with array
  2023-08-11 10:34 [FFmpeg-devel] [PATCH 1/9] avformat/matroskaenc: Avoid atoi() Andreas Rheinhardt
                   ` (4 preceding siblings ...)
  2023-08-11 10:43 ` [FFmpeg-devel] [PATCH 6/9] avformat/matroska: Move ff_mkv_stereo3d_conv() to demuxer Andreas Rheinhardt
@ 2023-08-11 10:43 ` Andreas Rheinhardt
  2023-08-11 10:43 ` [FFmpeg-devel] [PATCH 8/9] avformat/matroskadec: Use named constants instead of their value Andreas Rheinhardt
                   ` (4 subsequent siblings)
  10 siblings, 0 replies; 14+ messages in thread
From: Andreas Rheinhardt @ 2023-08-11 10:43 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Andreas Rheinhardt

This simplification reduces codesize.
(It even reduces the size of .rodata here, because
the jump table used by the compiler is bigger than
the actual array.)

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
---
 libavformat/matroskadec.c | 47 +++++++++------------------------------
 1 file changed, 11 insertions(+), 36 deletions(-)

diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c
index 98695479c6..e6797b2f57 100644
--- a/libavformat/matroskadec.c
+++ b/libavformat/matroskadec.c
@@ -2165,6 +2165,15 @@ static void mkv_stereo_mode_display_mul(int stereo_mode,
 
 static int mkv_stereo3d_conv(AVStream *st, MatroskaVideoStereoModeType stereo_mode)
 {
+    static const struct {
+        char type;
+        char flags;
+    } stereo_mode_conv [] = {
+#define STEREO_MODE_CONV(STEREOMODETYPE, STEREO3DTYPE, FLAGS, WDIV, HDIV, WEBM) \
+    [(STEREOMODETYPE)] = { .type = (STEREO3DTYPE), .flags = (FLAGS) },
+#define IGNORE(STEREOMODETYPE, WDIV, HDIV, WEBM)
+        STEREOMODE_STEREO3D_MAPPING(STEREO_MODE_CONV, IGNORE)
+    };
     AVStereo3D *stereo;
     int ret;
 
@@ -2172,42 +2181,8 @@ static int mkv_stereo3d_conv(AVStream *st, MatroskaVideoStereoModeType stereo_mo
     if (!stereo)
         return AVERROR(ENOMEM);
 
-    // note: the missing breaks are intentional
-    switch (stereo_mode) {
-    case MATROSKA_VIDEO_STEREOMODE_TYPE_MONO:
-        stereo->type = AV_STEREO3D_2D;
-        break;
-    case MATROSKA_VIDEO_STEREOMODE_TYPE_RIGHT_LEFT:
-        stereo->flags |= AV_STEREO3D_FLAG_INVERT;
-    case MATROSKA_VIDEO_STEREOMODE_TYPE_LEFT_RIGHT:
-        stereo->type = AV_STEREO3D_SIDEBYSIDE;
-        break;
-    case MATROSKA_VIDEO_STEREOMODE_TYPE_BOTTOM_TOP:
-        stereo->flags |= AV_STEREO3D_FLAG_INVERT;
-    case MATROSKA_VIDEO_STEREOMODE_TYPE_TOP_BOTTOM:
-        stereo->type = AV_STEREO3D_TOPBOTTOM;
-        break;
-    case MATROSKA_VIDEO_STEREOMODE_TYPE_CHECKERBOARD_RL:
-        stereo->flags |= AV_STEREO3D_FLAG_INVERT;
-    case MATROSKA_VIDEO_STEREOMODE_TYPE_CHECKERBOARD_LR:
-        stereo->type = AV_STEREO3D_CHECKERBOARD;
-        break;
-    case MATROSKA_VIDEO_STEREOMODE_TYPE_ROW_INTERLEAVED_RL:
-        stereo->flags |= AV_STEREO3D_FLAG_INVERT;
-    case MATROSKA_VIDEO_STEREOMODE_TYPE_ROW_INTERLEAVED_LR:
-        stereo->type = AV_STEREO3D_LINES;
-        break;
-    case MATROSKA_VIDEO_STEREOMODE_TYPE_COL_INTERLEAVED_RL:
-        stereo->flags |= AV_STEREO3D_FLAG_INVERT;
-    case MATROSKA_VIDEO_STEREOMODE_TYPE_COL_INTERLEAVED_LR:
-        stereo->type = AV_STEREO3D_COLUMNS;
-        break;
-    case MATROSKA_VIDEO_STEREOMODE_TYPE_BOTH_EYES_BLOCK_RL:
-        stereo->flags |= AV_STEREO3D_FLAG_INVERT;
-    case MATROSKA_VIDEO_STEREOMODE_TYPE_BOTH_EYES_BLOCK_LR:
-        stereo->type = AV_STEREO3D_FRAMESEQUENCE;
-        break;
-    }
+    stereo->type  = stereo_mode_conv[stereo_mode].type;
+    stereo->flags = stereo_mode_conv[stereo_mode].flags;
 
     ret = av_stream_add_side_data(st, AV_PKT_DATA_STEREO3D, (uint8_t *)stereo,
                                   sizeof(*stereo));
-- 
2.34.1

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 14+ messages in thread

* [FFmpeg-devel] [PATCH 8/9] avformat/matroskadec: Use named constants instead of their value
  2023-08-11 10:34 [FFmpeg-devel] [PATCH 1/9] avformat/matroskaenc: Avoid atoi() Andreas Rheinhardt
                   ` (5 preceding siblings ...)
  2023-08-11 10:43 ` [FFmpeg-devel] [PATCH 7/9] avformat/matroskadec: Replace switch with array Andreas Rheinhardt
@ 2023-08-11 10:43 ` Andreas Rheinhardt
  2023-08-11 13:20   ` Paul B Mahol
  2023-08-11 10:43 ` [FFmpeg-devel] [PATCH 9/9] avformat/riffdec: Pass logctx as void* instead of AVFormatContext* Andreas Rheinhardt
                   ` (3 subsequent siblings)
  10 siblings, 1 reply; 14+ messages in thread
From: Andreas Rheinhardt @ 2023-08-11 10:43 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Andreas Rheinhardt

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
---
 libavformat/matroskadec.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c
index e6797b2f57..21f52ccab2 100644
--- a/libavformat/matroskadec.c
+++ b/libavformat/matroskadec.c
@@ -3038,7 +3038,8 @@ static int matroska_parse_tracks(AVFormatContext *s)
             }
             // add stream level stereo3d side data if it is a supported format
             if (track->video.stereo_mode < MATROSKA_VIDEO_STEREOMODE_TYPE_NB &&
-                track->video.stereo_mode != 10 && track->video.stereo_mode != 12) {
+                track->video.stereo_mode != MATROSKA_VIDEO_STEREOMODE_TYPE_ANAGLYPH_CYAN_RED &&
+                track->video.stereo_mode != MATROSKA_VIDEO_STEREOMODE_TYPE_ANAGLYPH_GREEN_MAG) {
                 int ret = mkv_stereo3d_conv(st, track->video.stereo_mode);
                 if (ret < 0)
                     return ret;
-- 
2.34.1

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 14+ messages in thread

* [FFmpeg-devel] [PATCH 9/9] avformat/riffdec: Pass logctx as void* instead of AVFormatContext*
  2023-08-11 10:34 [FFmpeg-devel] [PATCH 1/9] avformat/matroskaenc: Avoid atoi() Andreas Rheinhardt
                   ` (6 preceding siblings ...)
  2023-08-11 10:43 ` [FFmpeg-devel] [PATCH 8/9] avformat/matroskadec: Use named constants instead of their value Andreas Rheinhardt
@ 2023-08-11 10:43 ` Andreas Rheinhardt
  2023-08-11 22:58 ` [FFmpeg-devel] [PATCH 10/11] fate/matroska: Add test for stereo 3D Andreas Rheinhardt
                   ` (2 subsequent siblings)
  10 siblings, 0 replies; 14+ messages in thread
From: Andreas Rheinhardt @ 2023-08-11 10:43 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Andreas Rheinhardt

Also stop second-guessing error codes from ff_get_extradata().

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
---
 libavformat/riff.h    |  3 ++-
 libavformat/riffdec.c | 22 ++++++++++++----------
 2 files changed, 14 insertions(+), 11 deletions(-)

diff --git a/libavformat/riff.h b/libavformat/riff.h
index 85d6786663..a93eadfeca 100644
--- a/libavformat/riff.h
+++ b/libavformat/riff.h
@@ -67,7 +67,8 @@ void ff_put_bmp_header(AVIOContext *pb, AVCodecParameters *par, int for_asf, int
 int ff_put_wav_header(AVFormatContext *s, AVIOContext *pb, AVCodecParameters *par, int flags);
 
 enum AVCodecID ff_wav_codec_get_id(unsigned int tag, int bps);
-int ff_get_wav_header(AVFormatContext *s, AVIOContext *pb, AVCodecParameters *par, int size, int big_endian);
+int ff_get_wav_header(void *logctx, AVIOContext *pb, AVCodecParameters *par,
+                      int size, int big_endian);
 
 extern const AVCodecTag ff_codec_bmp_tags[]; // exposed through avformat_get_riff_video_tags()
 extern const AVCodecTag ff_codec_wav_tags[];
diff --git a/libavformat/riffdec.c b/libavformat/riffdec.c
index 1c149388ab..d987858c73 100644
--- a/libavformat/riffdec.c
+++ b/libavformat/riffdec.c
@@ -58,7 +58,7 @@ enum AVCodecID ff_codec_guid_get_id(const AVCodecGuid *guids, ff_asf_guid guid)
  * an openended structure.
  */
 
-static void parse_waveformatex(AVFormatContext *s, AVIOContext *pb, AVCodecParameters *par)
+static void parse_waveformatex(void *logctx, AVIOContext *pb, AVCodecParameters *par)
 {
     ff_asf_guid subformat;
     int bps;
@@ -84,21 +84,21 @@ static void parse_waveformatex(AVFormatContext *s, AVIOContext *pb, AVCodecParam
     } else {
         par->codec_id = ff_codec_guid_get_id(ff_codec_wav_guids, subformat);
         if (!par->codec_id)
-            av_log(s, AV_LOG_WARNING,
+            av_log(logctx, AV_LOG_WARNING,
                    "unknown subformat:"FF_PRI_GUID"\n",
                    FF_ARG_GUID(subformat));
     }
 }
 
 /* "big_endian" values are needed for RIFX file format */
-int ff_get_wav_header(AVFormatContext *s, AVIOContext *pb,
+int ff_get_wav_header(void *logctx, AVIOContext *pb,
                       AVCodecParameters *par, int size, int big_endian)
 {
-    int id, channels = 0;
+    int id, channels = 0, ret;
     uint64_t bitrate = 0;
 
     if (size < 14) {
-        avpriv_request_sample(s, "wav header size < 14");
+        avpriv_request_sample(logctx, "wav header size < 14");
         return AVERROR_INVALIDDATA;
     }
 
@@ -139,18 +139,19 @@ int ff_get_wav_header(AVFormatContext *s, AVIOContext *pb,
     if (size >= 18 && id != 0x0165) {  /* We're obviously dealing with WAVEFORMATEX */
         int cbSize = avio_rl16(pb); /* cbSize */
         if (big_endian) {
-            avpriv_report_missing_feature(s, "WAVEFORMATEX support for RIFX files");
+            avpriv_report_missing_feature(logctx, "WAVEFORMATEX support for RIFX files");
             return AVERROR_PATCHWELCOME;
         }
         size  -= 18;
         cbSize = FFMIN(size, cbSize);
         if (cbSize >= 22 && id == 0xfffe) { /* WAVEFORMATEXTENSIBLE */
-            parse_waveformatex(s, pb, par);
+            parse_waveformatex(logctx, pb, par);
             cbSize -= 22;
             size   -= 22;
         }
         if (cbSize > 0) {
-            if (ff_get_extradata(s, par, pb, cbSize) < 0)
+            ret = ff_get_extradata(logctx, par, pb, cbSize);
+            if (ret < 0)
                 return AVERROR(ENOMEM);
             size -= cbSize;
         }
@@ -162,7 +163,8 @@ int ff_get_wav_header(AVFormatContext *s, AVIOContext *pb,
         int nb_streams, i;
 
         size -= 4;
-        if (ff_get_extradata(s, par, pb, size) < 0)
+        ret = ff_get_extradata(logctx, par, pb, size);
+        if (ret < 0)
             return AVERROR(ENOMEM);
         nb_streams         = AV_RL16(par->extradata + 4);
         par->sample_rate   = AV_RL32(par->extradata + 12);
@@ -177,7 +179,7 @@ int ff_get_wav_header(AVFormatContext *s, AVIOContext *pb,
     par->bit_rate = bitrate;
 
     if (par->sample_rate <= 0) {
-        av_log(s, AV_LOG_ERROR,
+        av_log(logctx, AV_LOG_ERROR,
                "Invalid sample rate: %d\n", par->sample_rate);
         return AVERROR_INVALIDDATA;
     }
-- 
2.34.1

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [FFmpeg-devel] [PATCH 8/9] avformat/matroskadec: Use named constants instead of their value
  2023-08-11 10:43 ` [FFmpeg-devel] [PATCH 8/9] avformat/matroskadec: Use named constants instead of their value Andreas Rheinhardt
@ 2023-08-11 13:20   ` Paul B Mahol
  0 siblings, 0 replies; 14+ messages in thread
From: Paul B Mahol @ 2023-08-11 13:20 UTC (permalink / raw)
  To: FFmpeg development discussions and patches; +Cc: Andreas Rheinhardt

LGTM
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 14+ messages in thread

* [FFmpeg-devel] [PATCH 10/11] fate/matroska: Add test for stereo 3D
  2023-08-11 10:34 [FFmpeg-devel] [PATCH 1/9] avformat/matroskaenc: Avoid atoi() Andreas Rheinhardt
                   ` (7 preceding siblings ...)
  2023-08-11 10:43 ` [FFmpeg-devel] [PATCH 9/9] avformat/riffdec: Pass logctx as void* instead of AVFormatContext* Andreas Rheinhardt
@ 2023-08-11 22:58 ` Andreas Rheinhardt
  2023-08-12 16:27   ` Andreas Rheinhardt
  2023-08-11 22:58 ` [FFmpeg-devel] [PATCH 11/11] fate/matroska: Fix requirements of fate-matroska-alac-remux test Andreas Rheinhardt
  2023-08-13 23:00 ` [FFmpeg-devel] [PATCH 1/9] avformat/matroskaenc: Avoid atoi() Andreas Rheinhardt
  10 siblings, 1 reply; 14+ messages in thread
From: Andreas Rheinhardt @ 2023-08-11 22:58 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Andreas Rheinhardt

Just mark a non-stereo file as stereo to test the code.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
---
This test would not pass on master as-is due to the anaglyph modes
which are broken on master. I intend to apply it before 4/9
so that fixing the anaglyph modes is visible in the changes to FATE. 

 tests/fate/matroska.mak             |  23 ++++
 tests/ref/fate/matroska-stereo_mode | 195 ++++++++++++++++++++++++++++
 2 files changed, 218 insertions(+)
 create mode 100644 tests/ref/fate/matroska-stereo_mode

diff --git a/tests/fate/matroska.mak b/tests/fate/matroska.mak
index 1d68be81c8..16285a2dc8 100644
--- a/tests/fate/matroska.mak
+++ b/tests/fate/matroska.mak
@@ -215,6 +215,29 @@ fate-matroska-dvbsub-remux: CMD = transcode mpegts $(TARGET_SAMPLES)/sub/dvbsubt
 FATE_MATROSKA_FFPROBE-$(call ALLYES, MATROSKA_DEMUXER) += fate-matroska-spherical-mono
 fate-matroska-spherical-mono: CMD = run ffprobe$(PROGSSUF)$(EXESUF) -show_entries stream_side_data_list -select_streams v -v 0 $(TARGET_SAMPLES)/mkv/spherical.mkv
 
+# This test tests the handling of AVStereo3D information, in particular
+# the ability to set it via metadata in the muxer (the file itself is
+# actually an ordinary file with a single view). It also tests
+# correctly writing the display dimensions in the presence of stereo metadata.
+# The test also covers reformatting Theora extradata as well as testing
+# default_mode infer in the presence of tracks already marked as default.
+# It furthermore tests tag languages as well as stream languages,
+# in particular in their various forms (e.g. de vs deu vs ger for German)
+# and also the language-country code form.
+FATE_MATROSKA_FFMPEG_FFPROBE-$(call REMUX, MATROSKA, OGG_DEMUXER THEORA_DECODER) += fate-matroska-stereo_mode
+fate-matroska-stereo_mode: CMD = transcode ogg $(TARGET_SAMPLES)/vp3/offset_test.ogv matroska \
+    "-c copy -write_crc32 0 -default_mode infer \
+     -map 0 -disposition:s:0 +original+dub -metadata:s:0 language=ger \
+     -map 0 -metadata:s:1 stereo_mode=left_right -metadata:s:1 language=ger-at -metadata:s:1 description-ger=Deutsch -metadata:s:1 description-fre=Français \
+     -map 0 -metadata:s:2 stereo_mode=bottom_top -metadata:s:2 language=eng -metadata:s:2 description-de=Deutsch -metadata:s:2 description-fra=Français \
+     -map 0 -metadata:s:3 stereo_mode=row_interleaved_rl -sar:3 3:1 -disposition:3 +default -metadata:s:3 language=deu-at \
+     -map 0 -metadata:s:4 stereo_mode=col_interleaved_rl -sar:4 16:9 -metadata:s:4 language=fre -metadata:s:4 description-deu-at=Österreichisch \
+     -map 0 -metadata:s:5 stereo_mode=anaglyph_cyan_red -sar:5 16:9 -disposition:5 +default -metadata:s:5 language=fra \
+     -map 0 -metadata:s:6 stereo_mode=12 -sar:6 2:1 -metadata:s:6 language=de -metadata:s:6 description-deu=Deutsch" \
+    "-map 0 -c copy" \
+    "-show_entries stream_disposition=default,original,dub:stream_tags:stream_side_data_list"
+
+
 # The following test tests the various flavours of WebVTT in WebM.
 # It also tests that dispositions not supported by WebM are not written
 # (and therefore lost). It moreover tests that the muxer writes CuePoints
diff --git a/tests/ref/fate/matroska-stereo_mode b/tests/ref/fate/matroska-stereo_mode
new file mode 100644
index 0000000000..745c294576
--- /dev/null
+++ b/tests/ref/fate/matroska-stereo_mode
@@ -0,0 +1,195 @@
+cbfda33da837da47bdb9f7d2568ab626 *tests/data/fate/matroska-stereo_mode.matroska
+1470766 tests/data/fate/matroska-stereo_mode.matroska
+#extradata 0:     3510, 0x560c3919
+#extradata 1:     3510, 0x560c3919
+#extradata 2:     3510, 0x560c3919
+#extradata 3:     3510, 0x560c3919
+#extradata 4:     3510, 0x560c3919
+#extradata 5:     3510, 0x560c3919
+#extradata 6:     3510, 0x560c3919
+#tb 0: 1/1000
+#media_type 0: video
+#codec_id 0: theora
+#dimensions 0: 512x512
+#sar 0: 0/1
+#tb 1: 1/1000
+#media_type 1: video
+#codec_id 1: theora
+#dimensions 1: 512x512
+#sar 1: 1/1
+#tb 2: 1/1000
+#media_type 2: video
+#codec_id 2: theora
+#dimensions 2: 512x512
+#sar 2: 1/1
+#tb 3: 1/1000
+#media_type 3: video
+#codec_id 3: theora
+#dimensions 3: 512x512
+#sar 3: 3/1
+#tb 4: 1/1000
+#media_type 4: video
+#codec_id 4: theora
+#dimensions 4: 512x512
+#sar 4: 455/256
+#tb 5: 1/1000
+#media_type 5: video
+#codec_id 5: theora
+#dimensions 5: 512x512
+#sar 5: 16/9
+#tb 6: 1/1000
+#media_type 6: video
+#codec_id 6: theora
+#dimensions 6: 512x512
+#sar 6: 2/1
+0,          0,          0,     1000,   206173, 0x95af7455
+1,          0,          0,     1000,   206173, 0x95af7455, S=1,       12
+2,          0,          0,     1000,   206173, 0x95af7455, S=1,       12
+3,          0,          0,     1000,   206173, 0x95af7455, S=1,       12
+4,          0,          0,     1000,   206173, 0x95af7455, S=1,       12
+5,          0,          0,     1000,   206173, 0x95af7455
+6,          0,          0,     1000,   206173, 0x95af7455
+0,       1000,       1000,     1000,       36, 0x34891010, F=0x0
+1,       1000,       1000,     1000,       36, 0x34891010, F=0x0
+2,       1000,       1000,     1000,       36, 0x34891010, F=0x0
+3,       1000,       1000,     1000,       36, 0x34891010, F=0x0
+4,       1000,       1000,     1000,       36, 0x34891010, F=0x0
+5,       1000,       1000,     1000,       36, 0x34891010, F=0x0
+6,       1000,       1000,     1000,       36, 0x34891010, F=0x0
+0,       2000,       2000,     1000,        9, 0x17e5047e, F=0x0
+1,       2000,       2000,     1000,        9, 0x17e5047e, F=0x0
+2,       2000,       2000,     1000,        9, 0x17e5047e, F=0x0
+3,       2000,       2000,     1000,        9, 0x17e5047e, F=0x0
+4,       2000,       2000,     1000,        9, 0x17e5047e, F=0x0
+5,       2000,       2000,     1000,        9, 0x17e5047e, F=0x0
+6,       2000,       2000,     1000,        9, 0x17e5047e, F=0x0
+0,       3000,       3000,     1000,        9, 0x17e5047e, F=0x0
+1,       3000,       3000,     1000,        9, 0x17e5047e, F=0x0
+2,       3000,       3000,     1000,        9, 0x17e5047e, F=0x0
+3,       3000,       3000,     1000,        9, 0x17e5047e, F=0x0
+4,       3000,       3000,     1000,        9, 0x17e5047e, F=0x0
+5,       3000,       3000,     1000,        9, 0x17e5047e, F=0x0
+6,       3000,       3000,     1000,        9, 0x17e5047e, F=0x0
+0,       4000,       4000,     1000,        9, 0x17e5047e, F=0x0
+1,       4000,       4000,     1000,        9, 0x17e5047e, F=0x0
+2,       4000,       4000,     1000,        9, 0x17e5047e, F=0x0
+3,       4000,       4000,     1000,        9, 0x17e5047e, F=0x0
+4,       4000,       4000,     1000,        9, 0x17e5047e, F=0x0
+5,       4000,       4000,     1000,        9, 0x17e5047e, F=0x0
+6,       4000,       4000,     1000,        9, 0x17e5047e, F=0x0
+0,       5000,       5000,     1000,        9, 0x17e5047e, F=0x0
+1,       5000,       5000,     1000,        9, 0x17e5047e, F=0x0
+2,       5000,       5000,     1000,        9, 0x17e5047e, F=0x0
+3,       5000,       5000,     1000,        9, 0x17e5047e, F=0x0
+4,       5000,       5000,     1000,        9, 0x17e5047e, F=0x0
+5,       5000,       5000,     1000,        9, 0x17e5047e, F=0x0
+6,       5000,       5000,     1000,        9, 0x17e5047e, F=0x0
+0,       6000,       6000,     1000,        9, 0x17e5047e, F=0x0
+1,       6000,       6000,     1000,        9, 0x17e5047e, F=0x0
+2,       6000,       6000,     1000,        9, 0x17e5047e, F=0x0
+3,       6000,       6000,     1000,        9, 0x17e5047e, F=0x0
+4,       6000,       6000,     1000,        9, 0x17e5047e, F=0x0
+5,       6000,       6000,     1000,        9, 0x17e5047e, F=0x0
+6,       6000,       6000,     1000,        9, 0x17e5047e, F=0x0
+0,       7000,       7000,     1000,        9, 0x17e5047e, F=0x0
+1,       7000,       7000,     1000,        9, 0x17e5047e, F=0x0
+2,       7000,       7000,     1000,        9, 0x17e5047e, F=0x0
+3,       7000,       7000,     1000,        9, 0x17e5047e, F=0x0
+4,       7000,       7000,     1000,        9, 0x17e5047e, F=0x0
+5,       7000,       7000,     1000,        9, 0x17e5047e, F=0x0
+6,       7000,       7000,     1000,        9, 0x17e5047e, F=0x0
+0,       8000,       8000,     1000,        9, 0x17e5047e, F=0x0
+1,       8000,       8000,     1000,        9, 0x17e5047e, F=0x0
+2,       8000,       8000,     1000,        9, 0x17e5047e, F=0x0
+3,       8000,       8000,     1000,        9, 0x17e5047e, F=0x0
+4,       8000,       8000,     1000,        9, 0x17e5047e, F=0x0
+5,       8000,       8000,     1000,        9, 0x17e5047e, F=0x0
+6,       8000,       8000,     1000,        9, 0x17e5047e, F=0x0
+0,       9000,       9000,     1000,        9, 0x17e5047e, F=0x0
+1,       9000,       9000,     1000,        9, 0x17e5047e, F=0x0
+2,       9000,       9000,     1000,        9, 0x17e5047e, F=0x0
+3,       9000,       9000,     1000,        9, 0x17e5047e, F=0x0
+4,       9000,       9000,     1000,        9, 0x17e5047e, F=0x0
+5,       9000,       9000,     1000,        9, 0x17e5047e, F=0x0
+6,       9000,       9000,     1000,        9, 0x17e5047e, F=0x0
+[STREAM]
+DISPOSITION:default=0
+DISPOSITION:dub=0
+DISPOSITION:original=0
+TAG:language=ger
+TAG:DURATION=00:00:10.000000000
+[/STREAM]
+[STREAM]
+DISPOSITION:default=0
+DISPOSITION:dub=0
+DISPOSITION:original=0
+TAG:language=ger-at
+TAG:stereo_mode=left_right
+TAG:DESCRIPTION-ger=Deutsch
+TAG:DESCRIPTION-fre=Français
+TAG:DURATION=00:00:10.000000000
+[SIDE_DATA]
+side_data_type=Stereo 3D
+type=side by side
+inverted=0
+[/SIDE_DATA]
+[/STREAM]
+[STREAM]
+DISPOSITION:default=0
+DISPOSITION:dub=0
+DISPOSITION:original=0
+TAG:language=eng
+TAG:stereo_mode=bottom_top
+TAG:DESCRIPTION-ger=Deutsch
+TAG:DESCRIPTION-fre=Français
+TAG:DURATION=00:00:10.000000000
+[SIDE_DATA]
+side_data_type=Stereo 3D
+type=top and bottom
+inverted=1
+[/SIDE_DATA]
+[/STREAM]
+[STREAM]
+DISPOSITION:default=1
+DISPOSITION:dub=0
+DISPOSITION:original=0
+TAG:language=deu-at
+TAG:stereo_mode=row_interleaved_rl
+TAG:DURATION=00:00:10.000000000
+[SIDE_DATA]
+side_data_type=Stereo 3D
+type=interleaved lines
+inverted=1
+[/SIDE_DATA]
+[/STREAM]
+[STREAM]
+DISPOSITION:default=0
+DISPOSITION:dub=0
+DISPOSITION:original=0
+TAG:language=fre
+TAG:stereo_mode=col_interleaved_rl
+TAG:DESCRIPTION-DEU-AT=Österreichisch
+TAG:DURATION=00:00:10.000000000
+[SIDE_DATA]
+side_data_type=Stereo 3D
+type=interleaved columns
+inverted=1
+[/SIDE_DATA]
+[/STREAM]
+[STREAM]
+DISPOSITION:default=1
+DISPOSITION:dub=0
+DISPOSITION:original=0
+TAG:language=fra
+TAG:stereo_mode=anaglyph_cyan_red
+TAG:DURATION=00:00:10.000000000
+[/STREAM]
+[STREAM]
+DISPOSITION:default=0
+DISPOSITION:dub=0
+DISPOSITION:original=0
+TAG:language=de
+TAG:stereo_mode=anaglyph_green_magenta
+TAG:DESCRIPTION-ger=Deutsch
+TAG:DURATION=00:00:10.000000000
+[/STREAM]
-- 
2.34.1

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 14+ messages in thread

* [FFmpeg-devel] [PATCH 11/11] fate/matroska: Fix requirements of fate-matroska-alac-remux test
  2023-08-11 10:34 [FFmpeg-devel] [PATCH 1/9] avformat/matroskaenc: Avoid atoi() Andreas Rheinhardt
                   ` (8 preceding siblings ...)
  2023-08-11 22:58 ` [FFmpeg-devel] [PATCH 10/11] fate/matroska: Add test for stereo 3D Andreas Rheinhardt
@ 2023-08-11 22:58 ` Andreas Rheinhardt
  2023-08-13 23:00 ` [FFmpeg-devel] [PATCH 1/9] avformat/matroskaenc: Avoid atoi() Andreas Rheinhardt
  10 siblings, 0 replies; 14+ messages in thread
From: Andreas Rheinhardt @ 2023-08-11 22:58 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Andreas Rheinhardt

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
---
 tests/fate/matroska.mak | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tests/fate/matroska.mak b/tests/fate/matroska.mak
index 16285a2dc8..44f5c535e4 100644
--- a/tests/fate/matroska.mak
+++ b/tests/fate/matroska.mak
@@ -34,7 +34,7 @@ fate-matroska-lzo-decompression: CMD = framecrc -i $(TARGET_SAMPLES)/mkv/lzo.mka
 # This tests that the ALAC extradata is correctly transformed upon remuxing.
 # It also tests setting the AV_DISPOSITION_COMMENT disposition as well as
 # writing creation_time metadata.
-FATE_MATROSKA_FFMPEG_FFPROBE-$(call REMUX, MATROSKA) += fate-matroska-alac-remux
+FATE_MATROSKA_FFMPEG_FFPROBE-$(call REMUX, MATROSKA, MOV_DEMUXER) += fate-matroska-alac-remux
 fate-matroska-alac-remux: CMD = transcode mov $(TARGET_SAMPLES)/lossless-audio/inside.m4a matroska "-map 0:a -c copy -metadata creation_time=2009-01-25T16:08:26.000000Z -disposition +comment" "-c copy" "-show_entries format_tags:stream_disposition"
 
 # This tests that the matroska demuxer correctly propagates
-- 
2.34.1

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [FFmpeg-devel] [PATCH 10/11] fate/matroska: Add test for stereo 3D
  2023-08-11 22:58 ` [FFmpeg-devel] [PATCH 10/11] fate/matroska: Add test for stereo 3D Andreas Rheinhardt
@ 2023-08-12 16:27   ` Andreas Rheinhardt
  0 siblings, 0 replies; 14+ messages in thread
From: Andreas Rheinhardt @ 2023-08-12 16:27 UTC (permalink / raw)
  To: ffmpeg-devel

Andreas Rheinhardt:
> Just mark a non-stereo file as stereo to test the code.
> 
> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
> ---
> This test would not pass on master as-is due to the anaglyph modes
> which are broken on master. I intend to apply it before 4/9
> so that fixing the anaglyph modes is visible in the changes to FATE. 
> 
>  tests/fate/matroska.mak             |  23 ++++
>  tests/ref/fate/matroska-stereo_mode | 195 ++++++++++++++++++++++++++++
>  2 files changed, 218 insertions(+)
>  create mode 100644 tests/ref/fate/matroska-stereo_mode
> 
> diff --git a/tests/fate/matroska.mak b/tests/fate/matroska.mak
> index 1d68be81c8..16285a2dc8 100644
> --- a/tests/fate/matroska.mak
> +++ b/tests/fate/matroska.mak
> @@ -215,6 +215,29 @@ fate-matroska-dvbsub-remux: CMD = transcode mpegts $(TARGET_SAMPLES)/sub/dvbsubt
>  FATE_MATROSKA_FFPROBE-$(call ALLYES, MATROSKA_DEMUXER) += fate-matroska-spherical-mono
>  fate-matroska-spherical-mono: CMD = run ffprobe$(PROGSSUF)$(EXESUF) -show_entries stream_side_data_list -select_streams v -v 0 $(TARGET_SAMPLES)/mkv/spherical.mkv
>  
> +# This test tests the handling of AVStereo3D information, in particular
> +# the ability to set it via metadata in the muxer (the file itself is
> +# actually an ordinary file with a single view). It also tests
> +# correctly writing the display dimensions in the presence of stereo metadata.
> +# The test also covers reformatting Theora extradata as well as testing
> +# default_mode infer in the presence of tracks already marked as default.
> +# It furthermore tests tag languages as well as stream languages,
> +# in particular in their various forms (e.g. de vs deu vs ger for German)
> +# and also the language-country code form.
> +FATE_MATROSKA_FFMPEG_FFPROBE-$(call REMUX, MATROSKA, OGG_DEMUXER THEORA_DECODER) += fate-matroska-stereo_mode
> +fate-matroska-stereo_mode: CMD = transcode ogg $(TARGET_SAMPLES)/vp3/offset_test.ogv matroska \
> +    "-c copy -write_crc32 0 -default_mode infer \
> +     -map 0 -disposition:s:0 +original+dub -metadata:s:0 language=ger \
> +     -map 0 -metadata:s:1 stereo_mode=left_right -metadata:s:1 language=ger-at -metadata:s:1 description-ger=Deutsch -metadata:s:1 description-fre=Français \
> +     -map 0 -metadata:s:2 stereo_mode=bottom_top -metadata:s:2 language=eng -metadata:s:2 description-de=Deutsch -metadata:s:2 description-fra=Français \
> +     -map 0 -metadata:s:3 stereo_mode=row_interleaved_rl -sar:3 3:1 -disposition:3 +default -metadata:s:3 language=deu-at \
> +     -map 0 -metadata:s:4 stereo_mode=col_interleaved_rl -sar:4 16:9 -metadata:s:4 language=fre -metadata:s:4 description-deu-at=Österreichisch \
> +     -map 0 -metadata:s:5 stereo_mode=anaglyph_cyan_red -sar:5 16:9 -disposition:5 +default -metadata:s:5 language=fra \
> +     -map 0 -metadata:s:6 stereo_mode=12 -sar:6 2:1 -metadata:s:6 language=de -metadata:s:6 description-deu=Deutsch" \
> +    "-map 0 -c copy" \
> +    "-show_entries stream_disposition=default,original,dub:stream_tags:stream_side_data_list"
> +
> +
>  # The following test tests the various flavours of WebVTT in WebM.
>  # It also tests that dispositions not supported by WebM are not written
>  # (and therefore lost). It moreover tests that the muxer writes CuePoints
> diff --git a/tests/ref/fate/matroska-stereo_mode b/tests/ref/fate/matroska-stereo_mode
> new file mode 100644
> index 0000000000..745c294576
> --- /dev/null
> +++ b/tests/ref/fate/matroska-stereo_mode
> @@ -0,0 +1,195 @@
> +cbfda33da837da47bdb9f7d2568ab626 *tests/data/fate/matroska-stereo_mode.matroska
> +1470766 tests/data/fate/matroska-stereo_mode.matroska
> +#extradata 0:     3510, 0x560c3919
> +#extradata 1:     3510, 0x560c3919
> +#extradata 2:     3510, 0x560c3919
> +#extradata 3:     3510, 0x560c3919
> +#extradata 4:     3510, 0x560c3919
> +#extradata 5:     3510, 0x560c3919
> +#extradata 6:     3510, 0x560c3919
> +#tb 0: 1/1000
> +#media_type 0: video
> +#codec_id 0: theora
> +#dimensions 0: 512x512
> +#sar 0: 0/1
> +#tb 1: 1/1000
> +#media_type 1: video
> +#codec_id 1: theora
> +#dimensions 1: 512x512
> +#sar 1: 1/1
> +#tb 2: 1/1000
> +#media_type 2: video
> +#codec_id 2: theora
> +#dimensions 2: 512x512
> +#sar 2: 1/1
> +#tb 3: 1/1000
> +#media_type 3: video
> +#codec_id 3: theora
> +#dimensions 3: 512x512
> +#sar 3: 3/1
> +#tb 4: 1/1000
> +#media_type 4: video
> +#codec_id 4: theora
> +#dimensions 4: 512x512
> +#sar 4: 455/256
> +#tb 5: 1/1000
> +#media_type 5: video
> +#codec_id 5: theora
> +#dimensions 5: 512x512
> +#sar 5: 16/9
> +#tb 6: 1/1000
> +#media_type 6: video
> +#codec_id 6: theora
> +#dimensions 6: 512x512
> +#sar 6: 2/1
> +0,          0,          0,     1000,   206173, 0x95af7455
> +1,          0,          0,     1000,   206173, 0x95af7455, S=1,       12
> +2,          0,          0,     1000,   206173, 0x95af7455, S=1,       12
> +3,          0,          0,     1000,   206173, 0x95af7455, S=1,       12
> +4,          0,          0,     1000,   206173, 0x95af7455, S=1,       12
> +5,          0,          0,     1000,   206173, 0x95af7455
> +6,          0,          0,     1000,   206173, 0x95af7455
> +0,       1000,       1000,     1000,       36, 0x34891010, F=0x0
> +1,       1000,       1000,     1000,       36, 0x34891010, F=0x0
> +2,       1000,       1000,     1000,       36, 0x34891010, F=0x0
> +3,       1000,       1000,     1000,       36, 0x34891010, F=0x0
> +4,       1000,       1000,     1000,       36, 0x34891010, F=0x0
> +5,       1000,       1000,     1000,       36, 0x34891010, F=0x0
> +6,       1000,       1000,     1000,       36, 0x34891010, F=0x0
> +0,       2000,       2000,     1000,        9, 0x17e5047e, F=0x0
> +1,       2000,       2000,     1000,        9, 0x17e5047e, F=0x0
> +2,       2000,       2000,     1000,        9, 0x17e5047e, F=0x0
> +3,       2000,       2000,     1000,        9, 0x17e5047e, F=0x0
> +4,       2000,       2000,     1000,        9, 0x17e5047e, F=0x0
> +5,       2000,       2000,     1000,        9, 0x17e5047e, F=0x0
> +6,       2000,       2000,     1000,        9, 0x17e5047e, F=0x0
> +0,       3000,       3000,     1000,        9, 0x17e5047e, F=0x0
> +1,       3000,       3000,     1000,        9, 0x17e5047e, F=0x0
> +2,       3000,       3000,     1000,        9, 0x17e5047e, F=0x0
> +3,       3000,       3000,     1000,        9, 0x17e5047e, F=0x0
> +4,       3000,       3000,     1000,        9, 0x17e5047e, F=0x0
> +5,       3000,       3000,     1000,        9, 0x17e5047e, F=0x0
> +6,       3000,       3000,     1000,        9, 0x17e5047e, F=0x0
> +0,       4000,       4000,     1000,        9, 0x17e5047e, F=0x0
> +1,       4000,       4000,     1000,        9, 0x17e5047e, F=0x0
> +2,       4000,       4000,     1000,        9, 0x17e5047e, F=0x0
> +3,       4000,       4000,     1000,        9, 0x17e5047e, F=0x0
> +4,       4000,       4000,     1000,        9, 0x17e5047e, F=0x0
> +5,       4000,       4000,     1000,        9, 0x17e5047e, F=0x0
> +6,       4000,       4000,     1000,        9, 0x17e5047e, F=0x0
> +0,       5000,       5000,     1000,        9, 0x17e5047e, F=0x0
> +1,       5000,       5000,     1000,        9, 0x17e5047e, F=0x0
> +2,       5000,       5000,     1000,        9, 0x17e5047e, F=0x0
> +3,       5000,       5000,     1000,        9, 0x17e5047e, F=0x0
> +4,       5000,       5000,     1000,        9, 0x17e5047e, F=0x0
> +5,       5000,       5000,     1000,        9, 0x17e5047e, F=0x0
> +6,       5000,       5000,     1000,        9, 0x17e5047e, F=0x0
> +0,       6000,       6000,     1000,        9, 0x17e5047e, F=0x0
> +1,       6000,       6000,     1000,        9, 0x17e5047e, F=0x0
> +2,       6000,       6000,     1000,        9, 0x17e5047e, F=0x0
> +3,       6000,       6000,     1000,        9, 0x17e5047e, F=0x0
> +4,       6000,       6000,     1000,        9, 0x17e5047e, F=0x0
> +5,       6000,       6000,     1000,        9, 0x17e5047e, F=0x0
> +6,       6000,       6000,     1000,        9, 0x17e5047e, F=0x0
> +0,       7000,       7000,     1000,        9, 0x17e5047e, F=0x0
> +1,       7000,       7000,     1000,        9, 0x17e5047e, F=0x0
> +2,       7000,       7000,     1000,        9, 0x17e5047e, F=0x0
> +3,       7000,       7000,     1000,        9, 0x17e5047e, F=0x0
> +4,       7000,       7000,     1000,        9, 0x17e5047e, F=0x0
> +5,       7000,       7000,     1000,        9, 0x17e5047e, F=0x0
> +6,       7000,       7000,     1000,        9, 0x17e5047e, F=0x0
> +0,       8000,       8000,     1000,        9, 0x17e5047e, F=0x0
> +1,       8000,       8000,     1000,        9, 0x17e5047e, F=0x0
> +2,       8000,       8000,     1000,        9, 0x17e5047e, F=0x0
> +3,       8000,       8000,     1000,        9, 0x17e5047e, F=0x0
> +4,       8000,       8000,     1000,        9, 0x17e5047e, F=0x0
> +5,       8000,       8000,     1000,        9, 0x17e5047e, F=0x0
> +6,       8000,       8000,     1000,        9, 0x17e5047e, F=0x0
> +0,       9000,       9000,     1000,        9, 0x17e5047e, F=0x0
> +1,       9000,       9000,     1000,        9, 0x17e5047e, F=0x0
> +2,       9000,       9000,     1000,        9, 0x17e5047e, F=0x0
> +3,       9000,       9000,     1000,        9, 0x17e5047e, F=0x0
> +4,       9000,       9000,     1000,        9, 0x17e5047e, F=0x0
> +5,       9000,       9000,     1000,        9, 0x17e5047e, F=0x0
> +6,       9000,       9000,     1000,        9, 0x17e5047e, F=0x0
> +[STREAM]
> +DISPOSITION:default=0
> +DISPOSITION:dub=0
> +DISPOSITION:original=0
> +TAG:language=ger
> +TAG:DURATION=00:00:10.000000000
> +[/STREAM]
> +[STREAM]
> +DISPOSITION:default=0
> +DISPOSITION:dub=0
> +DISPOSITION:original=0
> +TAG:language=ger-at
> +TAG:stereo_mode=left_right
> +TAG:DESCRIPTION-ger=Deutsch
> +TAG:DESCRIPTION-fre=Français
> +TAG:DURATION=00:00:10.000000000
> +[SIDE_DATA]
> +side_data_type=Stereo 3D
> +type=side by side
> +inverted=0
> +[/SIDE_DATA]
> +[/STREAM]
> +[STREAM]
> +DISPOSITION:default=0
> +DISPOSITION:dub=0
> +DISPOSITION:original=0
> +TAG:language=eng
> +TAG:stereo_mode=bottom_top
> +TAG:DESCRIPTION-ger=Deutsch
> +TAG:DESCRIPTION-fre=Français
> +TAG:DURATION=00:00:10.000000000
> +[SIDE_DATA]
> +side_data_type=Stereo 3D
> +type=top and bottom
> +inverted=1
> +[/SIDE_DATA]
> +[/STREAM]
> +[STREAM]
> +DISPOSITION:default=1
> +DISPOSITION:dub=0
> +DISPOSITION:original=0
> +TAG:language=deu-at
> +TAG:stereo_mode=row_interleaved_rl
> +TAG:DURATION=00:00:10.000000000
> +[SIDE_DATA]
> +side_data_type=Stereo 3D
> +type=interleaved lines
> +inverted=1
> +[/SIDE_DATA]
> +[/STREAM]
> +[STREAM]
> +DISPOSITION:default=0
> +DISPOSITION:dub=0
> +DISPOSITION:original=0
> +TAG:language=fre
> +TAG:stereo_mode=col_interleaved_rl
> +TAG:DESCRIPTION-DEU-AT=Österreichisch
> +TAG:DURATION=00:00:10.000000000
> +[SIDE_DATA]
> +side_data_type=Stereo 3D
> +type=interleaved columns
> +inverted=1
> +[/SIDE_DATA]
> +[/STREAM]
> +[STREAM]
> +DISPOSITION:default=1
> +DISPOSITION:dub=0
> +DISPOSITION:original=0
> +TAG:language=fra
> +TAG:stereo_mode=anaglyph_cyan_red
> +TAG:DURATION=00:00:10.000000000
> +[/STREAM]
> +[STREAM]
> +DISPOSITION:default=0
> +DISPOSITION:dub=0
> +DISPOSITION:original=0
> +TAG:language=de
> +TAG:stereo_mode=anaglyph_green_magenta
> +TAG:DESCRIPTION-ger=Deutsch
> +TAG:DURATION=00:00:10.000000000
> +[/STREAM]

Will apply patches #11 and #12 later tonight (with the necessary
modifications for #11).

- Andreas

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [FFmpeg-devel] [PATCH 1/9] avformat/matroskaenc: Avoid atoi()
  2023-08-11 10:34 [FFmpeg-devel] [PATCH 1/9] avformat/matroskaenc: Avoid atoi() Andreas Rheinhardt
                   ` (9 preceding siblings ...)
  2023-08-11 22:58 ` [FFmpeg-devel] [PATCH 11/11] fate/matroska: Fix requirements of fate-matroska-alac-remux test Andreas Rheinhardt
@ 2023-08-13 23:00 ` Andreas Rheinhardt
  10 siblings, 0 replies; 14+ messages in thread
From: Andreas Rheinhardt @ 2023-08-13 23:00 UTC (permalink / raw)
  To: ffmpeg-devel

Andreas Rheinhardt:
> It has undefined behaviour in case the value does not fit into an int.
> Also stop allowing to override a stream level "alpha_mode" tag
> by an AVFormatContext one and properly check that the stereo_mode
> number given via a tag is actually in the range 0..14: Negative
> values would have been treated as zero before this patch.
> 
> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
> ---
>  libavformat/matroskaenc.c | 11 +++++------
>  1 file changed, 5 insertions(+), 6 deletions(-)
> 
> diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c
> index e813ef86cf..9bdf087c67 100644
> --- a/libavformat/matroskaenc.c
> +++ b/libavformat/matroskaenc.c
> @@ -1592,7 +1592,7 @@ static int mkv_write_stereo_mode(AVFormatContext *s, EbmlWriter *writer,
>      // convert metadata into proper side data and add it to the stream
>      if ((tag = av_dict_get(st->metadata, "stereo_mode", NULL, 0)) ||
>          (tag = av_dict_get( s->metadata, "stereo_mode", NULL, 0))) {
> -        int stereo_mode = atoi(tag->value);
> +        long stereo_mode = strtol(tag->value, NULL, 0);
>  
>          for (int i = 0; i < MATROSKA_VIDEO_STEREOMODE_TYPE_NB; i++)
>              if (!strcmp(tag->value, ff_matroska_video_stereo_mode[i])){
> @@ -1600,7 +1600,7 @@ static int mkv_write_stereo_mode(AVFormatContext *s, EbmlWriter *writer,
>                  break;
>              }
>  
> -        if (stereo_mode < MATROSKA_VIDEO_STEREOMODE_TYPE_NB &&
> +        if ((unsigned long)stereo_mode < MATROSKA_VIDEO_STEREOMODE_TYPE_NB &&
>              stereo_mode != 10 && stereo_mode != 12) {
>              int ret = ff_mkv_stereo3d_conv(st, stereo_mode);
>              if (ret < 0)
> @@ -1748,11 +1748,10 @@ static int mkv_write_track_video(AVFormatContext *s, MatroskaMuxContext *mkv,
>      if (ret < 0)
>          return ret;
>  
> -    if (((tag = av_dict_get(st->metadata, "alpha_mode", NULL, 0)) && atoi(tag->value)) ||
> -        ((tag = av_dict_get( s->metadata, "alpha_mode", NULL, 0)) && atoi(tag->value)) ||
> -        (par->format == AV_PIX_FMT_YUVA420P)) {
> +    if (par->format == AV_PIX_FMT_YUVA420P ||
> +        ((tag = av_dict_get(st->metadata, "alpha_mode", NULL, 0)) ||
> +         (tag = av_dict_get( s->metadata, "alpha_mode", NULL, 0))) && strtol(tag->value, NULL, 0))
>          ebml_writer_add_uint(&writer, MATROSKA_ID_VIDEOALPHAMODE, 1);
> -    }
>  
>      // write DisplayWidth and DisplayHeight, they contain the size of
>      // a single source view and/or the display aspect ratio

Will apply this patchset tomorrow unless there are objections.

- Andreas

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2023-08-13 22:59 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-08-11 10:34 [FFmpeg-devel] [PATCH 1/9] avformat/matroskaenc: Avoid atoi() Andreas Rheinhardt
2023-08-11 10:43 ` [FFmpeg-devel] [PATCH 2/9] avformat/matroska: Move ff_matroska_video_stereo_plane to demuxer Andreas Rheinhardt
2023-08-11 10:43 ` [FFmpeg-devel] [PATCH 3/9] avformat/matroska: Add macro for stereomode<->AVStereo3D correspondence Andreas Rheinhardt
2023-08-11 10:43 ` [FFmpeg-devel] [PATCH 4/9] avformat/matroskaenc: Don't add side-data to input stream Andreas Rheinhardt
2023-08-11 10:43 ` [FFmpeg-devel] [PATCH 5/9] avformat/matroskaenc: Improve message for WebM-incompatible StereoModes Andreas Rheinhardt
2023-08-11 10:43 ` [FFmpeg-devel] [PATCH 6/9] avformat/matroska: Move ff_mkv_stereo3d_conv() to demuxer Andreas Rheinhardt
2023-08-11 10:43 ` [FFmpeg-devel] [PATCH 7/9] avformat/matroskadec: Replace switch with array Andreas Rheinhardt
2023-08-11 10:43 ` [FFmpeg-devel] [PATCH 8/9] avformat/matroskadec: Use named constants instead of their value Andreas Rheinhardt
2023-08-11 13:20   ` Paul B Mahol
2023-08-11 10:43 ` [FFmpeg-devel] [PATCH 9/9] avformat/riffdec: Pass logctx as void* instead of AVFormatContext* Andreas Rheinhardt
2023-08-11 22:58 ` [FFmpeg-devel] [PATCH 10/11] fate/matroska: Add test for stereo 3D Andreas Rheinhardt
2023-08-12 16:27   ` Andreas Rheinhardt
2023-08-11 22:58 ` [FFmpeg-devel] [PATCH 11/11] fate/matroska: Fix requirements of fate-matroska-alac-remux test Andreas Rheinhardt
2023-08-13 23:00 ` [FFmpeg-devel] [PATCH 1/9] avformat/matroskaenc: Avoid atoi() Andreas Rheinhardt

Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
		ffmpegdev@gitmailbox.com
	public-inbox-index ffmpegdev

Example config snippet for mirrors.


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git