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

📄 tref.c

📁 这个库实现了录象功能
💻 C
字号:
/******************************************************************************* tref.c libquicktime - A library for reading and writing quicktime/avi/mp4 files. http://libquicktime.sourceforge.net Copyright (C) 2002 Heroine Virtual Ltd. Copyright (C) 2002-2007 Members of the libquicktime project. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA*******************************************************************************/ #include "lqt_private.h"#include <stdlib.h>#include <string.h>int quicktime_tref_init(quicktime_tref_t *tref){//	tref->trackIndex = 1;	return 0;}static quicktime_track_reference_t * add_reference(quicktime_tref_t *tref)  {  tref->num_references++;  tref->references = realloc(tref->references,                             tref->num_references * sizeof(*(tref->references)));  memset(&tref->references[tref->num_references-1],         0, sizeof(tref->references[tref->num_references-1]));  return &tref->references[tref->num_references-1];  }static void add_track(quicktime_track_reference_t * ref,                      int track_id)  {  ref->num_tracks++;  ref->tracks = realloc(ref->tracks,                        ref->num_tracks * sizeof(*ref->tracks));  ref->tracks[ref->num_tracks-1] = track_id;  }int quicktime_tref_init_qtvr(quicktime_tref_t *tref, int track_type)  {  quicktime_track_reference_t * ref = add_reference(tref);  switch(track_type)	{	case QTVR_OBJ:	case QTVR_PAN:	  ref->type[0] = 'i';	  ref->type[1] = 'm';	  ref->type[2] = 'g';	  ref->type[3] = 't';	  break;	case QTVR_QTVR_OBJ:	  ref->type[0] = 'o';	  ref->type[1] = 'b';	  ref->type[2] = 'j';	  ref->type[3] = 'e';	  break;	case QTVR_QTVR_PAN:	  ref->type[0] = 'p';	  ref->type[1] = 'a';	  ref->type[2] = 'n';	  ref->type[3] = 'o';	  break;    default://	  lqt_log(file, LQT_LOG_ERROR, LOG_DOMAIN,//	          "quicktime_tref_init_qtvr invalid track type supplied");	  return -1;    }    add_track(ref, 1);  return 0;  }int quicktime_tref_init_chap(quicktime_tref_t * tref, int track_id)  {  quicktime_track_reference_t * ref = add_reference(tref);  ref->type[0] = 'c';  ref->type[1] = 'h';  ref->type[2] = 'a';  ref->type[3] = 'p';  add_track(ref, track_id);  return 0;  }int quicktime_tref_init_tmcd(quicktime_tref_t * tref, int track_id)  {  quicktime_track_reference_t * ref = add_reference(tref);  ref->type[0] = 't';  ref->type[1] = 'm';  ref->type[2] = 'c';  ref->type[3] = 'd';  add_track(ref, track_id);  return 0;  }int quicktime_tref_delete(quicktime_tref_t *tref)  {  int i;  for(i = 0; i < tref->num_references; i++)    {    if(tref->references[i].tracks)      free(tref->references[i].tracks);    }  if(tref->references) free(tref->references);  return 0;  }void quicktime_tref_dump(quicktime_tref_t *tref)  {  int i, j;  quicktime_track_reference_t * ref;    lqt_dump("  track reference (tref)\n");  for(i = 0; i < tref->num_references; i++)    {    ref = &tref->references[i];    lqt_dump("     reference type %d type: %c%c%c%c\n",             i+1,             ref->type[0], ref->type[1],             ref->type[2], ref->type[3]);    lqt_dump("     track indices: %d\n", ref->num_tracks);    for(j = 0; j < ref->num_tracks; j++)      {      lqt_dump("       track_index %d: %d\n", j, ref->tracks[j]);      }        }  }int quicktime_read_tref(quicktime_t *file, quicktime_tref_t *tref,                        quicktime_atom_t *tref_atom)  {  int i;  quicktime_atom_t atom;  quicktime_track_reference_t * ref;  while(quicktime_position(file) < tref_atom->end)    {    ref = add_reference(tref);              quicktime_atom_read_header(file, &(atom));    ref->type[0] = atom.type[0];    ref->type[1] = atom.type[1];    ref->type[2] = atom.type[2];    ref->type[3] = atom.type[3];    ref->num_tracks = (atom.end - quicktime_position(file)) / 4;    ref->tracks = calloc(ref->num_tracks, sizeof(*ref->tracks));    for(i = 0; i < ref->num_tracks; i++)      ref->tracks[i] = quicktime_read_int32(file);    }  return 0;  }void quicktime_write_tref(quicktime_t *file, quicktime_tref_t *tref )  {  int i, j;  quicktime_atom_t atom, subatom;  quicktime_atom_write_header(file, &atom, "tref");  for(i = 0; i < tref->num_references; i++)    {    quicktime_atom_write_header(file, &subatom, tref->references[i].type);        for(j = 0; j < tref->references[i].num_tracks; j++)      quicktime_write_int32(file, tref->references[i].tracks[j]);        quicktime_atom_write_footer(file, &subatom);    }  quicktime_atom_write_footer(file, &atom);  }

⌨️ 快捷键说明

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