Re: [FFmpeg-devel] [PATCH] libavformat/mxfdec.c: export source package uids and names as metadata

2014-11-21 Thread Tomas Härdin
On Tue, 2014-11-18 at 16:52 -0800, Mark Reid wrote:
 ---
  libavformat/mxfdec.c | 74 
 +++-
  1 file changed, 39 insertions(+), 35 deletions(-)
 
 diff --git a/libavformat/mxfdec.c b/libavformat/mxfdec.c
 index fa0a2f4..8c13c24 100644
 --- a/libavformat/mxfdec.c
 +++ b/libavformat/mxfdec.c

  static int mxf_timestamp_to_str(uint64_t timestamp, char **str)
  {
  struct tm time = { 0 };
 @@ -1969,7 +1973,7 @@ static const MXFMetadataReadTableEntry 
 mxf_metadata_read_table[] = {
  { { 
 0x06,0x0e,0x2b,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x01,0x01,0x01,0x01,0x30,0x00
  }, mxf_read_identification_metadata },
  { { 
 0x06,0x0e,0x2b,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x01,0x01,0x01,0x01,0x18,0x00
  }, mxf_read_content_storage, 0, AnyType },
  { { 
 0x06,0x0e,0x2b,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x01,0x01,0x01,0x01,0x37,0x00
  }, mxf_read_source_package, sizeof(MXFPackage), SourcePackage },
 -{ { 
 0x06,0x0e,0x2b,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x01,0x01,0x01,0x01,0x36,0x00
  }, mxf_read_material_package, sizeof(MXFPackage), MaterialPackage },
 +{ { 
 0x06,0x0e,0x2b,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x01,0x01,0x01,0x01,0x36,0x00
  }, mxf_read_source_package, sizeof(MXFPackage), MaterialPackage },

Maybe rename mxf_read_source_package to mxf_read_package?
Noticing that both functions are quite similar is a good catch :)
The rest of the patch looks fine.

/Tomas


signature.asc
Description: This is a digitally signed message part
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


Re: [FFmpeg-devel] [PATCH] libavformat/mxfdec.c: export source package uids and names as metadata

2014-11-21 Thread Mark Reid
On Fri, Nov 21, 2014 at 1:25 AM, Tomas Härdin tomas.har...@codemill.se
wrote:

 On Tue, 2014-11-18 at 16:52 -0800, Mark Reid wrote:
  ---
   libavformat/mxfdec.c | 74
 +++-
   1 file changed, 39 insertions(+), 35 deletions(-)
 
  diff --git a/libavformat/mxfdec.c b/libavformat/mxfdec.c
  index fa0a2f4..8c13c24 100644
  --- a/libavformat/mxfdec.c
  +++ b/libavformat/mxfdec.c

   static int mxf_timestamp_to_str(uint64_t timestamp, char **str)
   {
   struct tm time = { 0 };
  @@ -1969,7 +1973,7 @@ static const MXFMetadataReadTableEntry
 mxf_metadata_read_table[] = {
   { {
 0x06,0x0e,0x2b,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x01,0x01,0x01,0x01,0x30,0x00
 }, mxf_read_identification_metadata },
   { {
 0x06,0x0e,0x2b,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x01,0x01,0x01,0x01,0x18,0x00
 }, mxf_read_content_storage, 0, AnyType },
   { {
 0x06,0x0e,0x2b,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x01,0x01,0x01,0x01,0x37,0x00
 }, mxf_read_source_package, sizeof(MXFPackage), SourcePackage },
  -{ {
 0x06,0x0e,0x2b,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x01,0x01,0x01,0x01,0x36,0x00
 }, mxf_read_material_package, sizeof(MXFPackage), MaterialPackage },
  +{ {
 0x06,0x0e,0x2b,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x01,0x01,0x01,0x01,0x36,0x00
 }, mxf_read_source_package, sizeof(MXFPackage), MaterialPackage },

 Maybe rename mxf_read_source_package to mxf_read_package?
 Noticing that both functions are quite similar is a good catch :)
 The rest of the patch looks fine.


great, sounds good, I'll submit a v2 patch renaming mxf_read_source_package
- mxf_read_package

/Tomas

 ___
 ffmpeg-devel mailing list
 ffmpeg-devel@ffmpeg.org
 http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


[FFmpeg-devel] [PATCH] libavformat/mxfdec.c: export source package uids and names as metadata

2014-11-18 Thread Mark Reid
---
 libavformat/mxfdec.c | 74 +++-
 1 file changed, 39 insertions(+), 35 deletions(-)

diff --git a/libavformat/mxfdec.c b/libavformat/mxfdec.c
index fa0a2f4..8c13c24 100644
--- a/libavformat/mxfdec.c
+++ b/libavformat/mxfdec.c
@@ -668,22 +668,6 @@ static int mxf_read_source_clip(void *arg, AVIOContext 
*pb, int tag, int size, U
 return 0;
 }
 
-static int mxf_read_material_package(void *arg, AVIOContext *pb, int tag, int 
size, UID uid, int64_t klv_offset)
-{
-MXFPackage *package = arg;
-switch(tag) {
-case 0x4403:
-package-tracks_count = avio_rb32(pb);
-package-tracks_refs = av_calloc(package-tracks_count, sizeof(UID));
-if (!package-tracks_refs)
-return AVERROR(ENOMEM);
-avio_skip(pb, 4); /* useless size of objects, always 16 according to 
specs */
-avio_read(pb, (uint8_t *)package-tracks_refs, package-tracks_count * 
sizeof(UID));
-break;
-}
-return 0;
-}
-
 static int mxf_read_timecode_component(void *arg, AVIOContext *pb, int tag, 
int size, UID uid, int64_t klv_offset)
 {
 MXFTimecodeComponent *mxf_timecode = arg;
@@ -1416,6 +1400,34 @@ static int mxf_is_intra_only(MXFDescriptor *descriptor)
 descriptor-essence_codec_ul)-id != 
AV_CODEC_ID_NONE;
 }
 
+static int mxf_uid_to_str(UID uid, char **str)
+{
+int i;
+char *p;
+p = *str = av_mallocz(sizeof(UID) * 2 + 4 + 1);
+if (!p)
+return AVERROR(ENOMEM);
+for (i = 0; i  sizeof(UID); i++) {
+snprintf(p, 2 + 1, %.2x, uid[i]);
+p += 2;
+if (i == 3 || i == 5 || i == 7 || i == 9) {
+snprintf(p, 1 + 1, -);
+p++;
+}
+}
+return 0;
+}
+
+static int mxf_add_uid_metadata(AVDictionary **pm, const char *key, UID uid)
+{
+char *str;
+int ret;
+if ((ret = mxf_uid_to_str(uid, str))  0)
+return ret;
+av_dict_set(pm, key, str, AV_DICT_DONT_STRDUP_VAL);
+return 0;
+}
+
 static int mxf_add_timecode_metadata(AVDictionary **pm, const char *key, 
AVTimecode *tc)
 {
 char buf[AV_TIMECODE_STR_SIZE];
@@ -1476,6 +1488,8 @@ static int mxf_parse_physical_source_package(MXFContext 
*mxf, MXFTrack *source_t
 if (!physical_package)
 break;
 
+mxf_add_uid_metadata(st-metadata, reel_uid, 
physical_package-package_uid);
+
 /* the name of physical source package is name of the reel or tape */
 if (physical_package-name  physical_package-name[0])
 av_dict_set(st-metadata, reel_name, physical_package-name, 0);
@@ -1532,6 +1546,10 @@ static int mxf_parse_structural_metadata(MXFContext *mxf)
 return AVERROR_INVALIDDATA;
 }
 
+mxf_add_uid_metadata(mxf-fc-metadata, material_package_uid, 
material_package-package_uid);
+if (material_package-name  material_package-name[0])
+av_dict_set(mxf-fc-metadata, material_package_name, 
material_package-name, 0);
+
 for (i = 0; i  material_package-tracks_count; i++) {
 MXFPackage *source_package = NULL;
 MXFTrack *material_track = NULL;
@@ -1712,6 +1730,10 @@ static int mxf_parse_structural_metadata(MXFContext *mxf)
 }
 av_log(mxf-fc, AV_LOG_VERBOSE, \n);
 
+mxf_add_uid_metadata(st-metadata, file_package_uid, 
source_package-package_uid);
+if (source_package-name  source_package-name[0])
+av_dict_set(st-metadata, file_package_name, 
source_package-name, 0);
+
 mxf_parse_physical_source_package(mxf, source_track, st);
 
 if (st-codec-codec_type == AVMEDIA_TYPE_VIDEO) {
@@ -1851,24 +1873,6 @@ fail_and_free:
 return ret;
 }
 
-static int mxf_uid_to_str(UID uid, char **str)
-{
-int i;
-char *p;
-p = *str = av_mallocz(sizeof(UID) * 2 + 4 + 1);
-if (!p)
-return AVERROR(ENOMEM);
-for (i = 0; i  sizeof(UID); i++) {
-snprintf(p, 2 + 1, %.2x, uid[i]);
-p += 2;
-if (i == 3 || i == 5 || i == 7 || i == 9) {
-snprintf(p, 1 + 1, -);
-p++;
-}
-}
-return 0;
-}
-
 static int mxf_timestamp_to_str(uint64_t timestamp, char **str)
 {
 struct tm time = { 0 };
@@ -1969,7 +1973,7 @@ static const MXFMetadataReadTableEntry 
mxf_metadata_read_table[] = {
 { { 
0x06,0x0e,0x2b,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x01,0x01,0x01,0x01,0x30,0x00 
}, mxf_read_identification_metadata },
 { { 
0x06,0x0e,0x2b,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x01,0x01,0x01,0x01,0x18,0x00 
}, mxf_read_content_storage, 0, AnyType },
 { { 
0x06,0x0e,0x2b,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x01,0x01,0x01,0x01,0x37,0x00 
}, mxf_read_source_package, sizeof(MXFPackage), SourcePackage },
-{ { 
0x06,0x0e,0x2b,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x01,0x01,0x01,0x01,0x36,0x00 
}, mxf_read_material_package, sizeof(MXFPackage), MaterialPackage },
+{ { 
0x06,0x0e,0x2b,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x01,0x01,0x01,0x01,0x36,0x00 
}, 

[FFmpeg-devel] [PATCH] libavformat/mxfdec.c: export source package uids and names as metadata

2014-11-18 Thread Mark Reid
hi,
This patch exports mxf source package uids and names as metadata. AAF files and 
some
editing applications can link to mxf files and their streams by package uids. 
They 
can be used to resolve a media file instead of just a url.

Here are the metadata keys I added:

material_package_uid
material_package_name
file_package_uid
file_package_name
reel_uid

Mark Reid (1):
  libavformat/mxfdec.c: export source package uids and names as metadata

 libavformat/mxfdec.c | 74 +++-
 1 file changed, 39 insertions(+), 35 deletions(-)

-- 
2.0.0

___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel