diff mbox series

[FFmpeg-devel,v2,4/4] avformat/mpegtsenc: use the correct stream_types and write HDMV descriptors for m2ts

Message ID 20200412223738.22357-1-cus@passwd.hu
State Accepted
Headers show
Series None | expand

Commit Message

Marton Balint April 12, 2020, 10:37 p.m. UTC
Fixes ticket #2622.

Signed-off-by: Marton Balint <cus@passwd.hu>
---
 Changelog               |  1 +
 libavformat/mpegtsenc.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++++-
 2 files changed, 58 insertions(+), 1 deletion(-)

Comments

Carl Eugen Hoyos April 12, 2020, 11:07 p.m. UTC | #1
Am Mo., 13. Apr. 2020 um 00:38 Uhr schrieb Marton Balint <cus@passwd.hu>:
>
> Fixes ticket #2622.
>
> Signed-off-by: Marton Balint <cus@passwd.hu>
> ---
>  Changelog               |  1 +
>  libavformat/mpegtsenc.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++++-
>  2 files changed, 58 insertions(+), 1 deletion(-)
>
> diff --git a/Changelog b/Changelog
> index 6dfe750d81..4ba44e5e2d 100644
> --- a/Changelog
> +++ b/Changelog
> @@ -58,6 +58,7 @@ version <next>:
>  - switch from AvxSynth to AviSynth+ on Linux
>  - mv30 decoder
>  - Expanded styling support for 3GPP Timed Text Subtitles (movtext)
> +- use the correct stream types for m2ts output

Don't you agree that "Support pcm audio when muxing m2ts"
or "Support BluRay muxing" is a stronger wording?

Carl Eugen
Marton Balint April 13, 2020, 12:17 a.m. UTC | #2
On Mon, 13 Apr 2020, Carl Eugen Hoyos wrote:

> Am Mo., 13. Apr. 2020 um 00:38 Uhr schrieb Marton Balint <cus@passwd.hu>:
>>
>> Fixes ticket #2622.
>>
>> Signed-off-by: Marton Balint <cus@passwd.hu>
>> ---
>>  Changelog               |  1 +
>>  libavformat/mpegtsenc.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++++-
>>  2 files changed, 58 insertions(+), 1 deletion(-)
>>
>> diff --git a/Changelog b/Changelog
>> index 6dfe750d81..4ba44e5e2d 100644
>> --- a/Changelog
>> +++ b/Changelog
>> @@ -58,6 +58,7 @@ version <next>:
>>  - switch from AvxSynth to AviSynth+ on Linux
>>  - mv30 decoder
>>  - Expanded styling support for 3GPP Timed Text Subtitles (movtext)
>> +- use the correct stream types for m2ts output
>
> Don't you agree that "Support pcm audio when muxing m2ts"
> or "Support BluRay muxing" is a stronger wording?

That is not true, m2ts mode is nowhere near Blu-ray compatible yet, so it 
would be misleading to say that. Also it is not just about PCM audio, the 
ticket was opened for PGS subtitles as far as I remember.

Regards,
Marton
Carl Eugen Hoyos April 15, 2020, 10:02 p.m. UTC | #3
Am Mo., 13. Apr. 2020 um 02:17 Uhr schrieb Marton Balint <cus@passwd.hu>:
>
>
>
> On Mon, 13 Apr 2020, Carl Eugen Hoyos wrote:
>
> > Am Mo., 13. Apr. 2020 um 00:38 Uhr schrieb Marton Balint <cus@passwd.hu>:
> >>
> >> Fixes ticket #2622.
> >>
> >> Signed-off-by: Marton Balint <cus@passwd.hu>
> >> ---
> >>  Changelog               |  1 +
> >>  libavformat/mpegtsenc.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++++-
> >>  2 files changed, 58 insertions(+), 1 deletion(-)
> >>
> >> diff --git a/Changelog b/Changelog
> >> index 6dfe750d81..4ba44e5e2d 100644
> >> --- a/Changelog
> >> +++ b/Changelog
> >> @@ -58,6 +58,7 @@ version <next>:
> >>  - switch from AvxSynth to AviSynth+ on Linux
> >>  - mv30 decoder
> >>  - Expanded styling support for 3GPP Timed Text Subtitles (movtext)
> >> +- use the correct stream types for m2ts output
> >
> > Don't you agree that "Support pcm audio when muxing m2ts"
> > or "Support BluRay muxing" is a stronger wording?
>
> That is not true, m2ts mode is nowhere near Blu-ray compatible yet, so it
> would be misleading to say that. Also it is not just about PCM audio, the
> ticket was opened for PGS subtitles as far as I remember.

I think there is enough room for "Support for muxing pcm and pgs in m2ts"

Carl Eugen
Marton Balint April 20, 2020, 5:39 p.m. UTC | #4
On Thu, 16 Apr 2020, Carl Eugen Hoyos wrote:

