[FFmpeg-devel] avformat/mpegts: set AV_DISPOSITION_DESCRIPTIONS for OIPF cases

Submitted by Łukasz Krzciuk on April 13, 2018, 1:44 p.m.

Details

Message ID CAFCngTn4ZN7u9HH8bPoXibSoPsxO7HS6E2bZNvfrbDma0ueq5Q@mail.gmail.com
State New
Headers show

Commit Message

Łukasz Krzciuk April 13, 2018, 1:44 p.m.
Hi,

this change is needed according to OIPF spec: 8.4.2 AVComponent,
audioDescription case:

   1. an audio component with an ISO_639_language_descriptor in the PMT
   with the audio_type field set to 0x03
   2. a supplementary_audio_descriptor with the editorial_classification
   field set to 0x01
   3. an ac-3_descriptor or an enhanced_ac-3_descriptor with a
   component_type field with the service_type flags set to Visually Impaired


Regards,

*Łukasz Krzciuk*
Developer

Vewd
ul. Grabarska 2, Pegaz 2A, 50-079 Wrocław, Polska

Comments

Michael Niedermayer April 13, 2018, 3:50 p.m.
On Fri, Apr 13, 2018 at 03:44:40PM +0200, Łukasz Krzciuk wrote:
> Hi,
> 
> this change is needed according to OIPF spec: 8.4.2 AVComponent,
> audioDescription case:
> 
>    1. an audio component with an ISO_639_language_descriptor in the PMT
>    with the audio_type field set to 0x03
>    2. a supplementary_audio_descriptor with the editorial_classification
>    field set to 0x01
>    3. an ac-3_descriptor or an enhanced_ac-3_descriptor with a
>    component_type field with the service_type flags set to Visually Impaired
> 
> 
> Regards,
> 
> *Łukasz Krzciuk*
> Developer
> 
> Vewd
> ul. Grabarska 2, Pegaz 2A, 50-079 Wrocław, Polska

