示例#1
0
文件: oggz_table.c 项目: mariuz/haiku
void *
oggz_table_insert (OggzTable * table, long key, void * data)
{
  void * old_data;

  if ((old_data = oggz_table_lookup (table, key)) != NULL) {
    if (oggz_vector_remove_l (table->keys, key) == NULL)
      return NULL;

    if (oggz_vector_remove_p (table->data, old_data) == NULL) {
      /* XXX: This error condition can only happen if the previous
       * removal succeeded, and this removal failed, ie. there was
       * an error reallocing table->data->data downwards. */
      return NULL;
    }
  }

  if (oggz_vector_insert_l (table->keys, key) == -1)
    return NULL;
  
  if (oggz_vector_insert_p (table->data, data) == NULL) {
    oggz_vector_remove_l (table->keys, key);
    return NULL;
  }

  return data;
}
示例#2
0
文件: oggz.c 项目: mariuz/haiku
oggz_stream_t *
oggz_add_stream (OGGZ * oggz, long serialno)
{
  oggz_stream_t * stream;

  stream = oggz_malloc (sizeof (oggz_stream_t));
  if (stream == NULL) return NULL;

  ogg_stream_init (&stream->ogg_stream, (int)serialno);

  stream->delivered_non_b_o_s = 0;
  stream->b_o_s = 1;
  stream->e_o_s = 0;
  stream->granulepos = 0;
  stream->packetno = -1; /* will be incremented on first write */

  stream->metric = NULL;
  stream->metric_user_data = NULL;
  stream->metric_internal = 0;
  stream->order = NULL;
  stream->order_user_data = NULL;
  stream->read_packet = NULL;
  stream->read_user_data = NULL;

  oggz_vector_insert_p (oggz->streams, stream);

  return stream;
}
static OggzComment *
_oggz_comment_add_byname (oggz_stream_t * stream, const char * name, const char * value)
{
  OggzComment * comment, * new_comment;
  int i;

  /* Check that the same name=value pair is not already present */
  for (i = 0; i < oggz_vector_size (stream->comments); i++) {
    comment = (OggzComment *) oggz_vector_nth_p (stream->comments, i);
    if (comment->name && !strcasecmp (name, comment->name)) {
      if (comment->value == NULL) {
        if (value == NULL) return comment;
      } else if ((value && !strcmp (value, comment->value)) || 
                 (value == NULL && comment->value == NULL)) {
        return comment;
      }
    }
  }

  /* Allocate new comment and insert it */
  if ((new_comment = oggz_comment_new (name, value)) == NULL)
    return NULL;

  return oggz_vector_insert_p (stream->comments, new_comment);
}
示例#4
0
oggz_stream_t *
oggz_add_stream (OGGZ * oggz, long serialno)
{
  oggz_stream_t * stream;

  stream = oggz_malloc (sizeof (oggz_stream_t));
  if (stream == NULL) return NULL;

  ogg_stream_init (&stream->ogg_stream, (int)serialno);

  oggz_comments_init (stream);

  stream->content = OGGZ_CONTENT_UNKNOWN;
  stream->numheaders = 3; /* Default to 3 headers for Ogg logical bitstreams */
  stream->preroll = 0;
  stream->granulerate_n = 1;
  stream->granulerate_d = 1;
  stream->basegranule = 0;
  stream->granuleshift = 0;

  stream->delivered_non_b_o_s = 0;
  stream->b_o_s = 1;
  stream->e_o_s = 0;
  stream->granulepos = 0;
  stream->packetno = -1; /* will be incremented on first read or write */

  stream->metric = NULL;
  stream->metric_user_data = NULL;
  stream->metric_internal = 0;
  stream->order = NULL;
  stream->order_user_data = NULL;
  stream->read_packet = NULL;
  stream->read_user_data = NULL;
  stream->read_page = NULL;
  stream->read_page_user_data = NULL;

  stream->calculate_data = NULL;
  
  oggz_vector_insert_p (oggz->streams, stream);

  return stream;
}