Lines Matching refs:elem

444     EbmlElement *const elem = ebml_writer_add(writer, id, EBML_MASTER);
445 EbmlMaster *const master = &elem->priv.master;
455 EbmlElement *elem;
458 elem = &writer->elements[writer->current_master_element];
459 av_assert2(elem->type == EBML_MASTER);
460 av_assert2(elem->priv.master.nb_elements < 0); /* means unset */
461 elem->priv.master.nb_elements = writer->nb_elements - writer->current_master_element - 1;
462 av_assert2(elem->priv.master.containing_master < 0 ||
463 elem->priv.master.containing_master < writer->current_master_element);
464 writer->current_master_element = elem->priv.master.containing_master;
473 const EbmlElement *const elem = &writer->elements[writer->nb_elements - 1];
475 av_assert2(elem->type == EBML_MASTER);
476 av_assert2(elem->priv.master.containing_master < 0 ||
477 elem->priv.master.containing_master < writer->current_master_element);
478 writer->current_master_element = elem->priv.master.containing_master;
488 EbmlElement *const elem = ebml_writer_add(writer, id, EBML_STR);
490 elem->priv.str = str;
496 EbmlElement *const elem = ebml_writer_add(writer, id, EBML_BIN);
501 elem->size = size;
502 elem->priv.bin = data;
508 EbmlElement *const elem = ebml_writer_add(writer, id, EBML_FLOAT);
510 elem->priv.f = val;
516 EbmlElement *const elem = ebml_writer_add(writer, id, EBML_UID);
517 elem->priv.uint = val;
523 EbmlElement *elem = ebml_writer_add(writer, id, EBML_UINT);
524 elem->priv.uint = val;
530 EbmlElement *elem = ebml_writer_add(writer, id, EBML_SINT);
531 elem->priv.sint = val;
536 EbmlElement *elem = ebml_writer_add(writer, MATROSKA_ID_BLOCK, EBML_BLOCK);
537 elem->priv.mkv = mkv;
540 static int ebml_writer_str_len(EbmlElement *elem)
542 size_t len = strlen(elem->priv.str);
546 elem->size = len;
559 static int ebml_writer_uint_len(EbmlElement *elem)
561 elem->size = uint_size(elem->priv.uint);
571 static int ebml_writer_sint_len(EbmlElement *elem)
573 elem->size = sint_size(elem->priv.sint);
577 static int ebml_writer_elem_len(EbmlWriter *writer, EbmlElement *elem,
580 static int ebml_writer_master_len(EbmlWriter *writer, EbmlElement *elem,
583 int nb_elems = elem->priv.master.nb_elements >= 0 ? elem->priv.master.nb_elements : remaining_elems - 1;
584 EbmlElement *const master = elem;
588 for (; elem++, nb_elems > 0;) {
589 int ret = ebml_writer_elem_len(writer, elem, nb_elems);
593 /* No overflow is possible here, as both total_size and elem->size
595 total_size += ebml_id_size(elem->id) + elem->length_size + elem->size;
598 nb_elems--; /* consume elem */
599 elem += ret, nb_elems -= ret; /* and elem's children */
606 static int ebml_writer_block_len(EbmlElement *elem)
608 MatroskaMuxContext *const mkv = elem->priv.mkv;
626 elem->size = track->track_num_size + 3U + size;
631 static void ebml_writer_write_block(const EbmlElement *elem, AVIOContext *pb)
633 MatroskaMuxContext *const mkv = elem->priv.mkv;
652 static int ebml_writer_elem_len(EbmlWriter *writer, EbmlElement *elem,
657 switch (elem->type) {
660 elem->size = 8;
663 ret = ebml_writer_str_len(elem);
666 ret = ebml_writer_uint_len(elem);
669 ret = ebml_writer_sint_len(elem);
672 ret = ebml_writer_block_len(elem);
675 ret = ebml_writer_master_len(writer, elem, remaining_elems);
680 if (elem->size > MAX_SUPPORTED_EBML_LENGTH)
682 elem->length_size = ebml_length_size(elem->size);
683 return ret; /* number of elements consumed excluding elem itself */
686 static int ebml_writer_elem_write(const EbmlElement *elem, AVIOContext *pb)
688 put_ebml_id(pb, elem->id);
689 put_ebml_num(pb, elem->size, elem->length_size);
690 switch (elem->type) {
693 uint64_t val = elem->type == EBML_UID ? elem->priv.uint
694 : av_double2int(elem->priv.f);
700 uint64_t val = elem->type == EBML_UINT ? elem->priv.uint
701 : elem->priv.sint;
702 for (int i = elem->size; --i >= 0; )
708 const uint8_t *data = elem->type == EBML_BIN ? elem->priv.bin
709 : (const uint8_t*)elem->priv.str;
710 avio_write(pb, data, elem->size);
714 ebml_writer_write_block(elem, pb);
717 int nb_elems = elem->priv.master.nb_elements;
719 elem++;
721 i += ebml_writer_elem_write(elem + i, pb);
801 ebml_stored_master *elem,
806 int size = avio_get_dyn_buf(elem->bc, &buf);
808 if (elem->bc->error < 0)
809 return elem->bc->error;
811 elem->pos = avio_tell(pb);
812 mkv_add_seekhead_entry(mkv, id, elem->pos);
820 return end_ebml_master_crc32(pb, &elem->bc, mkv, id, 0, 0, 1);