> Am Mo., 13. Apr. 2020 um 02:17 Uhr schrieb Marton Balint <cus@passwd.hu>:
>>
>>
>>
>> On Mon, 13 Apr 2020, Carl Eugen Hoyos wrote:
>>
>> > Am Mo., 13. Apr. 2020 um 00:38 Uhr schrieb Marton Balint <cus@passwd.hu>:
>> >>
>> >> Fixes ticket #2622.
>> >>
>> >> Signed-off-by: Marton Balint <cus@passwd.hu>
>> >> ---
>> >>  Changelog               |  1 +
>> >>  libavformat/mpegtsenc.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++++-
>> >>  2 files changed, 58 insertions(+), 1 deletion(-)
>> >>
>> >> diff --git a/Changelog b/Changelog
>> >> index 6dfe750d81..4ba44e5e2d 100644
>> >> --- a/Changelog
>> >> +++ b/Changelog
>> >> @@ -58,6 +58,7 @@ version <next>:
>> >>  - switch from AvxSynth to AviSynth+ on Linux
>> >>  - mv30 decoder
>> >>  - Expanded styling support for 3GPP Timed Text Subtitles (movtext)
>> >> +- use the correct stream types for m2ts output
>> >
>> > Don't you agree that "Support pcm audio when muxing m2ts"
>> > or "Support BluRay muxing" is a stronger wording?
>>
>> That is not true, m2ts mode is nowhere near Blu-ray compatible yet, so it
>> would be misleading to say that. Also it is not just about PCM audio, the
>> ticket was opened for PGS subtitles as far as I remember.
>
> I think there is enough room for "Support for muxing pcm and pgs in m2ts"

Ok, will apply soon the series with that line in the changelog.

Thanks,
Marton
Marton Balint April 21, 2020, 7:44 p.m. UTC | #5
On Mon, 20 Apr 2020, Marton Balint wrote:

>
>
> On Thu, 16 Apr 2020, Carl Eugen Hoyos wrote:
>
>> Am Mo., 13. Apr. 2020 um 02:17 Uhr schrieb Marton Balint <cus@passwd.hu>:
>>>
>>>
>>>
>>> On Mon, 13 Apr 2020, Carl Eugen Hoyos wrote:
>>>
>>> > Am Mo., 13. Apr. 2020 um 00:38 Uhr schrieb Marton Balint 
> <cus@passwd.hu>:
>>> >>
>>> >> Fixes ticket #2622.
>>> >>
>>> >> Signed-off-by: Marton Balint <cus@passwd.hu>
>>> >> ---
>>> >>  Changelog               |  1 +
>>> >>  libavformat/mpegtsenc.c | 58 
> ++++++++++++++++++++++++++++++++++++++++++++++++-
>>> >>  2 files changed, 58 insertions(+), 1 deletion(-)
>>> >>
>>> >> diff --git a/Changelog b/Changelog
>>> >> index 6dfe750d81..4ba44e5e2d 100644
>>> >> --- a/Changelog
>>> >> +++ b/Changelog
>>> >> @@ -58,6 +58,7 @@ version <next>:
>>> >>  - switch from AvxSynth to AviSynth+ on Linux
>>> >>  - mv30 decoder
>>> >>  - Expanded styling support for 3GPP Timed Text Subtitles (movtext)
>>> >> +- use the correct stream types for m2ts output
>>> >
>>> > Don't you agree that "Support pcm audio when muxing m2ts"
>>> > or "Support BluRay muxing" is a stronger wording?
>>>
>>> That is not true, m2ts mode is nowhere near Blu-ray compatible yet, so it
>>> would be misleading to say that. Also it is not just about PCM audio, the
>>> ticket was opened for PGS subtitles as far as I remember.
>>
>> I think there is enough room for "Support for muxing pcm and pgs in m2ts"
>
> Ok, will apply soon the series with that line in the changelog.

Applied the series.

Regards
Marton
Carl Eugen Hoyos April 21, 2020, 7:53 p.m. UTC | #6
Am Di., 21. Apr. 2020 um 21:44 Uhr schrieb Marton Balint <cus@passwd.hu>:
>
>
>
> On Mon, 20 Apr 2020, Marton Balint wrote:
>
> >
> >
> > On Thu, 16 Apr 2020, Carl Eugen Hoyos wrote:
> >
> >> Am Mo., 13. Apr. 2020 um 02:17 Uhr schrieb Marton Balint <cus@passwd.hu>:
> >>>
> >>>
> >>>
> >>> On Mon, 13 Apr 2020, Carl Eugen Hoyos wrote:
> >>>
> >>> > Am Mo., 13. Apr. 2020 um 00:38 Uhr schrieb Marton Balint
> > <cus@passwd.hu>:
> >>> >>
> >>> >> Fixes ticket #2622.
> >>> >>
> >>> >> Signed-off-by: Marton Balint <cus@passwd.hu>
> >>> >> ---
> >>> >>  Changelog               |  1 +
> >>> >>  libavformat/mpegtsenc.c | 58
> > ++++++++++++++++++++++++++++++++++++++++++++++++-
> >>> >>  2 files changed, 58 insertions(+), 1 deletion(-)
> >>> >>
> >>> >> diff --git a/Changelog b/Changelog
> >>> >> index 6dfe750d81..4ba44e5e2d 100644
> >>> >> --- a/Changelog
> >>> >> +++ b/Changelog
> >>> >> @@ -58,6 +58,7 @@ version <next>:
> >>> >>  - switch from AvxSynth to AviSynth+ on Linux
> >>> >>  - mv30 decoder
> >>> >>  - Expanded styling support for 3GPP Timed Text Subtitles (movtext)
> >>> >> +- use the correct stream types for m2ts output
> >>> >
> >>> > Don't you agree that "Support pcm audio when muxing m2ts"
> >>> > or "Support BluRay muxing" is a stronger wording?
> >>>
> >>> That is not true, m2ts mode is nowhere near Blu-ray compatible yet, so it
> >>> would be misleading to say that. Also it is not just about PCM audio, the
> >>> ticket was opened for PGS subtitles as far as I remember.
> >>
> >> I think there is enough room for "Support for muxing pcm and pgs in m2ts"
> >
> > Ok, will apply soon the series with that line in the changelog.
>
> Applied the series.

