michael@0: /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-*/ michael@0: /* This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this file, michael@0: * You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: #include "ISOControl.h" michael@0: #include "ISOMediaBoxes.h" michael@0: #include "AMRBox.h" michael@0: #include "ISOTrackMetadata.h" michael@0: michael@0: namespace mozilla { michael@0: michael@0: nsresult michael@0: AMRSampleEntry::Generate(uint32_t* aBoxSize) michael@0: { michael@0: uint32_t box_size; michael@0: nsresult rv = amr_special_box->Generate(&box_size); michael@0: NS_ENSURE_SUCCESS(rv, rv); michael@0: size += box_size; michael@0: michael@0: *aBoxSize = size; michael@0: return NS_OK; michael@0: } michael@0: michael@0: nsresult michael@0: AMRSampleEntry::Write() michael@0: { michael@0: BoxSizeChecker checker(mControl, size); michael@0: nsresult rv; michael@0: rv = AudioSampleEntry::Write(); michael@0: NS_ENSURE_SUCCESS(rv, rv); michael@0: rv = amr_special_box->Write(); michael@0: NS_ENSURE_SUCCESS(rv, rv); michael@0: michael@0: return NS_OK; michael@0: } michael@0: michael@0: AMRSampleEntry::AMRSampleEntry(ISOControl* aControl) michael@0: : AudioSampleEntry(NS_LITERAL_CSTRING("samr"), aControl) michael@0: { michael@0: amr_special_box = new AMRSpecificBox(aControl); michael@0: MOZ_COUNT_CTOR(AMRSampleEntry); michael@0: } michael@0: michael@0: AMRSampleEntry::~AMRSampleEntry() michael@0: { michael@0: MOZ_COUNT_DTOR(AMRSampleEntry); michael@0: } michael@0: michael@0: nsresult michael@0: AMRSpecificBox::Generate(uint32_t* aBoxSize) michael@0: { michael@0: nsresult rv; michael@0: FragmentBuffer* frag = mControl->GetFragment(Audio_Track); michael@0: rv = frag->GetCSD(amrDecSpecInfo); michael@0: NS_ENSURE_SUCCESS(rv, rv); michael@0: michael@0: size += amrDecSpecInfo.Length(); michael@0: *aBoxSize = size; michael@0: michael@0: return NS_OK; michael@0: } michael@0: michael@0: nsresult michael@0: AMRSpecificBox::Write() michael@0: { michael@0: BoxSizeChecker checker(mControl, size); michael@0: Box::Write(); michael@0: mControl->Write(amrDecSpecInfo.Elements(), amrDecSpecInfo.Length()); michael@0: return NS_OK; michael@0: } michael@0: michael@0: AMRSpecificBox::AMRSpecificBox(ISOControl* aControl) michael@0: : Box(NS_LITERAL_CSTRING("damr"), aControl) michael@0: { michael@0: MOZ_COUNT_CTOR(AMRSpecificBox); michael@0: } michael@0: michael@0: AMRSpecificBox::~AMRSpecificBox() michael@0: { michael@0: MOZ_COUNT_DTOR(AMRSpecificBox); michael@0: } michael@0: michael@0: }