I have already tried to use st->stream_identifier directly in mpegtsenc.c while handling arib_caption stream in mpegts_write_pmt() function.
But in mpegtsenc.c, st->stream_identifier always provides an incorrect value of 0, which should be 0x30 for arib_caption A profile. st->stream_identifier seems hasn't been copied correctly while remuxing into another mpegts stream. So I manually copied it. On Sun, Apr 11, 2021 at 7:41 PM Marton Balint <c...@passwd.hu> wrote: > > > > On Sat, 10 Apr 2021, zheng qian wrote: > > > Changes since v1: > > If desc_len < 3, break the switch statement instead of return > > AVERROR_INVALIDDATA > > to make it more robust. > > For arib_caption, data_component_descriptor should contains at least 3 > > bytes: > > data_component_id: uint16, additional_arib_caption_info: uint8. > > > > The recognization of ARIB STD-B24 caption has been introduced in commit > > a03885b, > > which is used as closed caption in Japanese / Brazilian Digital Television. > > > > But whenever copying arib_caption into mpegts output, arib_caption inside > > the > > outputted stream cannot be recgonized as a arib_caption subtitle track once > > again, > > which is caused by the missing of descriptors in the PMT table. > > > > These patches are intended to fix broken stream copying of arib_caption > > subtitle. > > > > This patch extracts necessary fields into codecpar->extradata for future > > remuxing, > > which describe the stream_identifier, the profile and other additional > > information. > > > > Signed-off-by: zheng qian <x...@xqq.im> > > --- > > libavformat/mpegts.c | 25 +++++++++++++++++++++++++ > > 1 file changed, 25 insertions(+) > > > > diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c > > index 6e0d9d7496..fd7ea1f504 100644 > > --- a/libavformat/mpegts.c > > +++ b/libavformat/mpegts.c > > @@ -2107,6 +2107,9 @@ int ff_parse_mpeg2_descriptor(AVFormatContext *fc, > > AVStream *st, int stream_type > > // STD-B24, fascicle 3, chapter 4 defines private_stream_1 > > // for captions > > if (stream_type == STREAM_TYPE_PRIVATE_DATA) { > > + if (desc_len < 3) > > + break; > > + > > // This structure is defined in STD-B10, part 1, listing 5.4 and > > // part 2, 6.2.20). > > // Listing of data_component_ids is in STD-B10, part 2, Annex J. > > @@ -2145,6 +2148,28 @@ int ff_parse_mpeg2_descriptor(AVFormatContext *fc, > > AVStream *st, int stream_type > > st->codecpar->codec_id = AV_CODEC_ID_ARIB_CAPTION; > > st->codecpar->profile = picked_profile; > > st->internal->request_probe = 0; > > + > > + // Store stream_identifier and payload of > > data_component_descriptor > > + // (data_component_id & additional_arib_caption_info) as > > extradata. > > + // data_component_descriptor is defined in ARIB STD-B10, part > > 2, 6.2.20 > > + // These will be useful for remuxing arib_caption into mpegts > > output. > > + if (!st->codecpar->extradata) { > > + st->codecpar->extradata = av_mallocz(4 + > > AV_INPUT_BUFFER_PADDING_SIZE); > > + if (!st->codecpar->extradata) > > + return AVERROR(ENOMEM); > > + > > + st->codecpar->extradata_size = 4; > > + > > + // stream_identifier (component_tag of > > stream_identifier_descriptor) > > + st->codecpar->extradata[0] = > > (uint8_t)(st->stream_identifier - 1); > > Storing this in extradata seems redundant. AVStream->stream_identifier > already exists, and you should be able to use that for muxing as well. > > Regards, > Marton > > > + > > + // payload of data_component_descriptor structure > > + // data_component_id > > + st->codecpar->extradata[1] = (uint8_t)((data_component_id > > & 0xF0) >> 8); > > + st->codecpar->extradata[2] = (uint8_t)(data_component_id & > > 0x0F); > > + // additional_arib_caption_info, defined in ARIB STD-B24, > > fascicle 1, Part 3, 9.6.1 > > + st->codecpar->extradata[3] = get8(pp, desc_end); > > + } > > } > > break; > > case 0xb0: /* DOVI video stream descriptor */ > > -- > > 2.29.2 > > > > _______________________________________________ > > ffmpeg-devel mailing list > > ffmpeg-devel@ffmpeg.org > > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > > > To unsubscribe, visit link above, or email > > ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe". > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > To unsubscribe, visit link above, or email > ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe". _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".