void MPEG2TransportStreamIndexFile::closeFid() {
  if (fFid != NULL) {
    CloseInputFile(fFid);
    fFid = NULL;
  }
}
AMRAudioFileSource::~AMRAudioFileSource() {
  CloseInputFile(fFid);
}
AMRAudioFileSource*
AMRAudioFileSource::createNew(UsageEnvironment& env, char const* fileName) {
#ifdef __LINUX__
  FILE* fid = NULL;
#else
  UFILE* fid = NULL;
#endif
  Boolean magicNumberOK = True;
  do {

    fid = OpenInputFile(env, fileName);
    if (fid == NULL) break;

    // Now, having opened the input file, read the first few bytes, to
    // check the required 'magic number':
    magicNumberOK = False; // until we learn otherwise
    Boolean isWideband = False; // by default
    unsigned numChannels = 1; // by default
    char buf[100];
    // Start with the first 6 bytes (the first 5 of which must be "#!AMR"):
#ifdef __LINUX__
    if (fread(buf, 1, 6, fid) < 6) break;
#else
    u32 read_size = 0;
    int ret = 0;
    ret = ufs_read(fid, buf, 6, &read_size);
    if ((read_size != 6) || (ret != FR_OK)) break;
#endif
    if (strncmp(buf, "#!AMR", 5) != 0) break; // bad magic #
    unsigned bytesRead = 6;

    // The next bytes must be "\n", "-WB\n", "_MC1.0\n", or "-WB_MC1.0\n"
    if (buf[5] == '-') {
      // The next bytes must be "WB\n" or "WB_MC1.0\n"
#ifdef __LINUX__
      if (fread(&buf[bytesRead], 1, 3, fid) < 3) break;
#else
      u32 read_size = 0;
      int ret = 0;
      ret = ufs_read(fid, &buf[bytesRead], 3, &read_size);
      if ((read_size != 3) || (ret != FR_OK)) break;
#endif
      if (strncmp(&buf[bytesRead], "WB", 2) != 0) break; // bad magic #
      isWideband = True;
      bytesRead += 3;
    }
    if (buf[bytesRead-1] == '_') {
      // The next bytes must be "MC1.0\n"
#ifdef __LINUX__
      if (fread(&buf[bytesRead], 1, 6, fid) < 6) break;
#else
      u32 read_size = 0;
      int ret = 0;
      ret = ufs_read(fid, &buf[bytesRead], 6, &read_size);
      if ((read_size != 6) || (ret != FR_OK)) break;
#endif
      if (strncmp(&buf[bytesRead], "MC1.0\n", 6) != 0) break; // bad magic #
      bytesRead += 6;

      // The next 4 bytes contain the number of channels:
      char channelDesc[4];
#ifdef __LINUX__
      if (fread(channelDesc, 1, 4, fid) < 4) break;
#else
      ret = ufs_read(fid, channelDesc, 4, &read_size);
      if ((read_size != 4) || (ret != FR_OK)) break;
#endif
      numChannels = channelDesc[3]&0xF;
    } else if (buf[bytesRead-1] != '\n') {
      break; // bad magic #
    }

    // If we get here, the magic number was OK:
    magicNumberOK = True;

#ifdef DEBUG
    fprintf(stderr, "isWideband: %d, numChannels: %d\n",
	    isWideband, numChannels);
#endif
    return new AMRAudioFileSource(env, fid, isWideband, numChannels);
  } while (0);

  // An error occurred:
  CloseInputFile(fid);
  if (!magicNumberOK) {
    env.setResultMsg("Bad (or nonexistent) AMR file header");
  }
  return NULL;
}
示例#4
0
WAVAudioFileSource::~WAVAudioFileSource() {
  CloseInputFile(fFid);
}