[PATCH 06/18] avcodec/h264dec: add multiview view_ids options
Dom Cobley via ffmpeg-devel <[email protected]>
| Newsgroups | gmane.comp.video.ffmpeg.devel |
|---|---|
| Message-ID | <[email protected]> |
Export the views declared by the MVC extension of the active subset SPS, and let the caller select which of them to decode and output, using the same option names, types and semantics as the hevc decoder does for MV-HEVC: view_ids to request views, view_ids_available and view_pos_available to report what is there. Availability is exported before ff_get_format() and the request acted on afterwards, so that a caller may pick views from its get_format() callback. As for MV-HEVC, only the base view is decoded unless views are requested. H.264 has no equivalent of the MV-HEVC 3D reference displays information SEI, so view_pos_available is left empty and view positions are reported as unspecified. Because fftools reaches these options by name with AV_OPT_SEARCH_CHILDREN, the ffmpeg CLI view specifiers (-map 0:v:0:view:N and friends) work with no changes there. The two new options are exported, so ffprobe prints them for every h264 stream, empty ones included, exactly as it already does for hevc. The affected stream references are updated; only those two fields change in them. No view other than the base one is decoded yet, so this has no effect on output. Signed-off-by: Dom Cobley <[email protected]> --- libavcodec/h264_slice.c | 148 ++++++++++++++++++++++++++++++++++ libavcodec/h264dec.c | 18 +++++ libavcodec/h264dec.h | 26 ++++++ tests/ref/fate/flv-demux | 2 +- tests/ref/fate/mov-zombie | 2 +- tests/ref/fate/ts-small-demux | 2 +- 6 files changed, 195 insertions(+), 3 deletions(-) diff --git a/libavcodec/h264_slice.c b/libavcodec/h264_slice.c index aeddf49db4..38840a7a1a 100644 --- a/libavcodec/h264_slice.c +++ b/libavcodec/h264_slice.c @@ -30,6 +30,7 @@ #include "libavutil/avassert.h" #include "libavutil/mem.h" #include "libavutil/pixdesc.h" +#include "libavutil/stereo3d.h" #include "libavutil/timecode.h" #include "decode.h" #include "cabac.h" @@ -422,6 +423,27 @@ int ff_h264_update_thread_context(AVCodecContext *dst, h->is_avc = h1->is_avc; h->nal_length_size = h1->nal_length_size; + h->nb_views = h1->nb_views; + h->views_active_decode = h1->views_active_decode; + h->views_active_output = h1->views_active_output; + + /* view_ids may be set by the caller from get_format() mid-stream, so it has + * to be propagated; the exported arrays are re-derived by each thread. */ + if (h->nb_view_ids != h1->nb_view_ids || + (h->nb_view_ids && + memcmp(h->view_ids, h1->view_ids, sizeof(*h->view_ids) * h->nb_view_ids))) { + av_freep(&h->view_ids); + h->nb_view_ids = 0; + + if (h1->nb_view_ids) { + h->view_ids = av_memdup(h1->view_ids, + h1->nb_view_ids * sizeof(*h1->view_ids)); + if (!h->view_ids) + return AVERROR(ENOMEM); + h->nb_view_ids = h1->nb_view_ids; + } + } + memcpy(&h->poc, &h1->poc, sizeof(h->poc)); memcpy(h->short_ref, h1->short_ref, sizeof(h->short_ref)); @@ -786,6 +808,120 @@ static void init_scan_tables(H264Context *h) } } +/** + * Find the subset SPS describing the views of an MVC stream. + * + * Unlike HEVC, where the layer list lives in the VPS, H.264 carries it in the + * MVC extension of a subset SPS. A conforming MVC stream has exactly one such + * set of views, so the first usable subset SPS is authoritative; it is also + * available before the first slice of the base view, which is what lets the + * view list be exported from get_format(). + */ +static const SPS *find_mvc_sps(const H264ParamSets *ps) +{ + for (int i = 0; i < MAX_SPS_COUNT; i++) { + const SPS *sps = ps->subset_sps_list[i]; + if (sps && sps->mvc.num_views > 1) + return sps; + } + return NULL; +} + +/** + * Export the list of available views to the caller, so that it is readable from + * the get_format() callback. + */ +static int export_multiview(H264Context *h, const SPS *mvc_sps) +{ + av_freep(&h->view_ids_available); + h->nb_view_ids_available = 0; + av_freep(&h->view_pos_available); + h->nb_view_pos_available = 0; + + if (!mvc_sps) + return 0; + + h->view_ids_available = av_calloc(mvc_sps->mvc.num_views, + sizeof(*h->view_ids_available)); + if (!h->view_ids_available) + return AVERROR(ENOMEM); + + for (int i = 0; i < mvc_sps->mvc.num_views; i++) + h->view_ids_available[i] = mvc_sps->mvc.view_id[i]; + h->nb_view_ids_available = mvc_sps->mvc.num_views; + + /* H.264 has no equivalent of the MV-HEVC 3D reference displays info SEI that + * would map views onto eyes, so leave view_pos_available empty. */ + + return 0; +} + +/** + * Turn the caller's view_ids request into decode/output bitmasks. + */ +static int setup_multiview(H264Context *h, const SPS *mvc_sps) +{ + unsigned views_active_output = 0, highest_view; + + h->nb_views = mvc_sps ? mvc_sps->mvc.num_views : 0; + h->views_active_decode = 1; + h->views_active_output = 1; + + /* nothing requested, or nothing to choose from - base view only */ + if (!h->nb_view_ids || !mvc_sps) + return 0; + + if (h->nb_view_ids == 1 && h->view_ids[0] == -1) { + views_active_output = (1 << h->nb_views) - 1; + } else { + for (int i = 0; i < h->nb_view_ids; i++) { + int view_id = h->view_ids[i]; + int voidx = -1; + + if (view_id < 0) { + av_log(h->avctx, AV_LOG_ERROR, + "Invalid view ID requested: %d\n", view_id); + return AVERROR(EINVAL); + } + + for (int j = 0; j < h->nb_views; j++) { + if (mvc_sps->mvc.view_id[j] == view_id) { + voidx = j; + break; + } + } + if (voidx < 0) { + av_log(h->avctx, AV_LOG_ERROR, + "View ID %d not present in the subset SPS\n", view_id); + return AVERROR(EINVAL); + } + views_active_output |= 1 << voidx; + } + } + + if (!views_active_output) { + av_log(h->avctx, AV_LOG_ERROR, "No views selected\n"); + return AVERROR_BUG; + } + + highest_view = av_log2(views_active_output); + if (highest_view >= H264_MAX_MVC_VIEWS) { + av_log(h->avctx, AV_LOG_ERROR, "Too many views requested: %x\n", + views_active_output); + return AVERROR(EINVAL); + } + + /* A non-base view may depend on any lower view, so decoding the highest + * requested view implies decoding everything below it. */ + h->views_active_decode = (1 << (highest_view + 1)) - 1; + h->views_active_output = views_active_output; + + av_log(h->avctx, AV_LOG_DEBUG, "decode/output views: %x/%x\n", + h->views_active_decode, h->views_active_output); + + return 0; +} + static enum AVPixelFormat get_pixel_format(H264Context *h, int force_callback) { #define HWACCEL_MAX (CONFIG_H264_DXVA2_HWACCEL + \ @@ -1144,6 +1280,7 @@ static int h264_init_ps(H264Context *h, const H264SliceContext *sl, int first_sl if (!h->context_initialized || must_reinit || needs_reinit) { int flush_changes = h->context_initialized; + const SPS *mvc_sps = find_mvc_sps(&h->ps); h->context_initialized = 0; if (sl != h->slice_ctx) { av_log(h->avctx, AV_LOG_ERROR, @@ -1160,10 +1297,21 @@ static int h264_init_ps(H264Context *h, const H264SliceContext *sl, int first_sl if (flush_changes) ff_h264_flush_change(h); + /* Export the available views before ff_get_format() so that the caller + * can pick views from its get_format() callback, then act on whatever it + * asked for. */ + ret = export_multiview(h, mvc_sps); + if (ret < 0) + return ret; + if ((ret = get_pixel_format(h, must_reinit || needs_reinit)) < 0) return ret; h->avctx->pix_fmt = ret; + ret = setup_multiview(h, mvc_sps); + if (ret < 0) + return ret; + av_log(h->avctx, AV_LOG_VERBOSE, "Reinit context to %dx%d, " "pix_fmt: %s\n", h->width, h->height, av_get_pix_fmt_name(h->avctx->pix_fmt)); diff --git a/libavcodec/h264dec.c b/libavcodec/h264dec.c index 8636001270..ae66e6b717 100644 --- a/libavcodec/h264dec.c +++ b/libavcodec/h264dec.c @@ -35,6 +35,7 @@ #include "libavutil/imgutils.h" #include "libavutil/mem.h" #include "libavutil/opt.h" +#include "libavutil/stereo3d.h" #include "libavutil/thread.h" #include "libavutil/video_enc_params.h" @@ -376,6 +377,11 @@ static av_cold int h264_decode_end(AVCodecContext *avctx) h264_free_pic(h, &h->cur_pic); h264_free_pic(h, &h->last_pic_for_ec); + av_freep(&h->view_ids_available); + h->nb_view_ids_available = 0; + av_freep(&h->view_pos_available); + h->nb_view_pos_available = 0; + return 0; } @@ -1101,6 +1107,18 @@ static const AVOption h264_options[] = { { "x264_build", "Assume this x264 version if no x264 version found in any SEI", OFFSET(x264_build), AV_OPT_TYPE_INT, {.i64 = -1}, -1, INT_MAX, VD }, { "skip_gray", "Do not return gray gap frames", OFFSET(skip_gray), AV_OPT_TYPE_BOOL, {.i64 = 0}, 0, 1, VD }, { "noref_gray", "Avoid using gray gap frames as references", OFFSET(noref_gray), AV_OPT_TYPE_BOOL, {.i64 = 1}, 0, 1, VD }, + { "view_ids", "Array of view IDs that should be decoded and output; a single -1 to decode all views", + .offset = OFFSET(view_ids), .type = AV_OPT_TYPE_INT | AV_OPT_TYPE_FLAG_ARRAY, + .min = -1, .max = INT_MAX, .flags = VD }, + { "view_ids_available", "Array of available view IDs is exported here", + .offset = OFFSET(view_ids_available), .type = AV_OPT_TYPE_UINT | AV_OPT_TYPE_FLAG_ARRAY, + .flags = VD | AV_OPT_FLAG_EXPORT | AV_OPT_FLAG_READONLY }, + { "view_pos_available", "Array of view positions for view_ids_available is exported here, as AVStereo3DView", + .offset = OFFSET(view_pos_available), .type = AV_OPT_TYPE_UINT | AV_OPT_TYPE_FLAG_ARRAY, + .flags = VD | AV_OPT_FLAG_EXPORT | AV_OPT_FLAG_READONLY, .unit = "view_pos" }, + { "unspecified", .type = AV_OPT_TYPE_CONST, .default_val = { .i64 = AV_STEREO3D_VIEW_UNSPEC }, .unit = "view_pos" }, + { "left", .type = AV_OPT_TYPE_CONST, .default_val = { .i64 = AV_STEREO3D_VIEW_LEFT }, .unit = "view_pos" }, + { "right", .type = AV_OPT_TYPE_CONST, .default_val = { .i64 = AV_STEREO3D_VIEW_RIGHT }, .unit = "view_pos" }, { NULL }, }; diff --git a/libavcodec/h264dec.h b/libavcodec/h264dec.h index 74fd09dfaa..6ed168e9a4 100644 --- a/libavcodec/h264dec.h +++ b/libavcodec/h264dec.h @@ -552,6 +552,32 @@ typedef struct H264Context { * slices) anymore */ int setup_finished; + /** + * @name MVC (H.264 Annex H) multiview state + * @{ + */ + /** + * Number of views in the active subset SPS, or 0 if the stream is not + * multiview (or its MVC extension is unsupported). + */ + unsigned nb_views; + /** VOIdx of the view currently being decoded. */ + unsigned cur_view; + /** Bitmasks of VOIdx that are decoded / output. Bit 0 (base view) is always set. */ + unsigned views_active_decode; + unsigned views_active_output; + + /* multiview AVOptions, mirroring the hevc decoder */ + int *view_ids; + unsigned nb_view_ids; + + unsigned *view_ids_available; + unsigned nb_view_ids_available; + + unsigned *view_pos_available; + unsigned nb_view_pos_available; + /** @} */ + int cur_chroma_format_idc; int cur_bit_depth_luma; int16_t slice_row[MAX_SLICES]; ///< to detect when MAX_SLICES is too low diff --git a/tests/ref/fate/flv-demux b/tests/ref/fate/flv-demux index 4a427adfa1..9639cc177f 100644 --- a/tests/ref/fate/flv-demux +++ b/tests/ref/fate/flv-demux @@ -601,6 +601,6 @@ packet|codec_type=video|stream_index=0|pts=11612|pts_time=11.612000|dts=11612|dt packet|codec_type=video|stream_index=0|pts=11645|pts_time=11.645000|dts=11645|dts_time=11.645000|duration=33|duration_time=0.033000|size=2600|pos=507811|flags=___|data_hash=CRC32:d35f9e6f packet|codec_type=audio|stream_index=1|pts=11656|pts_time=11.656000|dts=11656|dts_time=11.656000|duration=46|duration_time=0.046000|size=346|pos=510431|flags=K__|data_hash=CRC32:4e6b44cb packet|codec_type=video|stream_index=0|pts=11678|pts_time=11.678000|dts=11678|dts_time=11.678000|duration=33|duration_time=0.033000|size=1190|pos=510794|flags=__C|data_hash=CRC32:a0206c90 -stream|index=0|codec_name=h264|profile=77|codec_type=video|codec_tag_string=[0][0][0][0]|codec_tag=0x0000|mime_codec_string=avc1.4d4015|width=426|height=240|coded_width=426|coded_height=240|has_b_frames=1|sample_aspect_ratio=1:1|display_aspect_ratio=71:40|pix_fmt=yuv420p|level=21|color_range=unknown|color_space=unknown|color_transfer=unknown|color_primaries=unknown|chroma_location=left|field_order=progressive|is_avc=true|nal_length_size=4|id=N/A|r_frame_rate=30000/1001|avg_frame_rate=30/1|time_base=1/1000|start_pts=0|start_time=0.000000|duration_ts=N/A|duration=N/A|bit_rate=393929|max_bit_rate=N/A|bits_per_raw_sample=8|nb_frames=N/A|nb_read_frames=N/A|nb_read_packets=351|extradata_size=39|extradata_hash=CRC32:07b85ca9|disposition:default=0|disposition:dub=0|disposition:original=0|disposit ion:comment=0|disposition:lyrics=0|disposition:karaoke=0|disposition:forced=0|disposition:hearing_impaired=0|disposition:visual_impaired=0|disposition:clean_effects=0|disposition:attached_pic=0|disp osition:timed_thumbnails=0|disposition:non_diegetic=0|disposition:captions=0|disposition:descriptions=0|disposition:metadata=0|disposition:dependent=0|disposition:still_image=0|disposition:multilayer=0 +stream|index=0|codec_name=h264|profile=77|codec_type=video|codec_tag_string=[0][0][0][0]|codec_tag=0x0000|mime_codec_string=avc1.4d4015|width=426|height=240|coded_width=426|coded_height=240|has_b_frames=1|sample_aspect_ratio=1:1|display_aspect_ratio=71:40|pix_fmt=yuv420p|level=21|color_range=unknown|color_space=unknown|color_transfer=unknown|color_primaries=unknown|chroma_location=left|field_order=progressive|is_avc=true|nal_length_size=4|view_ids_available=|view_pos_available=|id=N/A|r_frame_rate=30000/1001|avg_frame_rate=30/1|time_base=1/1000|start_pts=0|start_time=0.000000|duration_ts=N/A|duration=N/A|bit_rate=393929|max_bit_rate=N/A|bits_per_raw_sample=8|nb_frames=N/A|nb_read_frames=N/A|nb_read_packets=351|extradata_size=39|extradata_hash=CRC32:07b85ca9|disposition:default=0|dispositi on:dub=0|disposition:original=0|disposition:comment=0|disposition:lyrics=0|disposition:karaoke=0|disposition:forced=0|disposition:hearing_impaired=0|disposition:visual_impaired=0|disposition:clean_e ffects=0|disposition:attached_pic=0|disposition:timed_thumbnails=0|disposition:non_diegetic=0|disposition:captions=0|disposition:descriptions=0|disposition:metadata=0|disposition:dependent=0|disposition:still_image=0|disposition:multilayer=0 stream|index=1|codec_name=aac|profile=1|codec_type=audio|codec_tag_string=[0][0][0][0]|codec_tag=0x0000|mime_codec_string=mp4a.40.2|sample_fmt=fltp|sample_rate=22050|channels=2|channel_layout=stereo|bits_per_sample=0|initial_padding=0|id=N/A|r_frame_rate=0/0|avg_frame_rate=0/0|time_base=1/1000|start_pts=0|start_time=0.000000|duration_ts=N/A|duration=N/A|bit_rate=67874|max_bit_rate=N/A|bits_per_raw_sample=N/A|nb_frames=N/A|nb_read_frames=N/A|nb_read_packets=252|extradata_size=2|extradata_hash=CRC32:d039c029|disposition:default=0|disposition:dub=0|disposition:original=0|disposition:comment=0|disposition:lyrics=0|disposition:karaoke=0|disposition:forced=0|disposition:hearing_impaired=0|disposition:visual_impaired=0|disposition:clean_effects=0|disposition:attached_pic=0|disposition:timed_thum bnails=0|disposition:non_diegetic=0|disposition:captions=0|disposition:descriptions=0|disposition:metadata=0|disposition:dependent=0|disposition:still_image=0|disposition:multilayer=0 format|filename=Enigma_Principles_of_Lust-part.flv|nb_streams=2|nb_programs=0|nb_stream_groups=0|format_name=flv|start_time=0.000000|duration=210.209999|size=512000|bit_rate=19485|probe_score=100|tag:hasKeyframes=true|tag:hasMetadata=true|tag:datasize=11970544|tag:hasVideo=true|tag:canSeekToEnd=false|tag:lasttimestamp=210|tag:lastkeyframetimestamp=210|tag:audiosize=1791332|tag:hasAudio=true|tag:audiodelay=0|tag:videosize=10176110|tag:metadatadate=2011-02-27T11:00:33.125000Z|tag:metadatacreator=inlet media FLVTool2 v1.0.6 - http://www.inlet-media.de/flvtool2|tag:hasCuePoints=false diff --git a/tests/ref/fate/mov-zombie b/tests/ref/fate/mov-zombie index 3036efbc8f..87bf2a2514 100644 --- a/tests/ref/fate/mov-zombie +++ b/tests/ref/fate/mov-zombie @@ -129,4 +129,4 @@ packet|codec_type=video|stream_index=0|pts=188623|pts_time=2.095811|dts=188622|d frame|media_type=video|stream_index=0|key_frame=0|pts=188623|pts_time=2.095811|pkt_dts=188622|pkt_dts_time=2.095800|best_effort_timestamp=188623|best_effort_timestamp_time=2.095811|duration=3003|duration_time=0.033367|pkt_pos=100846|pkt_size=974|width=160|height=240|crop_top=0|crop_bottom=0|crop_left=0|crop_right=0|pix_fmt=yuv420p|sample_aspect_ratio=2:1|pict_type=B|interlaced_frame=0|top_field_first=0|lossless=0|repeat_pict=0|color_range=tv|color_space=smpte170m|color_primaries=smpte170m|color_transfer=bt709|chroma_location=topleft|alpha_mode=unspecified|side_datum/3x3_displaymatrix:side_data_type=3x3 displaymatrix|side_datum/3x3_displaymatrix:displaymatrix=\n00000000: 131072 0 0\n00000001: 0 65536 0\n00000002: 0 0 1073741824\n|side_datum/3x3_displaymatrix:rotation=0|side_datum/h_26_45__user_data_unregistered_sei_message:side_data_type=H.26[45] User Data Unregistered SEI message packet|codec_type=video|stream_index=0|pts=197632|pts_time=2.195911|dts=191625|dts_time=2.129167|duration=3003|duration_time=0.033367|size=580|pos=101820|flags=__C frame|media_type=video|stream_index=0|key_frame=0|pts=191626|pts_time=2.129178|pkt_dts=N/A|pkt_dts_time=N/A|best_effort_timestamp=191626|best_effort_timestamp_time=2.129178|duration=3003|duration_time=0.033367|pkt_pos=99180|pkt_size=1666|width=160|height=240|crop_top=0|crop_bottom=0|crop_left=0|crop_right=0|pix_fmt=yuv420p|sample_aspect_ratio=2:1|pict_type=P|interlaced_frame=0|top_field_first=0|lossless=0|repeat_pict=0|color_range=tv|color_space=smpte170m|color_primaries=smpte170m|color_transfer=bt709|chroma_location=topleft|alpha_mode=unspecified|side_datum/3x3_displaymatrix:side_data_type=3x3 displaymatrix|side_datum/3x3_displaymatrix:displaymatrix=\n00000000: 131072 0 0\n00000001: 0 65536 0\n00000002: 0 0 107374 1824\n|side_datum/3x3_displaymatrix:rotation=0|side_datum/h_26_45__user_data_unregistered_sei_message:side_data_type=H.26[45] User Data Unregistered SEI message -stream|index=0|codec_name=h264|profile=77|codec_type=video|codec_tag_string=avc1|codec_tag=0x31637661|mime_codec_string=avc1.4d400c|width=160|height=240|coded_width=160|coded_height=240|has_b_frames=1|sample_aspect_ratio=2:1|display_aspect_ratio=4:3|pix_fmt=yuv420p|level=12|color_range=tv|color_space=smpte170m|color_transfer=bt709|color_primaries=smpte170m|chroma_location=topleft|field_order=progressive|refs=2|is_avc=true|nal_length_size=4|id=0x1|r_frame_rate=30000/1001|avg_frame_rate=6372000/212521|time_base=1/90000|start_pts=0|start_time=0.000000|duration_ts=2125200|duration=23.613333|bit_rate=333874|max_bit_rate=N/A|bits_per_raw_sample=8|nb_frames=708|nb_read_frames=65|nb_read_packets=66|extradata_size=34|disposition:default=1|disposition:dub=0|disposition:original=0|disposition:commen t=0|disposition:lyrics=0|disposition:karaoke=0|disposition:forced=0|disposition:hearing_impaired=0|disposition:visual_impaired=0|disposition:clean_effects=0|disposition:attached_pic=0|disposition:ti med_thumbnails=0|disposition:non_diegetic=0|disposition:captions=0|disposition:descriptions=0|disposition:metadata=0|disposition:dependent=0|disposition:still_image=0|disposition:multilayer=0|tag:creation_time=2008-05-12T20:59:27.000000Z|tag:language=eng|tag:handler_name=Apple Video Media Handler|tag:vendor_id=appl|tag:encoder=H.264|side_datum/display_matrix:side_data_type=Display Matrix|side_datum/display_matrix:displaymatrix=\n00000000: 131072 0 0\n00000001: 0 65536 0\n00000002: 0 0 1073741824\n|side_datum/display_matrix:rotation=0 +stream|index=0|codec_name=h264|profile=77|codec_type=video|codec_tag_string=avc1|codec_tag=0x31637661|mime_codec_string=avc1.4d400c|width=160|height=240|coded_width=160|coded_height=240|has_b_frames=1|sample_aspect_ratio=2:1|display_aspect_ratio=4:3|pix_fmt=yuv420p|level=12|color_range=tv|color_space=smpte170m|color_transfer=bt709|color_primaries=smpte170m|chroma_location=topleft|field_order=progressive|refs=2|is_avc=true|nal_length_size=4|view_ids_available=|view_pos_available=|id=0x1|r_frame_rate=30000/1001|avg_frame_rate=6372000/212521|time_base=1/90000|start_pts=0|start_time=0.000000|duration_ts=2125200|duration=23.613333|bit_rate=333874|max_bit_rate=N/A|bits_per_raw_sample=8|nb_frames=708|nb_read_frames=65|nb_read_packets=66|extradata_size=34|disposition:default=1|disposition:dub=0|d isposition:original=0|disposition:comment=0|disposition:lyrics=0|disposition:karaoke=0|disposition:forced=0|disposition:hearing_impaired=0|disposition:visual_impaired=0|disposition:clean_effects=0|d isposition:attached_pic=0|disposition:timed_thumbnails=0|disposition:non_diegetic=0|disposition:captions=0|disposition:descriptions=0|disposition:metadata=0|disposition:dependent=0|disposition:still_image=0|disposition:multilayer=0|tag:creation_time=2008-05-12T20:59:27.000000Z|tag:language=eng|tag:handler_name=Apple Video Media Handler|tag:vendor_id=appl|tag:encoder=H.264|side_datum/display_matrix:side_data_type=Display Matrix|side_datum/display_matrix:displaymatrix=\n00000000: 131072 0 0\n00000001: 0 65536 0\n00000002: 0 0 1073741824\n|side_datum/display_matrix:rotation=0 diff --git a/tests/ref/fate/ts-small-demux b/tests/ref/fate/ts-small-demux index 6b2c4936f8..6515729399 100644 --- a/tests/ref/fate/ts-small-demux +++ b/tests/ref/fate/ts-small-demux @@ -72,5 +72,5 @@ packet|codec_type=video|stream_index=0|pts=546000|pts_time=6.066667|dts=546000|d packet|codec_type=video|stream_index=0|pts=552000|pts_time=6.133333|dts=552000|dts_time=6.133333|duration=6000|duration_time=0.066667|size=16|pos=15604|flags=___|data_hash=CRC32:cca62b67|side_datum/mpegts_stream_id:side_data_type=MPEGTS Stream ID|side_datum/mpegts_stream_id:id=224 packet|codec_type=video|stream_index=0|pts=558000|pts_time=6.200000|dts=558000|dts_time=6.200000|duration=6000|duration_time=0.066667|size=16|pos=15792|flags=___|data_hash=CRC32:27b943ef|side_datum/mpegts_stream_id:side_data_type=MPEGTS Stream ID|side_datum/mpegts_stream_id:id=224 packet|codec_type=video|stream_index=0|pts=564000|pts_time=6.266667|dts=564000|dts_time=6.266667|duration=6000|duration_time=0.066667|size=16|pos=16356|flags=___|data_hash=CRC32:f7116111|side_datum/mpegts_stream_id:side_data_type=MPEGTS Stream ID|side_datum/mpegts_stream_id:id=224 -stream|index=0|codec_name=h264|profile=578|codec_type=video|codec_tag_string=[27][0][0][0]|codec_tag=0x001b|mime_codec_string=avc1.42c00a|width=82|height=144|coded_width=82|coded_height=144|has_b_frames=0|sample_aspect_ratio=1:1|display_aspect_ratio=41:72|pix_fmt=yuv420p|level=10|color_range=unknown|color_space=unknown|color_transfer=unknown|color_primaries=unknown|chroma_location=left|field_order=progressive|is_avc=false|nal_length_size=0|ts_id=1|ts_packetsize=188|id=0x100|r_frame_rate=15/1|avg_frame_rate=15/1|time_base=1/90000|start_pts=126000|start_time=1.400000|duration_ts=444000|duration=4.933333|bit_rate=N/A|max_bit_rate=N/A|bits_per_raw_sample=8|nb_frames=N/A|nb_read_frames=N/A|nb_read_packets=74|extradata_size=37|extradata_hash=CRC32:1d7ffe93|disposition:default=0|disposition:dub= 0|disposition:original=0|disposition:comment=0|disposition:lyrics=0|disposition:karaoke=0|disposition:forced=0|disposition:hearing_impaired=0|disposition:visual_impaired=0|disposition:clean_effects= 0|disposition:attached_pic=0|disposition:timed_thumbnails=0|disposition:non_diegetic=0|disposition:captions=0|disposition:descriptions=0|disposition:metadata=0|disposition:dependent=0|disposition:still_image=0|disposition:multilayer=0 +stream|index=0|codec_name=h264|profile=578|codec_type=video|codec_tag_string=[27][0][0][0]|codec_tag=0x001b|mime_codec_string=avc1.42c00a|width=82|height=144|coded_width=82|coded_height=144|has_b_frames=0|sample_aspect_ratio=1:1|display_aspect_ratio=41:72|pix_fmt=yuv420p|level=10|color_range=unknown|color_space=unknown|color_transfer=unknown|color_primaries=unknown|chroma_location=left|field_order=progressive|is_avc=false|nal_length_size=0|view_ids_available=|view_pos_available=|ts_id=1|ts_packetsize=188|id=0x100|r_frame_rate=15/1|avg_frame_rate=15/1|time_base=1/90000|start_pts=126000|start_time=1.400000|duration_ts=444000|duration=4.933333|bit_rate=N/A|max_bit_rate=N/A|bits_per_raw_sample=8|nb_frames=N/A|nb_read_frames=N/A|nb_read_packets=74|extradata_size=37|extradata_hash=CRC32:1d7ffe9 3|disposition:default=0|disposition:dub=0|disposition:original=0|disposition:comment=0|disposition:lyrics=0|disposition:karaoke=0|disposition:forced=0|disposition:hearing_impaired=0|disposition:visu al_impaired=0|disposition:clean_effects=0|disposition:attached_pic=0|disposition:timed_thumbnails=0|disposition:non_diegetic=0|disposition:captions=0|disposition:descriptions=0|disposition:metadata=0|disposition:dependent=0|disposition:still_image=0|disposition:multilayer=0 format|filename=h264small.ts|nb_streams=1|nb_programs=1|nb_stream_groups=0|format_name=mpegts|start_time=1.400000|duration=4.933333|size=16544|bit_rate=26828|probe_score=100 -- 2.53.0 _______________________________________________ ffmpeg-devel mailing list -- [email protected] To unsubscribe send an email to [email protected]