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 michael@0: #include "ISOControl.h" michael@0: #include "ISOMediaBoxes.h" michael@0: #include "AVCBox.h" michael@0: michael@0: namespace mozilla { michael@0: michael@0: nsresult michael@0: AVCSampleEntry::Generate(uint32_t* aBoxSize) michael@0: { michael@0: uint32_t avc_box_size = 0; michael@0: nsresult rv; michael@0: rv = avcConfigBox->Generate(&avc_box_size); michael@0: NS_ENSURE_SUCCESS(rv, rv); michael@0: michael@0: size += avc_box_size; michael@0: michael@0: *aBoxSize = size; michael@0: michael@0: return NS_OK; michael@0: } michael@0: michael@0: nsresult michael@0: AVCSampleEntry::Write() michael@0: { michael@0: BoxSizeChecker checker(mControl, size); michael@0: nsresult rv; michael@0: rv = VisualSampleEntry::Write(); michael@0: NS_ENSURE_SUCCESS(rv, rv); michael@0: rv = avcConfigBox->Write(); michael@0: NS_ENSURE_SUCCESS(rv, rv); michael@0: michael@0: return NS_OK; michael@0: } michael@0: michael@0: AVCSampleEntry::AVCSampleEntry(ISOControl* aControl) michael@0: : VisualSampleEntry(NS_LITERAL_CSTRING("avc1"), aControl) michael@0: { michael@0: avcConfigBox = new AVCConfigurationBox(aControl); michael@0: MOZ_COUNT_CTOR(AVCSampleEntry); michael@0: } michael@0: michael@0: AVCSampleEntry::~AVCSampleEntry() michael@0: { michael@0: MOZ_COUNT_DTOR(AVCSampleEntry); michael@0: } michael@0: michael@0: AVCConfigurationBox::AVCConfigurationBox(ISOControl* aControl) michael@0: : Box(NS_LITERAL_CSTRING("avcC"), aControl) michael@0: { michael@0: MOZ_COUNT_CTOR(AVCConfigurationBox); michael@0: } michael@0: michael@0: AVCConfigurationBox::~AVCConfigurationBox() michael@0: { michael@0: MOZ_COUNT_DTOR(AVCConfigurationBox); michael@0: } michael@0: michael@0: nsresult michael@0: AVCConfigurationBox::Generate(uint32_t* aBoxSize) michael@0: { michael@0: nsresult rv; michael@0: FragmentBuffer* frag = mControl->GetFragment(Video_Track); michael@0: rv = frag->GetCSD(avcConfig); michael@0: NS_ENSURE_SUCCESS(rv, rv); michael@0: size += avcConfig.Length(); michael@0: *aBoxSize = size; michael@0: return NS_OK; michael@0: } michael@0: michael@0: nsresult michael@0: AVCConfigurationBox::Write() michael@0: { michael@0: BoxSizeChecker checker(mControl, size); michael@0: Box::Write(); michael@0: michael@0: mControl->Write(avcConfig.Elements(), avcConfig.Length()); michael@0: michael@0: return NS_OK; michael@0: } michael@0: michael@0: }