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

📄 chan.c

📁 这个库实现了录象功能
💻 C
📖 第 1 页 / 共 4 页
字号:
        {        lqt_dump("%s", get_channel_name(channel_labels[i]));        if(i < num_channels-1)          lqt_dump(", ");        }      }    else      {      lqt_dump("Not available");      }    lqt_dump("]\n");    }    lqt_dump("        mChannelBitmap:             0x%08x", chan->mChannelBitmap);  if(chan->mChannelLayoutTag == CHANNEL_LAYOUT_UseChannelBitmap)    {    lqt_dump(" [");    j = 0;    mask = 1;    for(i = 0; i < 32; i++)      {      if(chan->mChannelBitmap & mask)        {        if(j)          lqt_dump(", ");        lqt_dump("%s", get_channel_name(channel_bit_2_channel_label(mask)));        j++;        }      mask <<= 1;      }    lqt_dump("]\n");    }  else    lqt_dump("\n");       lqt_dump("        mNumberChannelDescriptions: %d\n", chan->mNumberChannelDescriptions);  for(i = 0; i < chan->mNumberChannelDescriptions; i++)    {    lqt_dump("         mChannelLabel[%d]: 0x%08x [%s]\n", i,           chan->ChannelDescriptions[i].mChannelLabel, get_channel_name(chan->ChannelDescriptions[i].mChannelLabel));    lqt_dump("         mChannelFlags[%d]: 0x%08x\n", i,           chan->ChannelDescriptions[i].mChannelFlags);    lqt_dump("         mCoordinates[%d]: [%f %f %f]\n", i,           chan->ChannelDescriptions[i].mCoordinates[0],           chan->ChannelDescriptions[i].mCoordinates[1],           chan->ChannelDescriptions[i].mCoordinates[2]);    }  }void quicktime_read_chan(quicktime_t *file, quicktime_chan_t *chan)  {  int i;  chan->version = quicktime_read_char(file);  chan->flags = quicktime_read_int24(file);  chan->mChannelLayoutTag = quicktime_read_int32(file);  chan->mChannelBitmap    = quicktime_read_int32(file);  chan->mNumberChannelDescriptions = quicktime_read_int32(file);  if(chan->mNumberChannelDescriptions)    {    chan->ChannelDescriptions = calloc(chan->mNumberChannelDescriptions,                                       sizeof(*(chan->ChannelDescriptions)));        for(i = 0; i < chan->mNumberChannelDescriptions; i++)      {      chan->ChannelDescriptions[i].mChannelLabel = quicktime_read_int32(file);      chan->ChannelDescriptions[i].mChannelFlags = quicktime_read_int32(file);      chan->ChannelDescriptions[i].mCoordinates[0] = quicktime_read_float32(file);      chan->ChannelDescriptions[i].mCoordinates[1] = quicktime_read_float32(file);      chan->ChannelDescriptions[i].mCoordinates[2] = quicktime_read_float32(file);      }    }    }void quicktime_write_chan(quicktime_t *file, quicktime_chan_t *chan)  {  quicktime_atom_t atom;  int i;  quicktime_atom_write_header(file, &atom, "chan");  quicktime_write_char(file, chan->version);  quicktime_write_int24(file, chan->flags);  quicktime_write_int32(file, chan->mChannelLayoutTag);  quicktime_write_int32(file, chan->mChannelBitmap);  quicktime_write_int32(file, chan->mNumberChannelDescriptions);    for(i = 0; i < chan->mNumberChannelDescriptions; i++)    {    quicktime_write_int32(file, chan->ChannelDescriptions[i].mChannelLabel);    quicktime_write_int32(file, chan->ChannelDescriptions[i].mChannelFlags);    quicktime_write_float32(file, chan->ChannelDescriptions[i].mCoordinates[0]);    quicktime_write_float32(file, chan->ChannelDescriptions[i].mCoordinates[1]);    quicktime_write_float32(file, chan->ChannelDescriptions[i].mCoordinates[2]);    }  quicktime_atom_write_footer(file, &atom);  }/* Update an atrack from a chan atom */void quicktime_get_chan(quicktime_audio_map_t * atrack)  {  int i, num_channels;  uint32_t mask;  quicktime_chan_t * chan;  const channel_label_t * channel_labels;  chan = &(atrack->track->mdia.minf.stbl.stsd.table[0].chan);  if(chan->mChannelLayoutTag == CHANNEL_LAYOUT_UseChannelDescriptions)    {    atrack->channel_setup = calloc(chan->mNumberChannelDescriptions,                                   sizeof(*atrack->channel_setup));    atrack->channels = chan->mNumberChannelDescriptions;    for(i = 0; i < chan->mNumberChannelDescriptions; i++)      atrack->channel_setup[i] = channel_label_2_channel(chan->ChannelDescriptions[i].mChannelLabel);    }  else if(chan->mChannelLayoutTag == CHANNEL_LAYOUT_UseChannelBitmap)    {    /* Count the channels */    mask = 1;    num_channels = 0;    for(i = 0; i < 32; i++)      {      if(chan->mChannelBitmap & mask)        num_channels++;      mask <<= 1;      }    /* Set the channels */    atrack->channels = num_channels;    atrack->channel_setup = calloc(num_channels,                                   sizeof(*atrack->channel_setup));        mask = 1;    num_channels = 0;    for(i = 0; i < 32; i++)      {      if(chan->mChannelBitmap & mask)        {        atrack->channel_setup[num_channels] =           channel_label_2_channel(channel_bit_2_channel_label(mask));        num_channels++;        }      mask <<= 1;      }    }  else /* Predefined channel layout */    {    channel_labels = get_channel_locations(chan->mChannelLayoutTag, &num_channels);    atrack->channels = num_channels;    if(channel_labels)      {      atrack->channel_setup = calloc(num_channels,                                     sizeof(*atrack->channel_setup));      for(i = 0; i < num_channels; i++)        atrack->channel_setup[i] = channel_label_2_channel(channel_labels[i]);      }        }    }static int layout_equal(channel_label_t * labels, lqt_channel_t * channels, int num_channels)  {  int i;  for(i = 0; i < num_channels; i++)    {    if(channels[i] != channel_label_2_channel(labels[i]))      return 0;    }  return 1;  }static int layout_similar(channel_label_t * labels, lqt_channel_t * channels, int num_channels)  {  int i, j, found;    for(i = 0; i < num_channels; i++)    {    found = 0;    for(j = 0; j < num_channels; j++)      {      if(channels[i] == channel_label_2_channel(labels[j]))        {        found = 1;        break;        }      }    if(!found)      return 0;    }  return 1;  }/* Set the chan atom of an atrack */void quicktime_set_chan(quicktime_audio_map_t * atrack)  {  int i, j;  quicktime_chan_t * chan;    if(!atrack->channel_setup)    return;  chan = &(atrack->track->mdia.minf.stbl.stsd.table[0].chan);  /* Search for a equal channel setup */  for(i = 0; i < sizeof(channel_locations) / sizeof(channel_locations[0]); i++)    {    if(((channel_locations[i].layout & 0xffff) == atrack->channels) &&       layout_equal(channel_locations[i].channels,                    atrack->channel_setup,                    atrack->channels))      {      chan->mChannelLayoutTag = channel_locations[i].layout;      atrack->track->mdia.minf.stbl.stsd.table[0].has_chan = 1;      return;      }    }  /* Search for a similar channel setup */  for(i = 0; i < sizeof(channel_locations) / sizeof(channel_locations[0]); i++)    {    if(((channel_locations[i].layout & 0xffff) == atrack->channels) &&       layout_similar(channel_locations[i].channels,                    atrack->channel_setup,                    atrack->channels))      {      chan->mChannelLayoutTag = channel_locations[i].layout;      atrack->track->mdia.minf.stbl.stsd.table[0].has_chan = 1;      for(j = 0; j < atrack->channels; j++)        atrack->channel_setup[j] = channel_label_2_channel(channel_locations[i].channels[j]);      return;      }    }  /* Nothing found, create a custom channel setup */  chan->ChannelDescriptions =    calloc(atrack->channels, sizeof(*(chan->ChannelDescriptions)));  chan->mNumberChannelDescriptions = atrack->channels;  chan->mChannelLayoutTag = CHANNEL_LAYOUT_UseChannelDescriptions;  for(i = 0; i < chan->mNumberChannelDescriptions; i++)    {    chan->ChannelDescriptions[i].mChannelLabel =      channel_2_channel_label(atrack->channel_setup[i]);    }  atrack->track->mdia.minf.stbl.stsd.table[0].has_chan = 1;  }

⌨️ 快捷键说明

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