>  mpegts.c |   30 ++++++++++++++++++++++++++++++
>  1 file changed, 30 insertions(+)
> 863b7bca7f23f9ea337fde33f5bb9265ef3b4270  0001-avformat-mpegts-set-AV_DISPOSITION_DESCRIPTIONS-for-.patch
> From 12ef5cdd9c443b1601dc98d910feac87233b1040 Mon Sep 17 00:00:00 2001
> From: =?UTF-8?q?=C5=81ukasz=20Krzciuk?= <lkrzciuk@vewd.com>
> Date: Fri, 13 Apr 2018 14:57:57 +0200
> Subject: [PATCH] avformat/mpegts: set AV_DISPOSITION_DESCRIPTIONS for OIPF
>  cases
> 
> 1. an audio component with an ISO_639_language_descriptor in the PMT with the
> audio_type field set to 0x03
> 2. a supplementary_audio_descriptor with the editorial_classification field set
> to 0x01
> 3. an ac-3_descriptor or an enhanced_ac-3_descriptor with a component_type field
> with the service_type flags set to Visually Impaired
> ---
>  libavformat/mpegts.c | 30 ++++++++++++++++++++++++++++++
>  1 file changed, 30 insertions(+)
> 
> diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c
> index 37a6aa8..df2b3aa 100644
> --- a/libavformat/mpegts.c
> +++ b/libavformat/mpegts.c
> @@ -1835,6 +1835,7 @@ int ff_parse_mpeg2_descriptor(AVFormatContext *fc, AVStream *st, int stream_type
>                  break;
>              case 0x03:
>                  st->disposition |= AV_DISPOSITION_VISUAL_IMPAIRED;
> +                st->disposition |= AV_DISPOSITION_DESCRIPTIONS;
>                  break;
>              }
>          }
> @@ -1910,6 +1911,7 @@ int ff_parse_mpeg2_descriptor(AVFormatContext *fc, AVStream *st, int stream_type
>              switch ((flags >> 2) & 0x1F) { /* editorial_classification */
>              case 0x01:
>                  st->disposition |= AV_DISPOSITION_VISUAL_IMPAIRED;
> +                st->disposition |= AV_DISPOSITION_DESCRIPTIONS;
>                  break;
>              case 0x02:
>                  st->disposition |= AV_DISPOSITION_HEARING_IMPAIRED;
> @@ -1934,6 +1936,34 @@ int ff_parse_mpeg2_descriptor(AVFormatContext *fc, AVStream *st, int stream_type
>              }
>          }
>          break;
> +    case 0x6a: /* ac-3_descriptor */
> +        {
> +            int component_type_flag = get8(pp, desc_end) & (1 << 7);
> +            if (component_type_flag) {
> +                int component_type = get8(pp, desc_end);
> +                int service_type_mask = 0x38;  // 0b00111000
> +                int service_type = ((component_type & service_type_mask) >> 3);
> +                if (service_type == 0x02 /* 0b010 */) {
> +                    st->disposition |= AV_DISPOSITION_DESCRIPTIONS;
> +                    av_log(ts->stream, AV_LOG_INFO, "New track disposition for id %u: %u\n", st->id, st->disposition);

AV_LOG_INFO is likely too noisy for normal usecases

thx

[...]

Patch hide | download patch | download mbox

From 12ef5cdd9c443b1601dc98d910feac87233b1040 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=C5=81ukasz=20Krzciuk?= <lkrzciuk@vewd.com>
Date: Fri, 13 Apr 2018 14:57:57 +0200
Subject: [PATCH] avformat/mpegts: set AV_DISPOSITION_DESCRIPTIONS for OIPF
 cases

1. an audio component with an ISO_639_language_descriptor in the PMT with the
audio_type field set to 0x03
2. a supplementary_audio_descriptor with the editorial_classification field set
to 0x01
3. an ac-3_descriptor or an enhanced_ac-3_descriptor with a component_type field
with the service_type flags set to Visually Impaired
---
 libavformat/mpegts.c | 30 ++++++++++++++++++++++++++++++
 1 file changed, 30 insertions(+)

diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c
index 37a6aa8..df2b3aa 100644
--- a/libavformat/mpegts.c
+++ b/libavformat/mpegts.c
@@ -1835,6 +1835,7 @@  int ff_parse_mpeg2_descriptor(AVFormatContext *fc, AVStream *st, int stream_type
                 break;
             case 0x03:
                 st->disposition |= AV_DISPOSITION_VISUAL_IMPAIRED;
+                st->disposition |= AV_DISPOSITION_DESCRIPTIONS;
                 break;
             }
         }
@@ -1910,6 +1911,7 @@  int ff_parse_mpeg2_descriptor(AVFormatContext *fc, AVStream *st, int stream_type
             switch ((flags >> 2) & 0x1F) { /* editorial_classification */
             case 0x01:
                 st->disposition |= AV_DISPOSITION_VISUAL_IMPAIRED;
+                st->disposition |= AV_DISPOSITION_DESCRIPTIONS;
                 break;
             case 0x02:
                 st->disposition |= AV_DISPOSITION_HEARING_IMPAIRED;
@@ -1934,6 +1936,34 @@  int ff_parse_mpeg2_descriptor(AVFormatContext *fc, AVStream *st, int stream_type
             }
         }
         break;
+    case 0x6a: /* ac-3_descriptor */
+        {
+            int component_type_flag = get8(pp, desc_end) & (1 << 7);
+            if (component_type_flag) {
+                int component_type = get8(pp, desc_end);
+                int service_type_mask = 0x38;  // 0b00111000
+                int service_type = ((component_type & service_type_mask) >> 3);
+                if (service_type == 0x02 /* 0b010 */) {
+                    st->disposition |= AV_DISPOSITION_DESCRIPTIONS;
+                    av_log(ts->stream, AV_LOG_INFO, "New track disposition for id %u: %u\n", st->id, st->disposition);
+                }
+            }
+        }
+        break;
+    case 0x7a: /* enhanced_ac-3_descriptor */
+        {
+            int component_type_flag = get8(pp, desc_end) & (1 << 7);
+            if (component_type_flag) {
+                int component_type = get8(pp, desc_end);
+                int service_type_mask = 0x38;  // 0b00111000
+                int service_type = ((component_type & service_type_mask) >> 3);
+                if (service_type == 0x02 /* 0b010 */) {
+                    st->disposition |= AV_DISPOSITION_DESCRIPTIONS;
+                    av_log(ts->stream, AV_LOG_INFO, "New track disposition for id %u: %u\n", st->id, st->disposition);
+                }
+            }
+        }
+        break;
     default:
         break;
     }
-- 
2.8.3