[FFmpeg-devel] [PATCH v2] avcodec/h264_sei: Add acces to truncated SEI data

2019-06-08 Thread Antonin Gouzer
---
Some codecs editors had miss interpreted the H264 standart and
have coded a wrong size in the SEI data.
size = SEI size + 1.
The SEI data is detected as "truncated"
Ex: 
https://drive.google.com/file/d/1cNtLwnfPnyJnYqE7OYhU3SCoLRtuXIUM/view?usp=sharing
Command:
ffprobe -print_format xml -show_frames -read_intervals %+0.04 truncated.h264 
This (simple) patch add the possibility to read this false truncated SEI data 
with the default stric_std_compliance or less.
The error remain logged in both cases.

V2: Modifiy the patch for only the off by one values

Thanks in advance !
---
 libavcodec/h264_sei.c | 24 +++-
 libavcodec/h264_sei.h |  2 +-
 2 files changed, 16 insertions(+), 10 deletions(-)

diff --git a/libavcodec/h264_sei.c b/libavcodec/h264_sei.c
index d4eb9c0dab..7871cf87ed 100644
--- a/libavcodec/h264_sei.c
+++ b/libavcodec/h264_sei.c
@@ -402,7 +402,7 @@ static int 
decode_alternative_transfer(H264SEIAlternativeTransfer *h,
 }
 
 int ff_h264_sei_decode(H264SEIContext *h, GetBitContext *gb,
-   const H264ParamSets *ps, void *logctx)
+   const H264ParamSets *ps, AVCodecContext *avctx)
 {
 int master_ret = 0;
 
@@ -425,27 +425,33 @@ int ff_h264_sei_decode(H264SEIContext *h, GetBitContext 
*gb,
 } while (get_bits(gb, 8) == 255);
 
 if (size > get_bits_left(gb) / 8) {
-av_log(logctx, AV_LOG_ERROR, "SEI type %d size %d truncated at 
%d\n",
+
+if (size == get_bits_left(gb) / 8 + 1 && 
avctx->strict_std_compliance <= FF_COMPLIANCE_NORMAL){
+av_log(avctx, AV_LOG_WARNING, "SEI type %d size %d truncated 
at %d\n",
type, 8*size, get_bits_left(gb));
-return AVERROR_INVALIDDATA;
+   } else {
+av_log(avctx, AV_LOG_ERROR, "SEI type %d size %d truncated at 
%d, data will not be read\n",
+   type, 8*size, get_bits_left(gb));
+return AVERROR_INVALIDDATA;
+   }
 }
 next = get_bits_count(gb) + 8 * size;
 
 switch (type) {
 case H264_SEI_TYPE_PIC_TIMING: // Picture timing SEI
-ret = decode_picture_timing(>picture_timing, gb, ps, logctx);
+ret = decode_picture_timing(>picture_timing, gb, ps, avctx);
 break;
 case H264_SEI_TYPE_USER_DATA_REGISTERED:
-ret = decode_registered_user_data(h, gb, logctx, size);
+ret = decode_registered_user_data(h, gb, avctx, size);
 break;
 case H264_SEI_TYPE_USER_DATA_UNREGISTERED:
-ret = decode_unregistered_user_data(>unregistered, gb, logctx, 
size);
+ret = decode_unregistered_user_data(>unregistered, gb, avctx, 
size);
 break;
 case H264_SEI_TYPE_RECOVERY_POINT:
-ret = decode_recovery_point(>recovery_point, gb, logctx);
+ret = decode_recovery_point(>recovery_point, gb, avctx);
 break;
 case H264_SEI_TYPE_BUFFERING_PERIOD:
-ret = decode_buffering_period(>buffering_period, gb, ps, 
logctx);
+ret = decode_buffering_period(>buffering_period, gb, ps, avctx);
 break;
 case H264_SEI_TYPE_FRAME_PACKING:
 ret = decode_frame_packing_arrangement(>frame_packing, gb);
@@ -460,7 +466,7 @@ int ff_h264_sei_decode(H264SEIContext *h, GetBitContext *gb,
 ret = decode_alternative_transfer(>alternative_transfer, gb);
 break;
 default:
-av_log(logctx, AV_LOG_DEBUG, "unknown SEI type %d\n", type);
+av_log(avctx, AV_LOG_DEBUG, "unknown SEI type %d\n", type);
 }
 if (ret < 0 && ret != AVERROR_PS_NOT_FOUND)
 return ret;
diff --git a/libavcodec/h264_sei.h b/libavcodec/h264_sei.h
index a75c3aa175..32f3d67096 100644
--- a/libavcodec/h264_sei.h
+++ b/libavcodec/h264_sei.h
@@ -190,7 +190,7 @@ typedef struct H264SEIContext {
 struct H264ParamSets;
 
 int ff_h264_sei_decode(H264SEIContext *h, GetBitContext *gb,
-   const struct H264ParamSets *ps, void *logctx);
+   const struct H264ParamSets *ps, AVCodecContext *avctx);
 
 /**
  * Reset SEI values at the beginning of the frame.
-- 
2.11.0

___
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".

Re: [FFmpeg-devel] [PATCH] avcodec/h264_sei: Add experimental acces to truncated SEI data

2019-06-04 Thread Antonin Gouzer
Hello,
Thanks for your response.
It's difficult to say if this is a common issue.
I have hundred of thousands of files like this from an editor.

Even the off by one Size is not standart compliant and it would be
incorrect to not report it as an error/warning

My first idea was to allow the user to attempt reading such data but
not as a default behaviour.
The patch is larger than my use case and allow size off by N.

Do you think that it would be better to reduce the patch to a unique
use case: truncated SEI of  picture timing type, off by one size ?

Regards

Le mar. 4 juin 2019 à 08:12, Reimar Döffinger
 a écrit :
>
>
>
> On 04.06.2019, at 00:21, Antonin Gouzer  wrote:
>
> > ---
> > Some codecs editors had miss interpreted the H264 standart and
> > have coded a wrong size in the SEI data.
> > size = SEI size + 1.
> > The SEI data is detected as "truncated"
> > Ex: 
> > https://drive.google.com/file/d/1cNtLwnfPnyJnYqE7OYhU3SCoLRtuXIUM/view?usp=sharing
> > Command:
> > ffprobe -strict experimental -print_format xml -show_frames -read_intervals 
> > %+0.04 truncated.h264
> > This (simple) patch add the possibility to read this false truncated SEI 
> > data.
> > by setting strict_std_compliance = FF_COMPLIANCE_EXPERIMENTAL.
> > The error remain logged.
> >
> > Thanks in advance !
> >
>
> > @@ -425,27 +425,28 @@ int ff_h264_sei_decode(H264SEIContext *h, 
> > GetBitContext *gb,
> > } while (get_bits(gb, 8) == 255);
> >
> > if (size > get_bits_left(gb) / 8) {
> > -av_log(logctx, AV_LOG_ERROR, "SEI type %d size %d truncated at 
> > %d\n",
> > +av_log(avctx, AV_LOG_ERROR, "SEI type %d size %d truncated at 
> > %d\n",
> >type, 8*size, get_bits_left(gb));
> > -return AVERROR_INVALIDDATA;
> > +if (avctx->strict_std_compliance > FF_COMPLIANCE_EXPERIMENTAL)
> > +return AVERROR_INVALIDDATA;
> > }
> > next = get_bits_count(gb) + 8 * size;
>
> This doesn't seem right, shouldn't you adjust "size"?
> Also if this is reasonably common shouldn't we accept at least the exactly 
> off-by-one case at the default settings?
> ___
> 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] [PATCH] avcodec/h264_sei: Add experimental acces to truncated SEI data

2019-06-03 Thread Antonin Gouzer
---
Some codecs editors had miss interpreted the H264 standart and
have coded a wrong size in the SEI data.
size = SEI size + 1.
The SEI data is detected as "truncated"
Ex: 
https://drive.google.com/file/d/1cNtLwnfPnyJnYqE7OYhU3SCoLRtuXIUM/view?usp=sharing
Command:
ffprobe -strict experimental -print_format xml -show_frames -read_intervals 
%+0.04 truncated.h264 
This (simple) patch add the possibility to read this false truncated SEI data.
by setting strict_std_compliance = FF_COMPLIANCE_EXPERIMENTAL.
The error remain logged.

Thanks in advance !
---
 libavcodec/h264_sei.c | 19 ++-
 libavcodec/h264_sei.h |  2 +-
 2 files changed, 11 insertions(+), 10 deletions(-)

diff --git a/libavcodec/h264_sei.c b/libavcodec/h264_sei.c
index d4eb9c0dab..28cd7577ed 100644
--- a/libavcodec/h264_sei.c
+++ b/libavcodec/h264_sei.c
@@ -402,7 +402,7 @@ static int 
decode_alternative_transfer(H264SEIAlternativeTransfer *h,
 }
 
 int ff_h264_sei_decode(H264SEIContext *h, GetBitContext *gb,
-   const H264ParamSets *ps, void *logctx)
+   const H264ParamSets *ps, AVCodecContext *avctx)
 {
 int master_ret = 0;
 
@@ -425,27 +425,28 @@ int ff_h264_sei_decode(H264SEIContext *h, GetBitContext 
*gb,
 } while (get_bits(gb, 8) == 255);
 
 if (size > get_bits_left(gb) / 8) {
-av_log(logctx, AV_LOG_ERROR, "SEI type %d size %d truncated at 
%d\n",
+av_log(avctx, AV_LOG_ERROR, "SEI type %d size %d truncated at 
%d\n",
type, 8*size, get_bits_left(gb));
-return AVERROR_INVALIDDATA;
+if (avctx->strict_std_compliance > FF_COMPLIANCE_EXPERIMENTAL)
+return AVERROR_INVALIDDATA;
 }
 next = get_bits_count(gb) + 8 * size;
 
 switch (type) {
 case H264_SEI_TYPE_PIC_TIMING: // Picture timing SEI
-ret = decode_picture_timing(>picture_timing, gb, ps, logctx);
+ret = decode_picture_timing(>picture_timing, gb, ps, avctx);
 break;
 case H264_SEI_TYPE_USER_DATA_REGISTERED:
-ret = decode_registered_user_data(h, gb, logctx, size);
+ret = decode_registered_user_data(h, gb, avctx, size);
 break;
 case H264_SEI_TYPE_USER_DATA_UNREGISTERED:
-ret = decode_unregistered_user_data(>unregistered, gb, logctx, 
size);
+ret = decode_unregistered_user_data(>unregistered, gb, avctx, 
size);
 break;
 case H264_SEI_TYPE_RECOVERY_POINT:
-ret = decode_recovery_point(>recovery_point, gb, logctx);
+ret = decode_recovery_point(>recovery_point, gb, avctx);
 break;
 case H264_SEI_TYPE_BUFFERING_PERIOD:
-ret = decode_buffering_period(>buffering_period, gb, ps, 
logctx);
+ret = decode_buffering_period(>buffering_period, gb, ps, avctx);
 break;
 case H264_SEI_TYPE_FRAME_PACKING:
 ret = decode_frame_packing_arrangement(>frame_packing, gb);
@@ -460,7 +461,7 @@ int ff_h264_sei_decode(H264SEIContext *h, GetBitContext *gb,
 ret = decode_alternative_transfer(>alternative_transfer, gb);
 break;
 default:
-av_log(logctx, AV_LOG_DEBUG, "unknown SEI type %d\n", type);
+av_log(avctx, AV_LOG_DEBUG, "unknown SEI type %d\n", type);
 }
 if (ret < 0 && ret != AVERROR_PS_NOT_FOUND)
 return ret;
diff --git a/libavcodec/h264_sei.h b/libavcodec/h264_sei.h
index a75c3aa175..32f3d67096 100644
--- a/libavcodec/h264_sei.h
+++ b/libavcodec/h264_sei.h
@@ -190,7 +190,7 @@ typedef struct H264SEIContext {
 struct H264ParamSets;
 
 int ff_h264_sei_decode(H264SEIContext *h, GetBitContext *gb,
-   const struct H264ParamSets *ps, void *logctx);
+   const struct H264ParamSets *ps, AVCodecContext *avctx);
 
 /**
  * Reset SEI values at the beginning of the frame.
-- 
2.11.0

___
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".

Re: [FFmpeg-devel] [FFMPEG DEVEL] [PATCH v6] fftools/ffprobe: Add S12M Timecode output as side data (such as SEI TC)

2019-05-29 Thread Antonin Gouzer
Thank you very much!

Le lun. 27 mai 2019 à 00:35, Marton Balint  a écrit :

>
>
> On Sat, 25 May 2019, Antonin Gouzer wrote:
>
> > Hello,
> > Shame on me, I didn't test the patch with the json format, only xml and
> flat.
> > It's ok now.
> > ok for XML too.
> >
> > Thanks!
>
> Thanks, applied.
>
> Regards,
> Marton
>
> >
> >
> > Le sam. 25 mai 2019 à 00:27, Marton Balint  a écrit :
> >>
> >>
> >>
> >> On Fri, 24 May 2019, Antonin Gouzer wrote:
> >>
> >> > ---
> >> > Add S12M Timecode output with the show_frame option
> >> > Multiple timecodes (3) for one frame support
> >> > Control side date Size to 16
> >> > Correct ffrpobe.xsd to allow multiple timecodes in side_data element
> >> > ---
> >> > doc/ffprobe.xsd   |  8 
> >> > fftools/ffprobe.c | 14 +-
> >> > 2 files changed, 21 insertions(+), 1 deletion(-)
> >>
> >> I almost committed this, but found another issue: the JSON output
> >> contained the "timecode" key multiple times. Apparently in order for the
> >> JSON output to work, we need a separate section for arrays.
> >>
> >> I managed to make those changes (see the attached patch), it affected
> the
> >> XML output slightly as well. Please let me know if this is satisfactory
> to
> >> you.
> >>
> >> Thanks,
> >> Marton___
> >> 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".
___
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".

Re: [FFmpeg-devel] [FFMPEG DEVEL] [PATCH v6] fftools/ffprobe: Add S12M Timecode output as side data (such as SEI TC)

2019-05-25 Thread Antonin Gouzer
Hello,
Shame on me, I didn't test the patch with the json format, only xml and flat.
It's ok now.
ok for XML too.

Thanks!


Le sam. 25 mai 2019 à 00:27, Marton Balint  a écrit :
>
>
>
> On Fri, 24 May 2019, Antonin Gouzer wrote:
>
> > ---
> > Add S12M Timecode output with the show_frame option
> > Multiple timecodes (3) for one frame support
> > Control side date Size to 16
> > Correct ffrpobe.xsd to allow multiple timecodes in side_data element
> > ---
> > doc/ffprobe.xsd   |  8 
> > fftools/ffprobe.c | 14 +-
> > 2 files changed, 21 insertions(+), 1 deletion(-)
>
> I almost committed this, but found another issue: the JSON output
> contained the "timecode" key multiple times. Apparently in order for the
> JSON output to work, we need a separate section for arrays.
>
> I managed to make those changes (see the attached patch), it affected the
> XML output slightly as well. Please let me know if this is satisfactory to
> you.
>
> Thanks,
> Marton___
> 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] [FFMPEG DEVEL] [PATCH v6] fftools/ffprobe: Add S12M Timecode output as side data (such as SEI TC)

2019-05-24 Thread Antonin Gouzer
---
Add S12M Timecode output with the show_frame option
Multiple timecodes (3) for one frame support
Control side date Size to 16
Correct ffrpobe.xsd to allow multiple timecodes in side_data element
---
 doc/ffprobe.xsd   |  8 
 fftools/ffprobe.c | 14 +-
 2 files changed, 21 insertions(+), 1 deletion(-)

diff --git a/doc/ffprobe.xsd b/doc/ffprobe.xsd
index 3e58da0f46..818e54c2c5 100644
--- a/doc/ffprobe.xsd
+++ b/doc/ffprobe.xsd
@@ -147,11 +147,19 @@
 
 
 
+
+
+
+
 
 
 
 
 
+
+
+
+
 
   
   
diff --git a/fftools/ffprobe.c b/fftools/ffprobe.c
index dea489d02e..6e290d5d88 100644
--- a/fftools/ffprobe.c
+++ b/fftools/ffprobe.c
@@ -165,6 +165,7 @@ typedef enum {
 SECTION_ID_FRAME_TAGS,
 SECTION_ID_FRAME_SIDE_DATA_LIST,
 SECTION_ID_FRAME_SIDE_DATA,
+SECTION_ID_FRAME_SIDE_DATA_TIMECODE,
 SECTION_ID_FRAME_LOG,
 SECTION_ID_FRAME_LOGS,
 SECTION_ID_LIBRARY_VERSION,
@@ -209,7 +210,8 @@ static struct section sections[] = {
 [SECTION_ID_FRAME] =  { SECTION_ID_FRAME, "frame", 0, { 
SECTION_ID_FRAME_TAGS, SECTION_ID_FRAME_SIDE_DATA_LIST, SECTION_ID_FRAME_LOGS, 
-1 } },
 [SECTION_ID_FRAME_TAGS] = { SECTION_ID_FRAME_TAGS, "tags", 
SECTION_FLAG_HAS_VARIABLE_FIELDS, { -1 }, .element_name = "tag", .unique_name = 
"frame_tags" },
 [SECTION_ID_FRAME_SIDE_DATA_LIST] ={ SECTION_ID_FRAME_SIDE_DATA_LIST, 
"side_data_list", SECTION_FLAG_IS_ARRAY, { SECTION_ID_FRAME_SIDE_DATA, -1 }, 
.element_name = "side_data", .unique_name = "frame_side_data_list" },
-[SECTION_ID_FRAME_SIDE_DATA] = { SECTION_ID_FRAME_SIDE_DATA, 
"side_data", 0, { -1 } },
+[SECTION_ID_FRAME_SIDE_DATA] = { SECTION_ID_FRAME_SIDE_DATA, 
"side_data", 0, { SECTION_ID_FRAME_SIDE_DATA_TIMECODE, -1 } },
+[SECTION_ID_FRAME_SIDE_DATA_TIMECODE] = { 
SECTION_ID_FRAME_SIDE_DATA_TIMECODE, "timecode", 0, { -1 } },
 [SECTION_ID_FRAME_LOGS] = { SECTION_ID_FRAME_LOGS, "logs", 
SECTION_FLAG_IS_ARRAY, { SECTION_ID_FRAME_LOG, -1 } },
 [SECTION_ID_FRAME_LOG] =  { SECTION_ID_FRAME_LOG, "log", 0, { -1 
},  },
 [SECTION_ID_LIBRARY_VERSIONS] =   { SECTION_ID_LIBRARY_VERSIONS, 
"library_versions", SECTION_FLAG_IS_ARRAY, { SECTION_ID_LIBRARY_VERSION, -1 } },
@@ -2199,6 +2201,16 @@ static void show_frame(WriterContext *w, AVFrame *frame, 
AVStream *stream,
 char tcbuf[AV_TIMECODE_STR_SIZE];
 av_timecode_make_mpeg_tc_string(tcbuf, *(int64_t *)(sd->data));
 print_str("timecode", tcbuf);
+} else if (sd->type == AV_FRAME_DATA_S12M_TIMECODE && sd->size == 
16) {
+uint32_t *tc = (uint32_t*)sd->data;
+int m = FFMIN(tc[0],3);
+for (int j = 1; j <= m ; j++) {
+char tcbuf[AV_TIMECODE_STR_SIZE];
+av_timecode_make_smpte_tc_string(tcbuf, tc[j], 0);
+writer_print_section_header(w, 
SECTION_ID_FRAME_SIDE_DATA_TIMECODE);
+print_str("value", tcbuf);
+writer_print_section_footer(w); 
+}  
 } else if (sd->type == AV_FRAME_DATA_MASTERING_DISPLAY_METADATA) {
 AVMasteringDisplayMetadata *metadata = 
(AVMasteringDisplayMetadata *)sd->data;
 
-- 
2.11.0

___
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] [FFMPEG DEVEL] [PATCH v5] fftools/ffprobe: Add S12M Timecode output as side data (such as SEI TC)

2019-05-22 Thread Antonin Gouzer
---
Change structure to conserve one SEI data=one side data with multiple 
timecode elements 
---
 fftools/ffprobe.c | 14 +-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/fftools/ffprobe.c b/fftools/ffprobe.c
index dea489d02e..c9c15fc205 100644
--- a/fftools/ffprobe.c
+++ b/fftools/ffprobe.c
@@ -165,6 +165,7 @@ typedef enum {
 SECTION_ID_FRAME_TAGS,
 SECTION_ID_FRAME_SIDE_DATA_LIST,
 SECTION_ID_FRAME_SIDE_DATA,
+SECTION_ID_FRAME_SIDE_DATA_TIMECODE,
 SECTION_ID_FRAME_LOG,
 SECTION_ID_FRAME_LOGS,
 SECTION_ID_LIBRARY_VERSION,
@@ -209,7 +210,8 @@ static struct section sections[] = {
 [SECTION_ID_FRAME] =  { SECTION_ID_FRAME, "frame", 0, { 
SECTION_ID_FRAME_TAGS, SECTION_ID_FRAME_SIDE_DATA_LIST, SECTION_ID_FRAME_LOGS, 
-1 } },
 [SECTION_ID_FRAME_TAGS] = { SECTION_ID_FRAME_TAGS, "tags", 
SECTION_FLAG_HAS_VARIABLE_FIELDS, { -1 }, .element_name = "tag", .unique_name = 
"frame_tags" },
 [SECTION_ID_FRAME_SIDE_DATA_LIST] ={ SECTION_ID_FRAME_SIDE_DATA_LIST, 
"side_data_list", SECTION_FLAG_IS_ARRAY, { SECTION_ID_FRAME_SIDE_DATA, -1 }, 
.element_name = "side_data", .unique_name = "frame_side_data_list" },
-[SECTION_ID_FRAME_SIDE_DATA] = { SECTION_ID_FRAME_SIDE_DATA, 
"side_data", 0, { -1 } },
+[SECTION_ID_FRAME_SIDE_DATA] = { SECTION_ID_FRAME_SIDE_DATA, 
"side_data", 0, { SECTION_ID_FRAME_SIDE_DATA_TIMECODE, -1 } },
+[SECTION_ID_FRAME_SIDE_DATA_TIMECODE] = { 
SECTION_ID_FRAME_SIDE_DATA_TIMECODE, "timecode", 0, { -1 } },
 [SECTION_ID_FRAME_LOGS] = { SECTION_ID_FRAME_LOGS, "logs", 
SECTION_FLAG_IS_ARRAY, { SECTION_ID_FRAME_LOG, -1 } },
 [SECTION_ID_FRAME_LOG] =  { SECTION_ID_FRAME_LOG, "log", 0, { -1 
},  },
 [SECTION_ID_LIBRARY_VERSIONS] =   { SECTION_ID_LIBRARY_VERSIONS, 
"library_versions", SECTION_FLAG_IS_ARRAY, { SECTION_ID_LIBRARY_VERSION, -1 } },
@@ -2199,6 +2201,16 @@ static void show_frame(WriterContext *w, AVFrame *frame, 
AVStream *stream,
 char tcbuf[AV_TIMECODE_STR_SIZE];
 av_timecode_make_mpeg_tc_string(tcbuf, *(int64_t *)(sd->data));
 print_str("timecode", tcbuf);
+} else if (sd->type == AV_FRAME_DATA_S12M_TIMECODE && sd->size >= 
8) {
+uint32_t *tc = (uint32_t*)sd->data;
+int m = FFMIN(tc[0],3);
+for (int j = 1; j <= m ; j++) {
+char tcbuf[AV_TIMECODE_STR_SIZE];
+av_timecode_make_smpte_tc_string(tcbuf, tc[j], 0);
+writer_print_section_header(w, 
SECTION_ID_FRAME_SIDE_DATA_TIMECODE);
+print_str("value", tcbuf);
+   writer_print_section_footer(w); 
+}  
 } else if (sd->type == AV_FRAME_DATA_MASTERING_DISPLAY_METADATA) {
 AVMasteringDisplayMetadata *metadata = 
(AVMasteringDisplayMetadata *)sd->data;
 
-- 
2.11.0

___
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".

Re: [FFmpeg-devel] [FFMPEG DEVEL] [PATCH v4] fftools/ffprobe: Add S12M Timecode output as side data (such as SEI TC)

2019-05-22 Thread Antonin Gouzer
Hello sorry for the delay.
Yes you're right.
There is 3 timecodes data for one frame.
One SEI data with 3 timecodes would represented by 3 side data.
As far as I know there is only one timecode in the SEI data.
In order to keep coherence with the schema (No simple element) , we could
implement  this:



 
 
 
   



Would it be correct ?

Le dim. 19 mai 2019 à 19:50, Marton Balint  a écrit :

>
>
> On Sun, 19 May 2019, Antonin Gouzer wrote:
>
> > ---
> > Add the index of the timecode in case of multiple timecodes values
> > Limit to 3 the number of timecodes
> > remove break
>
> Am I reading this correctly, you'd get XML like
>
>  id="1"/>
>  id="2"/>
>  id="3"/>
>
> right? The problem is that your output now looks as if the frame have 3
> instances of SMPTE 12-1 timecode side data.
>
> Maybe it's just me, but I'd prefer something like
>
> 
> 00:03:25:03
> 00:03:25:03
> 00:03:25:03
> 
>
> What do you think?
>
> Thanks,
> Marton
> ___
> 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] [FFMPEG DEVEL] [PATCH v4] fftools/ffprobe: Add S12M Timecode output as side data (such as SEI TC)

2019-05-18 Thread Antonin Gouzer
---
Add the index of the timecode in case of multiple timecodes values
Limit to 3 the number of timecodes
remove break
Thanks you !
---
 fftools/ffprobe.c | 14 ++
 1 file changed, 14 insertions(+)

diff --git a/fftools/ffprobe.c b/fftools/ffprobe.c
index dea489d02e..b43349f746 100644
--- a/fftools/ffprobe.c
+++ b/fftools/ffprobe.c
@@ -2199,6 +2199,20 @@ static void show_frame(WriterContext *w, AVFrame *frame, 
AVStream *stream,
 char tcbuf[AV_TIMECODE_STR_SIZE];
 av_timecode_make_mpeg_tc_string(tcbuf, *(int64_t *)(sd->data));
 print_str("timecode", tcbuf);
+} else if (sd->type == AV_FRAME_DATA_S12M_TIMECODE && sd->size >= 
8) {
+uint32_t *tc = (uint32_t*)sd->data;
+for (int j = 1; j <= FFMIN(tc[0],3); j++) {
+char tcbuf[AV_TIMECODE_STR_SIZE];
+av_timecode_make_smpte_tc_string(tcbuf, tc[j], 0);
+if (j > 1){
+writer_print_section_header(w, 
SECTION_ID_FRAME_SIDE_DATA);
+print_str("side_data_type", name ? name : "unknown");
+}
+print_str("timecode", tcbuf);
+print_int("id",j);
+if (j < tc[0])
+writer_print_section_footer(w);
+}  
 } else if (sd->type == AV_FRAME_DATA_MASTERING_DISPLAY_METADATA) {
 AVMasteringDisplayMetadata *metadata = 
(AVMasteringDisplayMetadata *)sd->data;
 
-- 
2.11.0

___
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] [PATCH v4] fftools/ffprobe: Add S12M Timecode output as side data (such as SEI TC)

2019-05-18 Thread Antonin Gouzer
---
I just correct the indentation in the for loop
Thanks
---
 fftools/ffprobe.c | 8 
 1 file changed, 8 insertions(+)

diff --git a/fftools/ffprobe.c b/fftools/ffprobe.c
index dea489d02e..da92c1592f 100644
--- a/fftools/ffprobe.c
+++ b/fftools/ffprobe.c
@@ -2199,6 +2199,14 @@ static void show_frame(WriterContext *w, AVFrame *frame, 
AVStream *stream,
 char tcbuf[AV_TIMECODE_STR_SIZE];
 av_timecode_make_mpeg_tc_string(tcbuf, *(int64_t *)(sd->data));
 print_str("timecode", tcbuf);
+} else if (sd->type == AV_FRAME_DATA_S12M_TIMECODE && sd->size >= 
8) {
+uint32_t *tc = (uint32_t*)sd->data;
+for (int j = 1; j <= tc[0]; j++) {
+char tcbuf[AV_TIMECODE_STR_SIZE];
+av_timecode_make_smpte_tc_string(tcbuf, tc[j], 0);
+print_str("timecode", tcbuf);
+}
+break;
 } else if (sd->type == AV_FRAME_DATA_MASTERING_DISPLAY_METADATA) {
 AVMasteringDisplayMetadata *metadata = 
(AVMasteringDisplayMetadata *)sd->data;
 
-- 
2.11.0

___
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] [PATCH v3] fftools/ffprobe: Add S12M Timecode output as side data (such as SEI TC)

2019-05-18 Thread Antonin Gouzer
diff --git a/fftools/ffprobe.c b/fftools/ffprobe.c
index dea489d02e..da92c1592f 100644
--- a/fftools/ffprobe.c
+++ b/fftools/ffprobe.c
@@ -2199,6 +2199,14 @@ static void show_frame(WriterContext *w, AVFrame *frame, 
AVStream *stream,
 char tcbuf[AV_TIMECODE_STR_SIZE];
 av_timecode_make_mpeg_tc_string(tcbuf, *(int64_t *)(sd->data));
 print_str("timecode", tcbuf);
+} else if (sd->type == AV_FRAME_DATA_S12M_TIMECODE && sd->size >= 
8) {
+uint32_t *tc = (uint32_t*)sd->data;
+for (int j = 1; j <= tc[0]; j++) {
+char tcbuf[AV_TIMECODE_STR_SIZE];
+av_timecode_make_smpte_tc_string(tcbuf, tc[j], 0);
+print_str("timecode", tcbuf);
+}
+break;
 } else if (sd->type == AV_FRAME_DATA_MASTERING_DISPLAY_METADATA) {
 AVMasteringDisplayMetadata *metadata = 
(AVMasteringDisplayMetadata *)sd->data;
 
-- 
2.11.0

___
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".

Re: [FFmpeg-devel] [FFMPEG DEVEL] [PATCH v2] fftools/ffprobe: Add S12M Timecode output as side data (such as SEI TC)

2019-05-18 Thread Antonin Gouzer
Thank you for your response,
I don't have any example of such a file.
I was thinking that GOP timecode was reserved to MPEG2 files and S12M
to H265/H264 files ?

In every writer the type of timecode is already an attribute: side_data_type.
With the actual xsd the result should be, with the XML writer:






That should be ok don't you think ?

Antonin


Le sam. 18 mai 2019 à 18:20, Marton Balint  a écrit :
>
>
>
> On Fri, 17 May 2019, Antonin Gouzer wrote:
>
> > Thanks in advance.
> > ---
> > fftools/ffprobe.c | 8 
> > 1 file changed, 8 insertions(+)
> >
> > diff --git a/fftools/ffprobe.c b/fftools/ffprobe.c
> > index dea489d02e..4763ce6d98 100644
> > --- a/fftools/ffprobe.c
> > +++ b/fftools/ffprobe.c
> > @@ -2199,6 +2199,14 @@ static void show_frame(WriterContext *w, AVFrame 
> > *frame, AVStream *stream,
> > char tcbuf[AV_TIMECODE_STR_SIZE];
> > av_timecode_make_mpeg_tc_string(tcbuf, *(int64_t 
> > *)(sd->data));
> > print_str("timecode", tcbuf);
> > +} else if (sd->type == AV_FRAME_DATA_S12M_TIMECODE && sd->size 
> > >= 8) {
> > +uint32_t *tc = (uint32_t*)sd->data;
> > +for (int j = 1; j <= tc[0]; j++) {
> > +char tcbuf[AV_TIMECODE_STR_SIZE];
> > +av_timecode_make_smpte_tc_string(tcbuf, tc[j], 0);
> > +print_str("timecode", tcbuf);
> > +}
> > +break;
>
> A frame can have GOP_TIMECODE and S12M_TIMECODE side data at the same
> time, a separate name (e.g. s12m_timecode) should be used and the ffprobe
> xsd should be extended accordingly.
>
> Regards,
> Marton
> ___
> 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] [FFMPEG DEVEL] [PATCH v2] fftools/ffprobe: Add S12M Timecode output as side data (such as SEI TC)

2019-05-17 Thread Antonin Gouzer
Thanks in advance.
---
 fftools/ffprobe.c | 8 
 1 file changed, 8 insertions(+)

diff --git a/fftools/ffprobe.c b/fftools/ffprobe.c
index dea489d02e..4763ce6d98 100644
--- a/fftools/ffprobe.c
+++ b/fftools/ffprobe.c
@@ -2199,6 +2199,14 @@ static void show_frame(WriterContext *w, AVFrame *frame, 
AVStream *stream,
 char tcbuf[AV_TIMECODE_STR_SIZE];
 av_timecode_make_mpeg_tc_string(tcbuf, *(int64_t *)(sd->data));
 print_str("timecode", tcbuf);
+} else if (sd->type == AV_FRAME_DATA_S12M_TIMECODE && sd->size >= 
8) {
+uint32_t *tc = (uint32_t*)sd->data;
+for (int j = 1; j <= tc[0]; j++) {
+char tcbuf[AV_TIMECODE_STR_SIZE];
+av_timecode_make_smpte_tc_string(tcbuf, tc[j], 0);
+print_str("timecode", tcbuf);
+}
+break;
 } else if (sd->type == AV_FRAME_DATA_MASTERING_DISPLAY_METADATA) {
 AVMasteringDisplayMetadata *metadata = 
(AVMasteringDisplayMetadata *)sd->data;
 
-- 
2.11.0

___
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".

Re: [FFmpeg-devel] [PATCH] Add S12M Timecode output as side data with -show_frame option (such as SEI TC)

2019-05-11 Thread Antonin Gouzer
Hello,
Sorry for the first mail which was an error.
This patch just add the SEI Timecode output of H264 files as side data
in ffprobe (-show_frame).
This has been already implemented in the shwoinfo video filter but not
in ffprobe.

Thanks in advance.


Le sam. 11 mai 2019 à 21:24, Antonin Gouzer  a écrit :
>
> From: agouzer 
>
> ---
>  fftools/ffprobe.c | 8 +---
>  1 file changed, 5 insertions(+), 3 deletions(-)
>
> diff --git a/fftools/ffprobe.c b/fftools/ffprobe.c
> index 52e9bbf544..4763ce6d98 100644
> --- a/fftools/ffprobe.c
> +++ b/fftools/ffprobe.c
> @@ -2200,11 +2200,13 @@ static void show_frame(WriterContext *w, AVFrame 
> *frame, AVStream *stream,
>  av_timecode_make_mpeg_tc_string(tcbuf, *(int64_t 
> *)(sd->data));
>  print_str("timecode", tcbuf);
>  } else if (sd->type == AV_FRAME_DATA_S12M_TIMECODE && sd->size 
> >= 8) {
> -uint32_t *tc_sd;
> -tc_sd = (uint32_t*)sd->data;
> +uint32_t *tc = (uint32_t*)sd->data;
> +for (int j = 1; j <= tc[0]; j++) {
>  char tcbuf[AV_TIMECODE_STR_SIZE];
> -av_timecode_make_smpte_tc_string(tcbuf, tc_sd[1],0);
> +av_timecode_make_smpte_tc_string(tcbuf, tc[j], 0);
>  print_str("timecode", tcbuf);
> +}
> +break;
>  } else if (sd->type == AV_FRAME_DATA_MASTERING_DISPLAY_METADATA) 
> {
>  AVMasteringDisplayMetadata *metadata = 
> (AVMasteringDisplayMetadata *)sd->data;
>
> --
> 2.11.0
>
___
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] [PATCH] Add S12M Timecode output as side data with -show_frame option (such as SEI TC)

2019-05-11 Thread Antonin Gouzer
---
 fftools/ffprobe.c | 8 
 1 file changed, 8 insertions(+)

diff --git a/fftools/ffprobe.c b/fftools/ffprobe.c
index dea489d02e..4763ce6d98 100644
--- a/fftools/ffprobe.c
+++ b/fftools/ffprobe.c
@@ -2199,6 +2199,14 @@ static void show_frame(WriterContext *w, AVFrame *frame, 
AVStream *stream,
 char tcbuf[AV_TIMECODE_STR_SIZE];
 av_timecode_make_mpeg_tc_string(tcbuf, *(int64_t *)(sd->data));
 print_str("timecode", tcbuf);
+} else if (sd->type == AV_FRAME_DATA_S12M_TIMECODE && sd->size >= 
8) {
+uint32_t *tc = (uint32_t*)sd->data;
+for (int j = 1; j <= tc[0]; j++) {
+char tcbuf[AV_TIMECODE_STR_SIZE];
+av_timecode_make_smpte_tc_string(tcbuf, tc[j], 0);
+print_str("timecode", tcbuf);
+}
+break;
 } else if (sd->type == AV_FRAME_DATA_MASTERING_DISPLAY_METADATA) {
 AVMasteringDisplayMetadata *metadata = 
(AVMasteringDisplayMetadata *)sd->data;
 
-- 
2.11.0

___
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] [PATCH] Add S12M Timecode output as side data with -show_frame option (such as SEI TC)

2019-05-11 Thread Antonin Gouzer
From: agouzer 

---
 fftools/ffprobe.c | 8 +---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/fftools/ffprobe.c b/fftools/ffprobe.c
index 52e9bbf544..4763ce6d98 100644
--- a/fftools/ffprobe.c
+++ b/fftools/ffprobe.c
@@ -2200,11 +2200,13 @@ static void show_frame(WriterContext *w, AVFrame 
*frame, AVStream *stream,
 av_timecode_make_mpeg_tc_string(tcbuf, *(int64_t *)(sd->data));
 print_str("timecode", tcbuf);
 } else if (sd->type == AV_FRAME_DATA_S12M_TIMECODE && sd->size >= 
8) {
-uint32_t *tc_sd;
-tc_sd = (uint32_t*)sd->data;
+uint32_t *tc = (uint32_t*)sd->data;
+for (int j = 1; j <= tc[0]; j++) {
 char tcbuf[AV_TIMECODE_STR_SIZE];
-av_timecode_make_smpte_tc_string(tcbuf, tc_sd[1],0);
+av_timecode_make_smpte_tc_string(tcbuf, tc[j], 0);
 print_str("timecode", tcbuf);
+}
+break;
 } else if (sd->type == AV_FRAME_DATA_MASTERING_DISPLAY_METADATA) {
 AVMasteringDisplayMetadata *metadata = 
(AVMasteringDisplayMetadata *)sd->data;
 
-- 
2.11.0

___
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] [PATCH] fftools/ffprobe.c: Add to ffprobe S12M Timecode (such as SEI TC) as side data of show frame

2019-05-06 Thread Antonin Gouzer
Add to ffprobe S12M Timecode (such as SEI  TC) as side data with
-show_frame option.
This has been previously implemented in libav but partialy not in ffprobe.

Thanks in advance !


ffprobe_S12M_TC_Side_data.patch
Description: Binary data
___
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".