Hi
2008/8/25 Michael Niedermayer <[EMAIL PROTECTED]>
[...]
> > Index: libavformat/mxfenc.c
> > ===================================================================
> > --- libavformat/mxfenc.c (revision 14965)
> > +++ libavformat/mxfenc.c (working copy)
> > @@ -245,6 +245,42 @@
> > return uls;
> > }
> >
> > +static int mxf_write_essence_container_refs(AVFormatContext *s, int
> write)
> > +{
> > + ByteIOContext *pb = s->pb;
> > + AVStream *st;
> > + int i, count = 0, j = 0;
> > + int essence_container_ul_sign[1024] = { 0 };
>
> this doesnt solve the problem
> the size of this array should match that of ff_mxf_essence_container_uls
>
>
here is the patch version 0.0.8.
the last function of mxfenc.c :)
please review.
thanks very much.
[...]
--
Best wishes~
Index: libavformat/mxfenc.c
===================================================================
--- libavformat/mxfenc.c (revision 14970)
+++ libavformat/mxfenc.c (working copy)
@@ -245,6 +245,42 @@
return uls;
}
+static int mxf_write_essence_container_refs(AVFormatContext *s, int write)
+{
+ ByteIOContext *pb = s->pb;
+ AVStream *st;
+ int i, count = 0, j = 0;
+ const MXFCodecUL *codec_ul;
+ int essence_container_ul_sign[sizeof(ff_mxf_essence_container_uls) / sizeof(MXFCodecUL)] = { 0 };
+
+ for (codec_ul = ff_mxf_essence_container_uls; codec_ul->id; codec_ul++) {
+ for (i = 0; i < s->nb_streams; i++) {
+ st = s->streams[i];
+ if (st->codec->codec_id == codec_ul->id) {
+ essence_container_ul_sign[count] = j;
+ count++;
+ break;
+ }
+ }
+ j++;
+ // considering WAV/AES3 frame wrapped, when get the first CODEC_ID_PCM_S16LE, break;
+ // this is a temporary method, when we can get more information, modofy this.
+ if (codec_ul->id == CODEC_ID_PCM_S16LE)
+ break;
+ }
+
+ if (write) {
+ mxf_write_refs_count(pb, count);
+ for (i = 0; i < count; i++) {
+ put_buffer(pb, ff_mxf_essence_container_uls[essence_container_ul_sign[i]].uid, 16);
+ }
+ av_log(s,AV_LOG_DEBUG, "essence container count:%d\n", count);
+ for (i = 0; i < count; i++)
+ PRINT_KEY(s, "essence container ul:\n", ff_mxf_essence_container_uls[essence_container_ul_sign[i]].uid);
+ }
+ return count;
+}
+
static void mxf_write_preface(AVFormatContext *s)
{
MXFContext *mxf = s->priv_data;
Index: libavformat/Makefile
===================================================================
--- libavformat/Makefile (revision 14970)
+++ libavformat/Makefile (working copy)
@@ -109,6 +109,7 @@
OBJS-$(CONFIG_MTV_DEMUXER) += mtv.o
OBJS-$(CONFIG_MVI_DEMUXER) += mvi.o
OBJS-$(CONFIG_MXF_DEMUXER) += mxfdec.o mxf.o
+OBJS-$(CONFIG_MXF_MUXER) += mxfenc.o mxf.o
OBJS-$(CONFIG_NSV_DEMUXER) += nsvdec.o
OBJS-$(CONFIG_NULL_MUXER) += raw.o
OBJS-$(CONFIG_NUT_DEMUXER) += nutdec.o nut.o riff.o
Index: libavformat/mxf.h
===================================================================
--- libavformat/mxf.h (revision 14970)
+++ libavformat/mxf.h (working copy)
@@ -63,7 +63,7 @@
extern const MXFDataDefinitionUL ff_mxf_data_definition_uls[];
extern const MXFCodecUL ff_mxf_codec_uls[];
-extern const MXFCodecUL ff_mxf_essence_container_uls[];
+extern const MXFCodecUL ff_mxf_essence_container_uls[6];
#ifdef DEBUG
#define PRINT_KEY(pc, s, x) dprintf(pc, "%s %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X\n", s, \
Index: libavformat/allformats.c
===================================================================
--- libavformat/allformats.c (revision 14970)
+++ libavformat/allformats.c (working copy)
@@ -124,7 +124,7 @@
REGISTER_DEMUXER (MSNWC_TCP, msnwc_tcp);
REGISTER_DEMUXER (MTV, mtv);
REGISTER_DEMUXER (MVI, mvi);
- REGISTER_DEMUXER (MXF, mxf);
+ REGISTER_MUXDEMUX (MXF, mxf);
REGISTER_DEMUXER (NSV, nsv);
REGISTER_MUXER (NULL, null);
REGISTER_MUXDEMUX (NUT, nut);
_______________________________________________
FFmpeg-soc mailing list
[email protected]
https://lists.mplayerhq.hu/mailman/listinfo/ffmpeg-soc