hdlr.c
上传用户:sun1608
上传日期:2007-02-02
资源大小:6116k
文件大小:4k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. #include "quicktime.h"
  2. int quicktime_hdlr_init(quicktime_hdlr_t *hdlr)
  3. {
  4. hdlr->version = 0;
  5. hdlr->flags = 0;
  6. hdlr->component_type[0] = 'm';
  7. hdlr->component_type[1] = 'h';
  8. hdlr->component_type[2] = 'l';
  9. hdlr->component_type[3] = 'r';
  10. hdlr->component_subtype[0] = 'v';
  11. hdlr->component_subtype[1] = 'i';
  12. hdlr->component_subtype[2] = 'd';
  13. hdlr->component_subtype[3] = 'e';
  14. hdlr->component_manufacturer = 0;
  15. hdlr->component_flags = 0;
  16. hdlr->component_flag_mask = 0;
  17. strcpy(hdlr->component_name, "Linux Media Handler");
  18. }
  19. int quicktime_hdlr_init_video(quicktime_hdlr_t *hdlr)
  20. {
  21. hdlr->component_subtype[0] = 'v';
  22. hdlr->component_subtype[1] = 'i';
  23. hdlr->component_subtype[2] = 'd';
  24. hdlr->component_subtype[3] = 'e';
  25. strcpy(hdlr->component_name, "Linux Video Media Handler");
  26. }
  27. int quicktime_hdlr_init_audio(quicktime_hdlr_t *hdlr)
  28. {
  29. hdlr->component_subtype[0] = 's';
  30. hdlr->component_subtype[1] = 'o';
  31. hdlr->component_subtype[2] = 'u';
  32. hdlr->component_subtype[3] = 'n';
  33. strcpy(hdlr->component_name, "Linux Sound Media Handler");
  34. }
  35. int quicktime_hdlr_init_hint(quicktime_hdlr_t *hdlr)
  36. {
  37. hdlr->component_subtype[0] = 'h';
  38. hdlr->component_subtype[1] = 'i';
  39. hdlr->component_subtype[2] = 'n';
  40. hdlr->component_subtype[3] = 't';
  41. strcpy(hdlr->component_name, "Linux Hint Media Handler");
  42. }
  43. int quicktime_hdlr_init_data(quicktime_hdlr_t *hdlr)
  44. {
  45. hdlr->component_type[0] = 'd';
  46. hdlr->component_type[1] = 'h';
  47. hdlr->component_type[2] = 'l';
  48. hdlr->component_type[3] = 'r';
  49. hdlr->component_subtype[0] = 'a';
  50. hdlr->component_subtype[1] = 'l';
  51. hdlr->component_subtype[2] = 'i';
  52. hdlr->component_subtype[3] = 's';
  53. strcpy(hdlr->component_name, "Linux Alias Data Handler");
  54. }
  55. int quicktime_hdlr_delete(quicktime_hdlr_t *hdlr)
  56. {
  57. }
  58. int quicktime_hdlr_dump(quicktime_hdlr_t *hdlr)
  59. {
  60. printf("   handler reference (hdlr)n");
  61. printf("    version %dn", hdlr->version);
  62. printf("    flags %dn", hdlr->flags);
  63. printf("    component_type %c%c%c%cn", hdlr->component_type[0], hdlr->component_type[1], hdlr->component_type[2], hdlr->component_type[3]);
  64. printf("    component_subtype %c%c%c%cn", hdlr->component_subtype[0], hdlr->component_subtype[1], hdlr->component_subtype[2], hdlr->component_subtype[3]);
  65. printf("    component_name %sn", hdlr->component_name);
  66. }
  67. int quicktime_read_hdlr(quicktime_t *file, quicktime_hdlr_t *hdlr)
  68. {
  69. hdlr->version = quicktime_read_char(file);
  70. hdlr->flags = quicktime_read_int24(file);
  71. quicktime_read_char32(file, hdlr->component_type);
  72. quicktime_read_char32(file, hdlr->component_subtype);
  73. hdlr->component_manufacturer = quicktime_read_int32(file);
  74. hdlr->component_flags = quicktime_read_int32(file);
  75. hdlr->component_flag_mask = quicktime_read_int32(file);
  76. if (file->use_mp4) {
  77. // TBD read null terminated string
  78. } else {
  79. quicktime_read_pascal(file, hdlr->component_name);
  80. }
  81. }
  82. int quicktime_write_hdlr(quicktime_t *file, quicktime_hdlr_t *hdlr)
  83. {
  84. quicktime_atom_t atom;
  85. quicktime_atom_write_header(file, &atom, "hdlr");
  86. quicktime_write_char(file, hdlr->version);
  87. quicktime_write_int24(file, hdlr->flags);
  88. if (file->use_mp4) {
  89. int i;
  90. quicktime_write_int32(file, 0x00000000);
  91. quicktime_write_char32(file, hdlr->component_subtype);
  92. for (i = 0; i < 3; i++) {
  93. quicktime_write_int32(file, 0x00000000);
  94. }
  95. quicktime_write_data(file, hdlr->component_name, 
  96. strlen(hdlr->component_name) + 1);
  97. } else {
  98. quicktime_write_char32(file, hdlr->component_type);
  99. quicktime_write_char32(file, hdlr->component_subtype);
  100. quicktime_write_int32(file, hdlr->component_manufacturer);
  101. quicktime_write_int32(file, hdlr->component_flags);
  102. quicktime_write_int32(file, hdlr->component_flag_mask);
  103. quicktime_write_pascal(file, hdlr->component_name);
  104. }
  105. quicktime_atom_write_footer(file, &atom);
  106. }