Thank you!

Carl Eugen
diff mbox series

Patch

diff --git a/Changelog b/Changelog
index 6dfe750d81..4ba44e5e2d 100644
--- a/Changelog
+++ b/Changelog
@@ -58,6 +58,7 @@  version <next>:
 - switch from AvxSynth to AviSynth+ on Linux
 - mv30 decoder
 - Expanded styling support for 3GPP Timed Text Subtitles (movtext)
+- use the correct stream types for m2ts output
 
 
 version 4.2:
diff --git a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c
index add35aca89..b154675d60 100644
--- a/libavformat/mpegtsenc.c
+++ b/libavformat/mpegtsenc.c
@@ -359,6 +359,54 @@  static int get_dvb_stream_type(AVFormatContext *s, AVStream *st)
     return stream_type;
 }
 
+static int get_m2ts_stream_type(AVFormatContext *s, AVStream *st)
+{
+    int stream_type;
+
+    switch (st->codecpar->codec_id) {
+    case AV_CODEC_ID_MPEG2VIDEO:
+        stream_type = STREAM_TYPE_VIDEO_MPEG2;
+        break;
+    case AV_CODEC_ID_H264:
+        stream_type = STREAM_TYPE_VIDEO_H264;
+        break;
+    case AV_CODEC_ID_VC1:
+        stream_type = STREAM_TYPE_VIDEO_VC1;
+        break;
+    case AV_CODEC_ID_HEVC:
+        stream_type = STREAM_TYPE_VIDEO_HEVC;
+        break;
+    case AV_CODEC_ID_PCM_BLURAY:
+        stream_type = 0x80;
+        break;
+    case AV_CODEC_ID_AC3:
+        stream_type = 0x81;
+        break;
+    case AV_CODEC_ID_DTS:
+        stream_type = (st->codecpar->channels > 6) ? 0x85 : 0x82;
+        break;
+    case AV_CODEC_ID_TRUEHD:
+        stream_type = 0x83;
+        break;
+    case AV_CODEC_ID_EAC3:
+        stream_type = 0x84;
+        break;
+    case AV_CODEC_ID_HDMV_PGS_SUBTITLE:
+        stream_type = 0x90;
+        break;
+    case AV_CODEC_ID_HDMV_TEXT_SUBTITLE:
+        stream_type = 0x92;
+        break;
+    default:
+        av_log(s, AV_LOG_WARNING, "Stream %d, codec %s, is muxed as a private data stream "
+               "and may not be recognized upon reading.\n", st->index, avcodec_get_name(st->codecpar->codec_id));
+        stream_type = STREAM_TYPE_PRIVATE_DATA;
+        break;
+    }
+
+    return stream_type;
+}
+
 static int mpegts_write_pmt(AVFormatContext *s, MpegTSService *service)
 {
     MpegTSWrite *ts = s->priv_data;
@@ -372,6 +420,14 @@  static int mpegts_write_pmt(AVFormatContext *s, MpegTSService *service)
     q += 2; /* patched after */
 
     /* put program info here */
+    if (ts->m2ts_mode) {
+        put_registration_descriptor(&q, MKTAG('H', 'D', 'M', 'V'));
+        *q++ = 0x88;        // descriptor_tag - hdmv_copy_control_descriptor
+        *q++ = 0x04;        // descriptor_length
+        put16(&q, 0x0fff);  // CA_System_ID
+        *q++ = 0xfc;        // private_data_byte
+        *q++ = 0xfc;        // private_data_byte
+    }
 
     val = 0xf000 | (q - program_info_length_ptr - 2);
     program_info_length_ptr[0] = val >> 8;
@@ -401,7 +457,7 @@  static int mpegts_write_pmt(AVFormatContext *s, MpegTSService *service)
             break;
         }
 
-        stream_type = get_dvb_stream_type(s, st);
+        stream_type = ts->m2ts_mode ? get_m2ts_stream_type(s, st) : get_dvb_stream_type(s, st);
 
         *q++ = stream_type;
         put16(&q, 0xe000 | ts_st->pid);