52 lines
2.1 KiB
Go
52 lines
2.1 KiB
Go
// Copyright 2024 Martin Riedl
|
||
//
|
||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||
// you may not use this file except in compliance with the License.
|
||
// You may obtain a copy of the License at
|
||
//
|
||
// http://www.apache.org/licenses/LICENSE-2.0
|
||
//
|
||
// Unless required by applicable law or agreed to in writing, software
|
||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
// See the License for the specific language governing permissions and
|
||
// limitations under the License.
|
||
|
||
package gomp4
|
||
|
||
// MediaDataBox Media Data Box
|
||
//
|
||
// 8.1.1 Media Data Box
|
||
// Box Type: ‘mdat’
|
||
// Container: File
|
||
// Mandatory: No
|
||
// Quantity: Zero or more
|
||
//
|
||
// This box contains the media data. In video tracks, this box would contain video frames. A presentation
|
||
// may contain zero or more Media Data Boxes. The actual media data follows the type field; its structure
|
||
// is described by the metadata (see particularly the sample table, subclause 8.5, and the item location box,
|
||
// subclause 8.11.3).
|
||
//
|
||
// In large presentations, it may be desirable to have more data in this box than a 32‐bit size would permit.
|
||
// In this case, the large variant of the size field, above in subclause 4.2, is used.
|
||
//
|
||
// There may be any number of these boxes in the file (including zero, if all the media data is in other files).
|
||
// The metadata refers to media data by its absolute offset within the file (see subclause 8.7.5, the Chunk
|
||
// Offset Box); so Media Data Box headers and free space may easily be skipped, and files without any box
|
||
// structure may also be referenced and used.
|
||
type MediaDataBox struct {
|
||
*Box
|
||
ContentStartPosition uint64
|
||
ContentEndPosition uint64
|
||
}
|
||
|
||
// ParseMediaDataBox creates a new media data box struct
|
||
func ParseMediaDataBox(filePosition uint64, headerSize uint32, content []byte) *MediaDataBox {
|
||
box := &MediaDataBox{Box: &Box{filePosition, headerSize}}
|
||
|
||
// parse positions of content
|
||
box.ContentStartPosition = filePosition + uint64(headerSize)
|
||
box.ContentEndPosition = box.ContentStartPosition + uint64(len(content))
|
||
|
||
return box
|
||
}
|