content/media/encoder/fmp4_muxer/AMRBox.cpp

branch
TOR_BUG_9701
changeset 13
44a2da4a2ab2
equal deleted inserted replaced
-1:000000000000 0:30b18e5225c7
1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-*/
2 /* This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
4 * You can obtain one at http://mozilla.org/MPL/2.0/. */
5
6 #include "ISOControl.h"
7 #include "ISOMediaBoxes.h"
8 #include "AMRBox.h"
9 #include "ISOTrackMetadata.h"
10
11 namespace mozilla {
12
13 nsresult
14 AMRSampleEntry::Generate(uint32_t* aBoxSize)
15 {
16 uint32_t box_size;
17 nsresult rv = amr_special_box->Generate(&box_size);
18 NS_ENSURE_SUCCESS(rv, rv);
19 size += box_size;
20
21 *aBoxSize = size;
22 return NS_OK;
23 }
24
25 nsresult
26 AMRSampleEntry::Write()
27 {
28 BoxSizeChecker checker(mControl, size);
29 nsresult rv;
30 rv = AudioSampleEntry::Write();
31 NS_ENSURE_SUCCESS(rv, rv);
32 rv = amr_special_box->Write();
33 NS_ENSURE_SUCCESS(rv, rv);
34
35 return NS_OK;
36 }
37
38 AMRSampleEntry::AMRSampleEntry(ISOControl* aControl)
39 : AudioSampleEntry(NS_LITERAL_CSTRING("samr"), aControl)
40 {
41 amr_special_box = new AMRSpecificBox(aControl);
42 MOZ_COUNT_CTOR(AMRSampleEntry);
43 }
44
45 AMRSampleEntry::~AMRSampleEntry()
46 {
47 MOZ_COUNT_DTOR(AMRSampleEntry);
48 }
49
50 nsresult
51 AMRSpecificBox::Generate(uint32_t* aBoxSize)
52 {
53 nsresult rv;
54 FragmentBuffer* frag = mControl->GetFragment(Audio_Track);
55 rv = frag->GetCSD(amrDecSpecInfo);
56 NS_ENSURE_SUCCESS(rv, rv);
57
58 size += amrDecSpecInfo.Length();
59 *aBoxSize = size;
60
61 return NS_OK;
62 }
63
64 nsresult
65 AMRSpecificBox::Write()
66 {
67 BoxSizeChecker checker(mControl, size);
68 Box::Write();
69 mControl->Write(amrDecSpecInfo.Elements(), amrDecSpecInfo.Length());
70 return NS_OK;
71 }
72
73 AMRSpecificBox::AMRSpecificBox(ISOControl* aControl)
74 : Box(NS_LITERAL_CSTRING("damr"), aControl)
75 {
76 MOZ_COUNT_CTOR(AMRSpecificBox);
77 }
78
79 AMRSpecificBox::~AMRSpecificBox()
80 {
81 MOZ_COUNT_DTOR(AMRSpecificBox);
82 }
83
84 }

mercurial