⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 field.c

📁 OggPlay for Symbian 是symbian上的一个媒体播放程序的源码。它支持ogg,wav等等多媒体格式。
💻 C
📖 第 1 页 / 共 2 页
字号:
 */
int id3_field_settextencoding(union id3_field *field,
			      enum id3_field_textencoding encoding)
{
  assert(field);

  if (field->type != ID3_FIELD_TYPE_TEXTENCODING)
    return -1;

  id3_field_finish(field);

  field->number.value = encoding;

  return 0;
}

static
int set_latin1(union id3_field *field, id3_latin1_t const *latin1)
{
 id3_latin1_t *data;

  if (latin1 == 0 || *latin1 == 0)
    data = 0;
  else {
    data = id3_latin1_duplicate(latin1);
    if (data == 0)
      return -1;
  }

  field->latin1.ptr = data;

  return 0;
}

/*
 * NAME:	field->setlatin1()
 * DESCRIPTION:	set the value of a latin1 field
 */
int id3_field_setlatin1(union id3_field *field, id3_latin1_t const *latin1)
{
  assert(field);

  if (field->type != ID3_FIELD_TYPE_LATIN1)
    return -1;

  id3_field_finish(field);

  if (latin1) {
    id3_latin1_t const *ptr;

    for (ptr = latin1; *ptr; ++ptr) {
      if (*ptr == '\n')
	return -1;
    }
  }

  return set_latin1(field, latin1);
}

/*
 * NAME:	field->setfulllatin1()
 * DESCRIPTION:	set the value of a full latin1 field
 */
int id3_field_setfulllatin1(union id3_field *field, id3_latin1_t const *latin1)
{
  assert(field);

  if (field->type != ID3_FIELD_TYPE_LATIN1FULL)
    return -1;

  id3_field_finish(field);

  return set_latin1(field, latin1);
}

static
int set_string(union id3_field *field, id3_ucs4_t const *string)
{
  id3_ucs4_t *data;

  if (string == 0 || *string == 0)
    data = 0;
  else {
    data = id3_ucs4_duplicate(string);
    if (data == 0)
      return -1;
  }

  field->string.ptr = data;

  return 0;
}

/*
 * NAME:	field->setstring()
 * DESCRIPTION:	set the value of a string field
 */
int id3_field_setstring(union id3_field *field, id3_ucs4_t const *string)
{
  assert(field);

  if (field->type != ID3_FIELD_TYPE_STRING)
    return -1;

  id3_field_finish(field);

  if (string) {
    id3_ucs4_t const *ptr;

    for (ptr = string; *ptr; ++ptr) {
      if (*ptr == '\n')
	return -1;
    }
  }

  return set_string(field, string);
}

/*
 * NAME:	field->setfullstring()
 * DESCRIPTION:	set the value of a full string field
 */
int id3_field_setfullstring(union id3_field *field, id3_ucs4_t const *string)
{
  assert(field);

  if (field->type != ID3_FIELD_TYPE_STRINGFULL)
    return -1;

  id3_field_finish(field);

  return set_string(field, string);
}

/*
 * NAME:	field->setstrings()
 * DESCRIPTION:	set the value of a stringlist field
 */
int id3_field_setstrings(union id3_field *field,
			 unsigned int length, id3_ucs4_t **ptrs)
{
  id3_ucs4_t **strings;
  unsigned int i;

  assert(field);

  if (field->type != ID3_FIELD_TYPE_STRINGLIST)
    return -1;

  id3_field_finish(field);

  if (length == 0)
    return 0;

  strings = malloc(length * sizeof(*strings));
  if (strings == 0)
    return -1;

  for (i = 0; i < length; ++i) {
    strings[i] = id3_ucs4_duplicate(ptrs[i]);
    if (strings[i] == 0) {
      while (i--)
	free(strings[i]);

      free(strings);
      return -1;
    }
  }

  field->stringlist.strings  = strings;
  field->stringlist.nstrings = length;

  return 0;
}

/*
 * NAME:	field->addstring()
 * DESCRIPTION:	add a string to a stringlist field
 */
int id3_field_addstring(union id3_field *field, id3_ucs4_t const *string)
{
  id3_ucs4_t *new, **strings;

  assert(field);

  if (field->type != ID3_FIELD_TYPE_STRINGLIST)
    return -1;

  if (string == 0)
    string = id3_ucs4_empty;

  new = id3_ucs4_duplicate(string);
  if (new == 0)
    return -1;

  strings = realloc(field->stringlist.strings,
		    (field->stringlist.nstrings + 1) * sizeof(*strings));
  if (strings == 0) {
    free(new);
    return -1;
  }

  field->stringlist.strings = strings;
  field->stringlist.strings[field->stringlist.nstrings++] = new;

  return 0;
}

/*
 * NAME:	field->setlanguage()
 * DESCRIPTION:	set the value of a language field
 */
int id3_field_setlanguage(union id3_field *field, char const *language)
{
  assert(field);

  if (field->type != ID3_FIELD_TYPE_LANGUAGE)
    return -1;

  id3_field_finish(field);

  if (language) {
    if (strlen(language) != 3)
      return -1;

    strcpy(field->immediate.value, language);
  }

  return 0;
}

/*
 * NAME:	field->setframeid()
 * DESCRIPTION:	set the value of a frameid field
 */
