I don't see why the MDObjectPtr Codec_ul is not getting initialized (but I would change its name as there is already a Codec_UL which is the UL of this property). Are you sure that this file descriptor has a codec property?
GetUL() will return the property UL (the same as the value of the global constant Codec_UL mentioned above) not the value of property as a UL.
I would use the following:
Code:
if(Track && (Descriptor->IsA(FileDescriptor_UL)))
{
    ULPtr CodecLabel; 
    MDObjectPtr Codec = Descriptor->Child(Codec_UL);
    if(Codec)
    {
        DataChunkPtr Data = Codec->PutData();
        if(Data->Size == 16) CodecLabel = new UL(Data->Data);
    }
}
What happens here is that once the codec property is located its value is written into a buffer. This 
should be 16 bytes (but I always check as you never know what rubbish there may be in the file!). This can then be used to build a new UL.