Anyone? :) On 3/23/19 12:22 AM, Mathieu Duponchelle wrote: > It is perfectly valid to have multiple CC Picture User Data > for the same frame. Instead of using the first side_data > potentially present with the A53_CC type, iterate over all > side_data. > --- > libavcodec/mpeg12enc.c | 56 +++++++++++++++++++++++------------------- > 1 file changed, 31 insertions(+), 25 deletions(-) > > diff --git a/libavcodec/mpeg12enc.c b/libavcodec/mpeg12enc.c > index 2bc5289d63..0162939399 100644 > --- a/libavcodec/mpeg12enc.c > +++ b/libavcodec/mpeg12enc.c > @@ -547,31 +547,37 @@ void ff_mpeg1_encode_picture_header(MpegEncContext *s, > int picture_number) > } > > if (s->codec_id == AV_CODEC_ID_MPEG2VIDEO && s->a53_cc) { > - side_data = av_frame_get_side_data(s->current_picture_ptr->f, > - AV_FRAME_DATA_A53_CC); > - if (side_data) { > - if (side_data->size <= A53_MAX_CC_COUNT * 3 && side_data->size % > 3 == 0) { > - int i = 0; > - > - put_header (s, USER_START_CODE); > - > - put_bits(&s->pb, 8, 'G'); // > user_identifier > - put_bits(&s->pb, 8, 'A'); > - put_bits(&s->pb, 8, '9'); > - put_bits(&s->pb, 8, '4'); > - put_bits(&s->pb, 8, 3); // > user_data_type_code > - put_bits(&s->pb, 8, > - (side_data->size / 3 & A53_MAX_CC_COUNT) | 0x40); // > flags, cc_count > - put_bits(&s->pb, 8, 0xff); // em_data > - > - for (i = 0; i < side_data->size; i++) > - put_bits(&s->pb, 8, side_data->data[i]); > - > - put_bits(&s->pb, 8, 0xff); // marker_bits > - } else { > - av_log(s->avctx, AV_LOG_WARNING, > - "Warning Closed Caption size (%d) can not exceed 93 > bytes " > - "and must be a multiple of 3\n", side_data->size); > + int i; > + > + for (i = 0; i < s->current_picture_ptr->f->nb_side_data; i++) { > + side_data = s->current_picture_ptr->f->side_data[i]; > + if (side_data->type != AV_FRAME_DATA_A53_CC) > + continue; > + > + if (side_data) { > + if (side_data->size <= A53_MAX_CC_COUNT * 3 && > side_data->size % 3 == 0) { > + int i = 0; > + > + put_header (s, USER_START_CODE); > + > + put_bits(&s->pb, 8, 'G'); // > user_identifier > + put_bits(&s->pb, 8, 'A'); > + put_bits(&s->pb, 8, '9'); > + put_bits(&s->pb, 8, '4'); > + put_bits(&s->pb, 8, 3); // > user_data_type_code > + put_bits(&s->pb, 8, > + (side_data->size / 3 & A53_MAX_CC_COUNT) | 0x40); // > flags, cc_count > + put_bits(&s->pb, 8, 0xff); // em_data > + > + for (i = 0; i < side_data->size; i++) > + put_bits(&s->pb, 8, side_data->data[i]); > + > + put_bits(&s->pb, 8, 0xff); // > marker_bits > + } else { > + av_log(s->avctx, AV_LOG_WARNING, > + "Warning Closed Caption size (%d) can not exceed 93 > bytes " > + "and must be a multiple of 3\n", side_data->size); > + } > } > } > }
_______________________________________________ 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".