int id3_field_setframeid(union id3_field *field, char const *id)
{
  assert(field);

  if (field->type != ID3_FIELD_TYPE_FRAMEID ||
      !id3_frame_validid(id))
    return -1;

  id3_field_finish(field);

  field->immediate.value[0] = id[0];
  field->immediate.value[1] = id[1];
  field->immediate.value[2] = id[2];
  field->immediate.value[3] = id[3];
  field->immediate.value[4] = 0;

  return 0;
}

/*
 * NAME:	field->setbinarydata()
 * DESCRIPTION:	set the value of a binarydata field
 */
int id3_field_setbinarydata(union id3_field *field,
			    id3_byte_t const *data, id3_length_t length)
{
  id3_byte_t *mem;

  assert(field);

  if (field->type != ID3_FIELD_TYPE_BINARYDATA)
    return -1;

  id3_field_finish(field);

  if (length == 0)
    mem = 0;
  else {
    mem = malloc(length);
    if (mem == 0)
      return -1;

    assert(data);

    memcpy(mem, data, length);
  }

  field->binary.data   = mem;
  field->binary.length = length;

  return 0;
}

/*
 * NAME:	field->getint()
 * DESCRIPTION:	return the value of an integer field
 */
signed long id3_field_getint(union id3_field const *field)
{
  assert(field);

  if (field->type != ID3_FIELD_TYPE_INT8 &&
      field->type != ID3_FIELD_TYPE_INT16 &&
      field->type != ID3_FIELD_TYPE_INT24 &&
      field->type != ID3_FIELD_TYPE_INT32)
    return -1;

  return field->number.value;
}

/*
 * NAME:	field->gettextencoding()
 * DESCRIPTION:	return the value of a text encoding field
 */
enum id3_field_textencoding
id3_field_gettextencoding(union id3_field const *field)
{
  assert(field);

  if (field->type != ID3_FIELD_TYPE_TEXTENCODING)
    return -1;

  return field->number.value;
}

/*
 * NAME:	field->getlatin1()
 * DESCRIPTION:	return the value of a latin1 field
 */
id3_latin1_t const *id3_field_getlatin1(union id3_field const *field)
{
  assert(field);

  if (field->type != ID3_FIELD_TYPE_LATIN1)
    return 0;

  return field->latin1.ptr ? field->latin1.ptr : (id3_latin1_t const *) "";
}

/*
 * NAME:	field->getfulllatin1()
 * DESCRIPTION:	return the value of a full latin1 field
 */
id3_latin1_t const *id3_field_getfulllatin1(union id3_field const *field)
{
  assert(field);

  if (field->type != ID3_FIELD_TYPE_LATIN1FULL)
    return 0;

  return field->latin1.ptr ? field->latin1.ptr : (id3_latin1_t const *) "";
}

/*
 * NAME:	field->getstring()
 * DESCRIPTION:	return the value of a string field
 */
id3_ucs4_t const *id3_field_getstring(union id3_field const *field)
{
  assert(field);

  if (field->type != ID3_FIELD_TYPE_STRING)
    return 0;

  return field->string.ptr ? field->string.ptr : id3_ucs4_empty;
}

/*
 * NAME:	field->getfullstring()
 * DESCRIPTION:	return the value of a fullstring field
 */
id3_ucs4_t const *id3_field_getfullstring(union id3_field const *field)
{
  assert(field);

  if (field->type != ID3_FIELD_TYPE_STRINGFULL)
    return 0;

  return field->string.ptr ? field->string.ptr : id3_ucs4_empty;
}

/*
 * NAME:	field->getnstrings()
 * DESCRIPTION:	return the number of strings in a stringlist field
 */
unsigned int id3_field_getnstrings(union id3_field const *field)
{
  assert(field);

  if (field->type != ID3_FIELD_TYPE_STRINGLIST)
    return 0;

  return field->stringlist.nstrings;
}

/*
 * NAME:	field->getstrings()
 * DESCRIPTION:	return one value of a stringlist field
 */
id3_ucs4_t const *id3_field_getstrings(union id3_field const *field,
				       unsigned int index)
{
  id3_ucs4_t const *string;

  assert(field);

  if (field->type != ID3_FIELD_TYPE_STRINGLIST ||
      index >= field->stringlist.nstrings)
    return 0;

  string = field->stringlist.strings[index];

  return string ? string : id3_ucs4_empty;
}

/*
 * NAME:	field->getframeid()
 * DESCRIPTION:	return the value of a frameid field
 */
char const *id3_field_getframeid(union id3_field const *field)
{
  assert(field);

  if (field->type != ID3_FIELD_TYPE_FRAMEID)
    return 0;

  return field->immediate.value;
}

/*
 * NAME:	field->getbinarydata()
 * DESCRIPTION:	return the value of a binarydata field
 */
id3_byte_t const *id3_field_getbinarydata(union id3_field const *field,
					  id3_length_t *length)
{
//FIXMAD
//  static id3_byte_t const empty=0;
  id3_byte_t const empty=0;

  assert(field && length);

  if (field->type != ID3_FIELD_TYPE_BINARYDATA)
    return 0;

  assert(field->binary.length == 0 || field->binary.data);

  *length = field->binary.length;

  return field->binary.data ? field->binary.data : &empty;
//  return 2;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -