On Sat, Aug 02, 2008 at 11:26:38PM +0800, zhentan feng wrote: > Hi, > I fixed the bugs and modified some structs according to the former reviews, > and test the code by valgrind and elminated the mem leaks. > > here is new version attached below. [...] > #define DEBUG > > #include "libavutil/random.h" > #include "avformat.h" > #include "libavcodec/bytestream.h" >
> typedef uint8_t UID[16];
> typedef uint8_t UMID[32];
>
> enum MXFMetadataSetType {
> MaterialPackage,
> SourcePackage,
> };
>
> typedef struct {
> UID key;
> offset_t offset;
> uint64_t length;
> } KLVPacket;
>
> typedef struct {
> UID uid;
> unsigned matching_len;
> enum CodecID id;
> } MXFCodecUL;
These are also in mxf.c, maybe its time to factor out common things into a
common header?
[...]
> typedef struct {
> UID *identification;
> UID *content_storage;
> UID **package;
> UID **track;
> UID *mul_desc;
> UID **sub_desc;
> } MXFReferenceContext;
several of these seem to have a constant size and so dont need
av_mallocz & av_free.
And the ones that exist per stream (that is * nb_streams) could be in
MXFStreamContext
[...]
> static int klv_encode_ber_length(ByteIOContext *pb, uint64_t len)
> {
> // Determine the best BER size
> int size = 0;
> uint64_t tmp = len;
> if (len < 128) {
> //short form
> put_byte(pb, len);
> return 1;
> }
>
> while (tmp) {
> tmp >>= 8;
> size ++;
> }
size= av_log2(tmp)>>3;
[...]
> static int mxf_write_primer_pack(AVFormatContext *s)
> {
> ByteIOContext *pb = s->pb;
> const MXFLocalTagPair *local_tag_batch;
> int local_tag_number, i = 0;
>
> local_tag_number = sizeof(mxf_local_tag_batch) / sizeof(MXFLocalTagPair);
>
> put_buffer(pb, primer_pack_key, 16);
> klv_encode_ber_length(pb, local_tag_number * 18 + 8);
>
> put_be32(pb, local_tag_number); // local_tag num
> put_be32(pb, 18); // item size, always 18 according to the specs
>
> for (local_tag_batch = mxf_local_tag_batch; i < local_tag_number;
> local_tag_batch++, i++) {
> put_be16(pb, local_tag_batch->local_tag);
> put_buffer(pb, local_tag_batch->uid, 16);
> }
for(i=0; i < local_tag_number; i++) {
put_be16(pb, mxf_local_tag_batch[i].local_tag);
...
[...]
--
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
Why not whip the teacher when the pupil misbehaves? -- Diogenes of Sinope
signature.asc
Description: Digital signature
_______________________________________________ FFmpeg-soc mailing list [email protected] https://lists.mplayerhq.hu/mailman/listinfo/ffmpeg-soc
