Ejemplo n.º 1
0
static int get_or_create_set_item(MXFHeaderMetadata* headerMetadata, MXFMetadataSet* set,
    const mxfKey* itemKey, MXFMetadataItem** item)
{
    MXFMetadataItem* resultItem = NULL;
    mxfLocalTag tag;
    MXFItemDef* itemDef = NULL;
    
    /* check if item already exists */
    if (!mxf_get_item(set, itemKey, &resultItem))
    {
        /* check if item registered in primer */
        if (!mxf_get_item_tag(headerMetadata->primerPack, itemKey, &tag))
        {
            /* register item in primer */
            CHK_ORET(mxf_find_item_def(headerMetadata->dataModel, itemKey, &itemDef));
            CHK_ORET(mxf_register_primer_entry(headerMetadata->primerPack, (const mxfUID*)itemKey, 
                itemDef->localTag, &tag));
        }
        /* create new item */
        CHK_ORET(mxf_create_item(set, itemKey, tag, &resultItem));
    }
    
    *item = resultItem;
    return 1;    
}
Ejemplo n.º 2
0
int x11c_initialise(X11Common* x11Common, int reviewDuration, OnScreenDisplay* osd, X11WindowInfo* windowInfo)
{
    memset(x11Common, 0, sizeof(x11Common));

    x11Common->reviewDuration = reviewDuration;
    x11Common->osd = osd;

    x11Common->progressBarInput.data = x11Common;
    x11Common->progressBarInput.set_listener = x11c_set_pbar_listener;
    x11Common->progressBarInput.unset_listener = x11c_unset_pbar_listener;
    x11Common->progressBarInput.close = x11c_close_pbar;

    x11Common->keyboardInput.data = x11Common;
    x11Common->keyboardInput.set_listener = x11c_set_keyboard_listener;
    x11Common->keyboardInput.unset_listener = x11c_unset_keyboard_listener;
    x11Common->keyboardInput.close = x11c_close_keyboard;

    x11Common->mouseInput.data = x11Common;
    x11Common->mouseInput.set_listener = x11c_set_mouse_listener;
    x11Common->mouseInput.unset_listener = x11c_unset_mouse_listener;
    x11Common->mouseInput.close = x11c_close_mouse;

    if (windowInfo)
    {
        x11Common->windowInfo = *windowInfo;
    }

    CHK_ORET(XInitThreads() != 0);
    
    CHK_ORET(init_mutex(&x11Common->eventMutex));

    CHK_ORET(create_joinable_thread(&x11Common->processEventThreadId, process_event_thread, x11Common));

    return 1;
}
Ejemplo n.º 3
0
int mxf_write_rip(MXFFile *mxfFile, MXFFilePartitions *partitions)
{
    uint32_t numPartitions;
    uint64_t len;
    uint8_t llen;
    MXFListIterator iter;

    numPartitions = (uint32_t)mxf_get_list_length(partitions);
    len = (4 + 8) * numPartitions + 4;

    CHK_ORET(mxf_write_k(mxfFile, &g_RandomIndexPack_key));
    CHK_ORET((llen = mxf_write_l(mxfFile, len)) != 0);

    mxf_initialise_list_iter(&iter, partitions);
    while (mxf_next_list_iter_element(&iter))
    {
        MXFPartition *partition = (MXFPartition*)mxf_get_iter_element(&iter);

        CHK_ORET(mxf_write_uint32(mxfFile, partition->bodySID));
        CHK_ORET(mxf_write_uint64(mxfFile, partition->thisPartition));
    }
    CHK_ORET(mxf_write_uint32(mxfFile, (uint32_t)(16 + llen + len)));

    return 1;
}
Ejemplo n.º 4
0
static int mxf_read_l(FILE* mxfFile, uint8_t* llen, uint64_t* len)
{
    int i;
    int c;
    uint64_t length;
    uint8_t llength;
    
    CHK_ORET((c = fgetc(mxfFile)) != EOF); 

    length = 0;
    llength = 1;
    if (c < 0x80) 
    {
        length = c;
    }
    else 
    {
        int bytesToRead = c & 0x7f;
        CHK_ORET(bytesToRead <= 8); 
        for (i = 0; i < bytesToRead; i++) 
        {
            CHK_ORET((c = fgetc(mxfFile)) != EOF); 
            length = length << 8;
            length = length | c;
        }
        llength += bytesToRead;
    }
    
    *llen = llength;
    *len = length;
    
    return 1;
}
Ejemplo n.º 5
0
int mxf_read_item_tl(MXFFile* mxfFile, mxfLocalTag* itemTag, uint16_t* itemLen)
{
    CHK_ORET(mxf_read_local_tag(mxfFile, itemTag));
    CHK_ORET(mxf_read_uint16(mxfFile, itemLen));
    
    return 1;
}
Ejemplo n.º 6
0
int mxf_write_header_metadata(MXFFile* mxfFile, MXFHeaderMetadata* headerMetadata)
{
    CHK_ORET(mxf_write_header_primer_pack(mxfFile, headerMetadata));
    CHK_ORET(mxf_write_header_sets(mxfFile, headerMetadata));
    
    return 1;
}
Ejemplo n.º 7
0
int mxf_fill_to_position(MXFFile *mxfFile, uint64_t position)
{
    int64_t filePos;
    uint64_t fillSize;
    uint8_t llen;

    CHK_ORET((filePos = mxf_file_tell(mxfFile)) >= 0);

    if ((uint64_t)filePos == position)
    {
        return 1;
    }

    CHK_ORET(((uint64_t)filePos <= position - mxf_get_min_llen(mxfFile) + mxfKey_extlen));

    CHK_ORET(mxf_write_k(mxfFile, &g_KLVFill_key));

    fillSize = position - filePos - mxfKey_extlen;
    llen = mxf_get_llen(mxfFile, fillSize);
    assert(fillSize >= llen);
    fillSize -= llen;

    CHK_ORET(mxf_write_l(mxfFile, fillSize));
    CHK_ORET(mxf_write_zeros(mxfFile, fillSize));

    return 1;
}
Ejemplo n.º 8
0
int mxf_read_header_pp_kl_with_runin(MXFFile *mxfFile, mxfKey *key, uint8_t *llen, uint64_t *len)
{
    mxfKey tkey = MXF_PP_KEY(0x01, 0x00, 0x00);
    uint8_t tllen;
    uint64_t tlen;
    uint8_t keyCompareByte = 0;
    uint32_t runinCheckCount = 0;
    int byte;

    /* the run-in shall not contain the first 11 bytes of the partition pack label and so
       read until the first 11 bytes are found or max run-in exceeded */
    while (runinCheckCount <= MAX_RUNIN_LEN && keyCompareByte < 11) {
        CHK_ORET((byte = mxf_file_getc(mxfFile)) != EOF);

        if (byte == ((uint8_t*)(&tkey))[keyCompareByte]) {
            keyCompareByte++;
        } else {
            runinCheckCount += keyCompareByte + 1;
            keyCompareByte = 0;
        }
    }
    CHK_ORET(runinCheckCount <= MAX_RUNIN_LEN);

    CHK_ORET(mxf_file_read(mxfFile, &tkey.octet11, 5) == 5);
    CHK_ORET(mxf_is_header_partition_pack(&tkey));
    CHK_ORET(mxf_read_l(mxfFile, &tllen, &tlen));

    mxf_set_runin_len(mxfFile, (uint16_t)runinCheckCount);

    *key = tkey;
    *llen = tllen;
    *len = tlen;
    return 1;
}
Ejemplo n.º 9
0
static int mxf_read_kl(FILE* mxfFile, mxfKey* key, uint8_t* llen, uint64_t *len)
{
    CHK_ORET(mxf_read_k(mxfFile, key)); 
    CHK_ORET(mxf_read_l(mxfFile, llen, len));
    
    return 1; 
}
Ejemplo n.º 10
0
int mxf_register_set_items(MXFHeaderMetadata* headerMetadata, const mxfKey* key)
{
    MXFSetDef* setDef;
    MXFItemDef* itemDef;
    MXFListIterator iter;
    mxfLocalTag tag;
    
    CHK_ORET(mxf_find_set_def(headerMetadata->dataModel, key, &setDef));
    
    /* go though the set def and parents and register the items */
    while (setDef != NULL)
    {
        mxf_initialise_list_iter(&iter, &setDef->itemDefs);
        while (mxf_next_list_iter_element(&iter))
        {
            itemDef = (MXFItemDef*)mxf_get_iter_element(&iter);
            
            CHK_ORET(mxf_register_primer_entry(headerMetadata->primerPack, (const mxfUID*)&itemDef->key, 
                itemDef->localTag, &tag));
        }
        
        setDef = setDef->parentSetDef;
    }
    
    return 1;
}
Ejemplo n.º 11
0
int mxf_write_item(MXFFile* mxfFile, MXFMetadataItem* item)
{
    CHK_ORET(mxf_write_local_tag(mxfFile, item->tag));
    CHK_ORET(mxf_write_uint16(mxfFile, item->length));
    CHK_ORET(mxf_file_write(mxfFile, item->value, item->length) == item->length);
    item->isPersistent = 1;
    
    return 1;
}
Ejemplo n.º 12
0
int mxf_allocate_space_to_kag(MXFFile *mxfFile, MXFPartition *partition, uint32_t size)
{
    int64_t filePos;
    uint64_t relativeFilePos;
    int64_t fillSize;
    uint8_t llen;

    assert(partition->kagSize > 0);

    if (size == 0 && partition->kagSize == 1)
    {
        return 1;
    }

    CHK_ORET((filePos = mxf_file_tell(mxfFile)) >= 0);
    CHK_ORET((uint64_t)filePos > partition->thisPartition);
    relativeFilePos = filePos + size - partition->thisPartition;

    if (size != 0 || (relativeFilePos % partition->kagSize) != 0)
    {
        CHK_ORET(mxf_write_k(mxfFile, &g_KLVFill_key));

        fillSize = (int64_t)size - mxfKey_extlen;
        if (partition->kagSize > 1)
        {
            fillSize += partition->kagSize - relativeFilePos % partition->kagSize;
        }

        if (fillSize >= 0)
        {
            llen = mxf_get_llen(mxfFile, fillSize);
        }
        else
        {
            llen = 0;
        }
        while (fillSize - llen < 0)
        {
            fillSize += partition->kagSize;
            if (fillSize >= 0)
            {
                llen = mxf_get_llen(mxfFile, fillSize);
            }
            else
            {
                llen = 0;
            }
        }
        fillSize -= llen;

        CHK_ORET(mxf_write_l(mxfFile, fillSize));
        CHK_ORET(mxf_write_zeros(mxfFile, fillSize));
    }

    return 1;
}
Ejemplo n.º 13
0
int mxf_avid_add_typedef_record_member(MXFMetadataSet* typeDefSet, const mxfUTF16Char* name, const mxfUL* typeId)
{
    uint8_t* elementValue;

    CHK_ORET(append_name_to_string_array(typeDefSet, &MXF_ITEM_K(TypeDefinitionRecord, MemberNames), name));    
    
    CHK_ORET(mxf_grow_array_item(typeDefSet, &MXF_ITEM_K(TypeDefinitionRecord, MemberTypes), mxfUL_extlen, 1, &elementValue));
    mxf_set_ul(typeId, elementValue);

    return 1;
}
Ejemplo n.º 14
0
int mxf_avid_create_typedef_enum(MXFMetadataSet* metaDictSet, const mxfUL* id, const mxfUTF16Char* name, const mxfUTF16Char* description, const mxfUL* typeId, MXFMetadataSet** typeDefSet)
{
    MXFMetadataSet* newSet = NULL;
    
    CHK_ORET(mxf_avid_create_typedef(metaDictSet, &MXF_SET_K(TypeDefinitionEnumeration), id, name, description, &newSet));

    CHK_ORET(mxf_set_ul_item(newSet, &MXF_ITEM_K(TypeDefinitionEnumeration, Type), typeId));
    
    *typeDefSet = newSet;
    return 1;
}
Ejemplo n.º 15
0
int xml_writer_character_data(XMLWriter* writer, const char* data)
{
    if (writer->previousWrite == ELEMENT_START || writer->previousWrite == ATTRIBUTE)
    {
        CHK_ORET(fprintf(writer->file, ">") > 0);
    }
    CHK_ORET(fprintf(writer->file, "%s", data) > 0);

    writer->previousWrite = CHARACTER_DATA;
    return 1;
}
Ejemplo n.º 16
0
int mxf_avid_add_typedef_extenum_element(MXFMetadataSet* typeDefSet, const mxfUTF16Char* name, const mxfUL* value)
{
    uint8_t* elementValue;

    CHK_ORET(append_name_to_string_array(typeDefSet, &MXF_ITEM_K(TypeDefinitionExtendibleEnumeration, Names), name));    
    
    CHK_ORET(mxf_grow_array_item(typeDefSet, &MXF_ITEM_K(TypeDefinitionExtendibleEnumeration, Values), mxfUL_extlen, 1, &elementValue));
    mxf_set_ul(value, elementValue);

    return 1;
}
Ejemplo n.º 17
0
static int op1a_position_at_frame(MXFReader *reader, int64_t frameNumber)
{
    MXFFile *mxfFile = reader->mxfFile;
    EssenceReader *essenceReader = reader->essenceReader;
    EssenceReaderData *data = essenceReader->data;

    CHK_ORET(mxf_file_is_seekable(mxfFile));
    CHK_ORET(set_position(mxfFile, data->index, frameNumber));

    return 1;
}
Ejemplo n.º 18
0
int mxf_avid_set_metadef_items(MXFMetadataSet* set, const mxfUL* id, const mxfUTF16Char* name, const mxfUTF16Char* description)
{
    CHK_ORET(mxf_set_ul_item(set, &MXF_ITEM_K(MetaDefinition, Identification), id));
    CHK_ORET(name != NULL);
    CHK_ORET(mxf_set_utf16string_item(set, &MXF_ITEM_K(MetaDefinition, Name), name));
    if (description != NULL)
    {
        CHK_ORET(mxf_set_utf16string_item(set, &MXF_ITEM_K(MetaDefinition, Description), description));
    }
    
    return 1;
}
Ejemplo n.º 19
0
static int write_indent(XMLWriter* writer)
{
    int i;
    
    CHK_ORET(fprintf(writer->file, "\r\n") > 0);
    for (i = 0; i < writer->indent; i++)
    {
        CHK_ORET(fprintf(writer->file, "  ") > 0);
    }
    
    return 1;
}
Ejemplo n.º 20
0
int mxf_avid_create_typedef_vararray(MXFMetadataSet* metaDictSet, const mxfUL* id, const mxfUTF16Char* name, const mxfUTF16Char* description, const mxfUL* elementTypeId, MXFMetadataSet** typeDefSet)
{
    MXFMetadataSet* newSet = NULL;
    
    CHK_ORET(mxf_avid_create_typedef(metaDictSet, &MXF_SET_K(TypeDefinitionVariableArray), id, name, description, &newSet));
    
    CHK_ORET(mxf_set_ul_item(newSet, &MXF_ITEM_K(TypeDefinitionVariableArray, ElementType), elementTypeId));


    *typeDefSet = newSet;
    return 1;
}
Ejemplo n.º 21
0
int mxf_avid_create_typedef_weakref(MXFMetadataSet* metaDictSet, const mxfUL* id, const mxfUTF16Char* name, const mxfUTF16Char* description, const mxfUL* referencedTypeId, MXFMetadataSet** typeDefSet)
{
    MXFMetadataSet* newSet = NULL;

    CHK_ORET(mxf_avid_create_typedef(metaDictSet, &MXF_SET_K(TypeDefinitionWeakObjectReference), id, name, description, &newSet));
    
    CHK_ORET(mxf_set_ul_item(newSet, &MXF_ITEM_K(TypeDefinitionWeakObjectReference, ReferencedType), referencedTypeId));
    
    
    *typeDefSet = newSet;
    return 1;
}
Ejemplo n.º 22
0
int mxf_register_item(MXFHeaderMetadata* headerMetadata, const mxfKey* key)
{
    mxfLocalTag tag;
    MXFItemDef* itemDef;
    
    /* register item in primer */
    CHK_ORET(mxf_find_item_def(headerMetadata->dataModel, key, &itemDef));
    CHK_ORET(mxf_register_primer_entry(headerMetadata->primerPack, (const mxfUID*)key, 
        itemDef->localTag, &tag));
    
    return 1;
}
Ejemplo n.º 23
0
int mxf_mark_index_end(MXFFile *mxfFile, MXFPartition *partition)
{
    int64_t filePos;

    CHK_ORET(partition->indexMarkInPos >= 0);
    CHK_ORET((filePos = mxf_file_tell(mxfFile)) >= 0);
    CHK_ORET(filePos >= partition->indexMarkInPos);

    partition->indexByteCount = filePos - partition->indexMarkInPos;
    partition->indexMarkInPos = -1;
    return 1;
}
Ejemplo n.º 24
0
int mxf_avid_create_typedef(MXFMetadataSet* metaDictSet, const mxfKey* setId, const mxfUL* id, const mxfUTF16Char* name, const mxfUTF16Char* description, MXFMetadataSet** typeDefSet)
{
    MXFMetadataSet* newSet = NULL;
    
    CHK_ORET(mxf_create_set(metaDictSet->headerMetadata, setId, &newSet));
    CHK_ORET(mxf_add_array_item_strongref(metaDictSet, &MXF_ITEM_K(MetaDictionary, TypeDefinitions), newSet));
    
    CHK_ORET(mxf_avid_set_metadef_items(newSet, id, name, description));
    
    
    *typeDefSet = newSet;
    return 1;
}
Ejemplo n.º 25
0
int mxf_avid_create_typedef_integer(MXFMetadataSet* metaDictSet, const mxfUL* id, const mxfUTF16Char* name, const mxfUTF16Char* description, uint8_t size, mxfBoolean isSigned, MXFMetadataSet** typeDefSet)
{
    MXFMetadataSet* newSet = NULL;
    
    CHK_ORET(mxf_avid_create_typedef(metaDictSet, &MXF_SET_K(TypeDefinitionInteger), id, name, description, &newSet));

    CHK_ORET(mxf_set_uint8_item(newSet, &MXF_ITEM_K(TypeDefinitionInteger, Size), size));
    CHK_ORET(mxf_set_boolean_item(newSet, &MXF_ITEM_K(TypeDefinitionInteger, IsSigned), isSigned));
    
    
    *typeDefSet = newSet;
    return 1;
}
Ejemplo n.º 26
0
int xml_writer_element_start(XMLWriter* writer, const char* name)
{
    if (writer->previousWrite == ELEMENT_START || writer->previousWrite == ATTRIBUTE)
    {
        CHK_ORET(fprintf(writer->file, ">") > 0);
    }
    
    write_indent(writer);
    CHK_ORET(fprintf(writer->file, "<%s", name) > 0);
    
    writer->indent++;
    writer->previousWrite = ELEMENT_START;
    return 1;
}
Ejemplo n.º 27
0
int mxf_read_partition(MXFFile *mxfFile, const mxfKey *key, uint64_t len, MXFPartition **partition)
{
    MXFPartition *newPartition;
    uint32_t numLabels;
    uint32_t labelLen;
    mxfUL label;
    uint64_t expectedLen;
    uint32_t i;

    CHK_ORET(len >= 88 && len <= INT64_MAX);

    CHK_ORET(mxf_create_partition(&newPartition));
    newPartition->key = *key;

    CHK_OFAIL(mxf_read_uint16(mxfFile, &newPartition->majorVersion));
    CHK_OFAIL(mxf_read_uint16(mxfFile, &newPartition->minorVersion));
    CHK_OFAIL(mxf_read_uint32(mxfFile, &newPartition->kagSize));
    CHK_OFAIL(mxf_read_uint64(mxfFile, &newPartition->thisPartition));
    CHK_OFAIL(mxf_read_uint64(mxfFile, &newPartition->previousPartition));
    CHK_OFAIL(mxf_read_uint64(mxfFile, &newPartition->footerPartition));
    CHK_OFAIL(mxf_read_uint64(mxfFile, &newPartition->headerByteCount));
    CHK_OFAIL(mxf_read_uint64(mxfFile, &newPartition->indexByteCount));
    CHK_OFAIL(mxf_read_uint32(mxfFile, &newPartition->indexSID));
    CHK_OFAIL(mxf_read_uint64(mxfFile, &newPartition->bodyOffset));
    CHK_OFAIL(mxf_read_uint32(mxfFile, &newPartition->bodySID));
    CHK_OFAIL(mxf_read_ul(mxfFile, &newPartition->operationalPattern));

    CHK_OFAIL(mxf_read_batch_header(mxfFile, &numLabels, &labelLen));
    CHK_OFAIL(numLabels == 0 || labelLen == 16);
    expectedLen = 88 + (uint64_t)numLabels * labelLen;
    CHK_OFAIL(len >= expectedLen);
    for (i = 0; i < numLabels; i++)
    {
        CHK_OFAIL(mxf_read_ul(mxfFile, &label));
        CHK_OFAIL(mxf_append_partition_esscont_label(newPartition, &label));
    }

    if (len > expectedLen) {
        mxf_log_warn("Partition pack len %" PRIu64 " is larger than expected len %" PRIu64 "\n",
                     len, expectedLen);
        CHK_OFAIL(mxf_file_seek(mxfFile, (int64_t)(len - expectedLen), SEEK_CUR));
    }

    *partition = newPartition;
    return 1;

fail:
    mxf_free_partition(&newPartition);
    return 0;
}
Ejemplo n.º 28
0
int mxf_finalize_essence_element_write(MXFFile *mxfFile, MXFEssenceElement *essenceElement)
{
    int64_t filePos;

    assert(essenceElement != NULL);

    CHK_ORET((filePos = mxf_file_tell(mxfFile)) >= 0);

    CHK_ORET(mxf_file_seek(mxfFile, essenceElement->startFilePos + 16, SEEK_SET));
    CHK_ORET(mxf_write_fixed_l(mxfFile, essenceElement->llen, essenceElement->totalLen));

    CHK_ORET(mxf_file_seek(mxfFile, filePos, SEEK_SET));

    return 1;
}
Ejemplo n.º 29
0
static int add_item(MXFMetadataSet* set, MXFMetadataItem* item)
{
    MXFMetadataItem* removedItem;
    
    /* if item already attached to set, then removed it first */
    if (item->set != NULL)
    {
        CHK_ORET(mxf_remove_item(item->set, &item->key, &removedItem));
    }
    
    CHK_ORET(mxf_append_list_element(&set->items, (void*)item));
    item->set = set;
    
    return 1;
}
Ejemplo n.º 30
0
int mxf_read_header_pp_kl(MXFFile *mxfFile, mxfKey *key, uint8_t *llen, uint64_t *len)
{
    mxfKey tkey;
    uint8_t tllen;
    uint64_t tlen;

    CHK_ORET(mxf_read_k(mxfFile, &tkey));
    CHK_ORET(mxf_is_header_partition_pack(&tkey));
    CHK_ORET(mxf_read_l(mxfFile, &tllen, &tlen));

    *key = tkey;
    *llen = tllen;
    *len = tlen;
    return 1;
}