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