private int sizeOfNode(FrameDataNode node) { var n = 0; if (node != null) { n = 10; n += 1; switch (node.txt.enc) { default: goto case 0; case 0: n += node.txt.dim; break; case 1: n += node.txt.dim * 2; break; } } return(n); }
private void appendNode(ID3TagSpec tag, FrameDataNode node) { if (tag.v2_tail == null || tag.v2_head == null) { tag.v2_head = node; tag.v2_tail = node; } else { tag.v2_tail.nxt = node; tag.v2_tail = node; } }
private FrameDataNode findNode(ID3TagSpec tag, int frame_id, FrameDataNode last) { var node = last != null ? last.nxt : tag.v2_head; while (node != null) { if (node.fid == frame_id) { return(node); } node = node.nxt; } return(null); }
private bool isSameDescriptorUcs2(FrameDataNode node, string dsc) { if (node.dsc.enc != 1 && node.dsc.dim > 0) { return(false); } for (var i = 0; i < node.dsc.dim; ++i) { if (null == dsc || node.dsc.l[i] != dsc[i]) { return(false); } } return(true); }
private void id3v2_add_latin1(LameGlobalFlags gfp, int frame_id, string lang, string desc, string text) { var gfc = gfp.internal_flags; if (gfc != null) { FrameDataNode node; node = findNode(gfc.tag_spec, frame_id, null); if (isMultiFrame(frame_id)) { while (node != null) { if (isSameLang(node.lng, lang)) { if (isSameDescriptor(node, desc)) { break; } } node = findNode(gfc.tag_spec, frame_id, node); } } if (node == null) { node = new FrameDataNode(); appendNode(gfc.tag_spec, node); } node.fid = frame_id; node.lng = setLang(lang); node.dsc.l = desc; node.dsc.dim = !ReferenceEquals(desc, null) ? desc.Length : 0; node.dsc.enc = 0; node.txt.l = text; node.txt.dim = !ReferenceEquals(text, null) ? text.Length : 0; node.txt.enc = 0; gfc.tag_spec.flags |= CHANGED_FLAG | ADD_V2_FLAG; } }
private int set_frame_comment(sbyte[] frame, int framePos, FrameDataNode node) { var n = sizeOfCommentNode(node); if (n > 10) { framePos = set_4_byte_value(frame, framePos, ID_COMMENT); framePos = set_4_byte_value(frame, framePos, n - 10); frame[framePos++] = 0; frame[framePos++] = 0; frame[framePos++] = node.txt.enc == 1 ? (sbyte)1 : (sbyte)0; frame[framePos++] = (sbyte)node.lng[0]; frame[framePos++] = (sbyte)node.lng[1]; frame[framePos++] = (sbyte)node.lng[2]; if (node.dsc.enc != 1) { framePos = writeChars(frame, framePos, node.dsc.l, 0, node.dsc.dim); frame[framePos++] = 0; } else { framePos = writeUcs2s(frame, framePos, node.dsc.l, 0, node.dsc.dim); frame[framePos++] = 0; frame[framePos++] = 0; } if (node.txt.enc != 1) { framePos = writeChars(frame, framePos, node.txt.l, 0, node.txt.dim); } else { framePos = writeUcs2s(frame, framePos, node.txt.l, 0, node.txt.dim); } } return(framePos); }
private int set_frame_custom2(sbyte[] frame, int framePos, FrameDataNode node) { var n = sizeOfNode(node); if (n > 10) { framePos = set_4_byte_value(frame, framePos, node.fid); framePos = set_4_byte_value(frame, framePos, n - 10); frame[framePos++] = 0; frame[framePos++] = 0; frame[framePos++] = node.txt.enc == 1 ? (sbyte)1 : (sbyte)0; if (node.txt.enc != 1) { framePos = writeChars(frame, framePos, node.txt.l, 0, node.txt.dim); } else { framePos = writeUcs2s(frame, framePos, node.txt.l, 0, node.txt.dim); } } return(framePos); }