atom_stsd.cpp 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. /*
  2. * The contents of this file are subject to the Mozilla Public
  3. * License Version 1.1 (the "License"); you may not use this file
  4. * except in compliance with the License. You may obtain a copy of
  5. * the License at http://www.mozilla.org/MPL/
  6. *
  7. * Software distributed under the License is distributed on an "AS
  8. * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
  9. * implied. See the License for the specific language governing
  10. * rights and limitations under the License.
  11. *
  12. * The Original Code is MPEG4IP.
  13. *
  14. * The Initial Developer of the Original Code is Cisco Systems Inc.
  15. * Portions created by Cisco Systems Inc. are
  16. * Copyright (C) Cisco Systems Inc. 2001 - 2004. All Rights Reserved.
  17. *
  18. * 3GPP features implementation is based on 3GPP's TS26.234-v5.60,
  19. * and was contributed by Ximpo Group Ltd.
  20. *
  21. * Portions created by Ximpo Group Ltd. are
  22. * Copyright (C) Ximpo Group Ltd. 2003, 2004. All Rights Reserved.
  23. *
  24. * Contributor(s):
  25. * Dave Mackie [email protected]
  26. * Alix Marchandise-Franquet [email protected]
  27. * Ximpo Group Ltd. [email protected]
  28. */
  29. #include "mp4common.h"
  30. MP4StsdAtom::MP4StsdAtom()
  31. : MP4Atom("stsd")
  32. {
  33. AddVersionAndFlags();
  34. MP4Integer32Property* pCount =
  35. new MP4Integer32Property("entryCount");
  36. pCount->SetReadOnly();
  37. AddProperty(pCount);
  38. ExpectChildAtom("mp4a", Optional, Many);
  39. ExpectChildAtom("enca", Optional, Many);
  40. ExpectChildAtom("mp4s", Optional, Many);
  41. ExpectChildAtom("mp4v", Optional, Many);
  42. ExpectChildAtom("encv", Optional, Many);
  43. ExpectChildAtom("rtp ", Optional, Many);
  44. ExpectChildAtom("samr", Optional, Many); // For AMR-NB
  45. ExpectChildAtom("sawb", Optional, Many); // For AMR-WB
  46. ExpectChildAtom("s263", Optional, Many); // For H.263
  47. ExpectChildAtom("avc1", Optional, Many);
  48. ExpectChildAtom("alac", Optional, Many);
  49. ExpectChildAtom("text", Optional, Many);
  50. }
  51. void MP4StsdAtom::Read()
  52. {
  53. /* do the usual read */
  54. MP4Atom::Read();
  55. // check that number of children == entryCount
  56. MP4Integer32Property* pCount =
  57. (MP4Integer32Property*)m_pProperties[2];
  58. if (m_pChildAtoms.Size() != pCount->GetValue()) {
  59. VERBOSE_READ(GetVerbosity(),
  60. printf("Warning: stsd inconsistency with number of entries"));
  61. /* fix it */
  62. pCount->SetReadOnly(false);
  63. pCount->SetValue(m_pChildAtoms.Size());
  64. pCount->SetReadOnly(true);
  65. }
  66. }