• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/ap/gpl/minidlna/libid3tag-0.15.0b/

Lines Matching refs:frame

19  * $Id: frame.c,v 1.14 2003/04/19 00:14:33 rob Exp $
36 # include "frame.h"
51 * NAME: frame->validid()
52 * DESCRIPTION: return true if the parameter string is a legal frame ID
64 * NAME: frame->new()
65 * DESCRIPTION: allocate and return a new frame
70 struct id3_frame *frame;
101 frame = malloc(sizeof(*frame) + frametype->nfields * sizeof(*frame->fields));
102 if (frame) {
103 frame->id[0] = id[0];
104 frame->id[1] = id[1];
105 frame->id[2] = id[2];
106 frame->id[3] = id[3];
107 frame->id[4] = 0;
109 frame->description = frametype->description;
110 frame->refcount = 0;
111 frame->flags = frametype->defaultflags;
112 frame->group_id = 0;
113 frame->encryption_method = 0;
114 frame->encoded = 0;
115 frame->encoded_length = 0;
116 frame->decoded_length = 0;
117 frame->nfields = frametype->nfields;
118 frame->fields = (union id3_field *) &frame[1];
120 for (i = 0; i < frame->nfields; ++i)
121 id3_field_init(&frame->fields[i], frametype->fields[i]);
124 return frame;
127 void id3_frame_delete(struct id3_frame *frame)
129 assert(frame);
131 if (frame->refcount == 0) {
134 for (i = 0; i < frame->nfields; ++i)
135 id3_field_finish(&frame->fields[i]);
137 if (frame->encoded)
138 free(frame->encoded);
140 free(frame);
145 * NAME: frame->addref()
146 * DESCRIPTION: add an external reference to a frame
148 void id3_frame_addref(struct id3_frame *frame)
150 assert(frame);
152 ++frame->refcount;
156 * NAME: frame->delref()
157 * DESCRIPTION: remove an external reference to a frame
159 void id3_frame_delref(struct id3_frame *frame)
161 assert(frame && frame->refcount > 0);
163 --frame->refcount;
167 * NAME: frame->field()
168 * DESCRIPTION: return a pointer to a field in a frame
170 union id3_field *id3_frame_field(struct id3_frame const *frame,
173 assert(frame);
175 return (index < frame->nfields) ? &frame->fields[index] : 0;
182 struct id3_frame *frame;
184 frame = id3_frame_new(ID3_FRAME_OBSOLETE);
185 if (frame) {
186 if (id3_field_setframeid(&frame->fields[0], id) == -1 ||
187 id3_field_setbinarydata(&frame->fields[1], data, length) == -1)
193 if (frame) {
194 id3_frame_delete(frame);
195 frame = 0;
199 return frame;
208 struct id3_frame *frame = 0;
215 frame = id3_frame_new(id);
216 if (frame == 0)
221 frame->flags = flags;
222 frame->group_id = group_id;
223 frame->encryption_method = encryption_method;
224 frame->encoded = mem;
225 frame->encoded_length = length;
226 frame->decoded_length = decoded_length;
236 return frame;
240 int parse_data(struct id3_frame *frame,
251 for (i = 0; i < frame->nfields; ++i) {
252 if (id3_field_parse(&frame->fields[i], &data, end - data, &encoding) == -1)
260 * NAME: frame->parse()
261 * DESCRIPTION: parse raw frame data according to the specified ID3 tag version
266 struct id3_frame *frame = 0;
311 frame = unparseable(id, ptr, end - *ptr, 0, 0, 0, 0);
348 /* canonicalize frame ID for ID3v2.4 */
379 frame = unparseable(id, ptr, end - *ptr, flags, 0, 0, 0);
412 /* undo frame encodings */
426 frame = unparseable(id, &data, end - data, flags,
448 frame = obsolete(id, data, end - data);
452 /* generate the internal frame structure */
454 frame = id3_frame_new(id);
455 if (frame) {
456 frame->flags = flags;
457 frame->group_id = group_id;
460 if (compat->translate(frame, compat->id, data, end - data) == -1)
464 if (parse_data(frame, data, end - data) == -1)
471 if (frame) {
472 id3_frame_delete(frame);
473 frame = 0;
481 return frame;
501 * NAME: frame->render()
502 * DESCRIPTION: render a single, complete frame
504 id3_length_t id3_frame_render(struct id3_frame const *frame,
511 assert(frame);
513 if ((frame->flags & ID3_FRAME_FLAG_TAGALTERPRESERVATION) ||
515 (frame->flags & ID3_FRAME_FLAG_FILEALTERPRESERVATION)))
518 /* a frame must be at least 1 byte big, excluding the header */
520 decoded_length = render_data(0, frame->fields, frame->nfields);
521 if (decoded_length == 0 && frame->encoded == 0)
526 size += id3_render_immediate(ptr, frame->id, 4);
536 flags = frame->flags;
541 size += id3_render_binary(ptr, frame->encoded, frame->encoded_length);
561 size += id3_render_int(ptr, frame->group_id, 1);
563 size += id3_render_int(ptr, frame->encryption_method, 1);
566 decoded_length = frame->decoded_length;
574 datalen = id3_render_binary(ptr, frame->encoded, frame->encoded_length);
579 datalen = render_data(ptr, frame->fields, frame->nfields);