* [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