aboutsummaryrefslogtreecommitdiffstats
path: root/libavformat/isom.h
Commit message (Collapse)AuthorAgeFilesLines
* avformat/mov: Support multiple thumbnails in HEIFEric Joyner2025-07-171-1/+2
| | | | | | | | | | | | | | | | | | | | | | Prevents ffmpeg/ffprobe from erroring out when reading an HEIF that contains multiple hvcC thumbnails (e.g. from a Nikon Z6III camera). Before, move_read_iref_thmb() would always override the stored thmb_item_id in the MOVContext with each new read thumbnail, causing a stream and item_id mismatch later in mov_parse_heif_items(), resulting in the "HEIF thumbnail doesn't reference a stream" error message. To solve this, - Turn thmb_item_id into an array of IDs because multiple thumbnails can exist - Change check in mov_parse_heif_items() to compare against all stored thumbnail IDs to see if any item missing a stream is in the list of thumbnail IDs. Signed-off-by: Eric Joyner <erj@erj.cc> Reviewed-by: Lynne <dev@lynne.ee> Signed-off-by: James Almer <jamrial@gmail.com>
* avformat/mov: add an offset to IAMF streamsJames Almer2025-02-071-0/+1
| | | | | | | | Using audio_substream_id for AVStream ids is not ideal give that in containers like mp4, the IAMF structure is opaque to the outside and other streams may share such id values. Signed-off-by: James Almer <jamrial@gmail.com>
* avformat/mov: merge stts and ctts arrays into oneJames Almer2025-01-101-4/+11
| | | | | | Should reduce memory usage as well as remove code duplication. Signed-off-by: James Almer <jamrial@gmail.com>
* avformat/mov: fix setting tile grid stream offsets when a stream is ↵James Almer2025-01-051-0/+1
| | | | | | | | | | | referenced more than once The amount of tiles does not necessarely need to match the amount of streams referenced in the grid, as there could be duplicates. Don't silently ignore EEXIST return codes from avformat_stream_group_add_stream() and instead store the index of the duplicate stream. Signed-off-by: James Almer <jamrial@gmail.com>
* avformat/mov: Populate packet duration using stts atom instead of guessingDarren Mo2024-11-221-0/+3
| | | | | | Fixes tickets #7855 and #11312. Signed-off-by: James Almer <jamrial@gmail.com>
* avformat/mov: rename MOVCtts.duration to offsetJames Almer2024-11-221-1/+1
| | | | | | The value is a timestamp offset, not a duration. Signed-off-by: James Almer <jamrial@gmail.com>
* avformat/mov: use an array of pointers for heif_itemJames Almer2024-11-101-1/+1
| | | | | | | | | | Pointers to specific entries in the array are stored in other structs, so in the scenario where heif_item was reallocated when parsing an iloc box after and iinf one, the pointers may end up referencing freed memory. Fixes use-after-free with such samples. Signed-off-by: James Almer <jamrial@gmail.com>
* avformat/mov: get heif image mirroring from imir boxJames Almer2024-10-021-0/+2
| | | | | | Complements 76eb3e5ff3a35eff01dd71aca82efcda50c4441f. Signed-off-by: James Almer <jamrial@gmail.com>
* avformat/mov: parse colr boxes that reference tile gridsJames Almer2024-10-021-0/+2
| | | | Signed-off-by: James Almer <jamrial@gmail.com>
* avformat/mov: get heif image rotation from irot boxJames Almer2024-09-301-0/+1
| | | | | | | | Based on a patch by Hacene Bouaroua. Fixes ticket #11171. Co-authored-by: Hacene Bouaroua <hbouaroua@freebox.fr> Signed-off-by: James Almer <jamrial@gmail.com>
* avformat/mov: support for LCEVC tracksJames Almer2024-09-191-0/+3
| | | | | Co-authored-by: V-Nova Team <systems@v-nova.com> Signed-off-by: James Almer <jamrial@gmail.com>
* avformat/isom: make parameters used for loging a pointer to voidJames Almer2024-08-311-2/+2
| | | | Signed-off-by: James Almer <jamrial@gmail.com>
* avformat/mov: ensure pasp box derived SAR is used if presentJames Almer2024-07-111-0/+2
| | | | | | | | | | It's meant to override any codec specific (but still container level) information, but its position is not guaranteed, so apply the values after the entire trak structure has been parsed. Also, replace the ugly roundabout int -> double -> int method to set SAR from existing dimensions while at it. Signed-off-by: James Almer <jamrial@gmail.com>
* avformat/mov: don't use sizeof(AVStereo3D)James Almer2024-06-251-0/+1
| | | | | | It's not part of the libavutil ABI. Signed-off-by: James Almer <jamrial@gmail.com>
* avformat/mov: don't use sizeof(AVMasteringDisplayMetadata)James Almer2024-06-201-0/+1
| | | | | | It's not part of the libavutil ABI. Signed-off-by: James Almer <jamrial@gmail.com>
* avformat/mov: store sample_sizes as unsigned intsJames Almer2024-05-221-1/+1
| | | | | | | | | | As defined in Section 8.7.3.2.1 of ISO 14496-12. Any unsupported value will be rejected in mov_build_index() without outright aborting demuxing. Fixes ticket #11005. Signed-off-by: James Almer <jamrial@gmail.com>
* avformat/mov: add support for tile HEIF still imagesJames Almer2024-02-261-1/+13
| | | | | | | | | | | | Export each tile as its own stream, and the grid information as a Stream Group of type TILE_GRID. This also enables exporting other stream items like thumbnails, which may be present in non tiled HEIF images too. For those, the primary stream will be tagged with the default disposition. Based on a patch by Swaraj Hota Signed-off-by: James Almer <jamrial@gmail.com>
* avformat/mov: add support for Immersive Audio Model and Formats in ISOBMFFJames Almer2024-02-201-0/+3
| | | | Signed-off-by: James Almer <jamrial@gmail.com>
* avformat/mov: make MOVStreamContext refcountedJames Almer2024-02-201-0/+1
| | | | | | This will be useful in the next commit. Signed-off-by: James Almer <jamrial@gmail.com>
* avformat/mov: add support for 'amve' ambient viewing environment boxDamiano Galassi2024-02-041-0/+3
| | | | | | As defined in ISOBMFF (ISO/IEC 14496-12) document. Co-Authored-By: Cosmin Stejerean <cosmin@cosmin.at>
* avformat/mov: use a more descriptive name for variables of type HEIFItemJames Almer2024-02-031-2/+2
| | | | | | | Other HEIF related structs will be introduced, so lets be more specific about what this one defines. Signed-off-by: James Almer <jamrial@gmail.com>
* avformat/mov: ignore item boxes for animated heifJames Almer2024-02-011-0/+1
| | | | | | | Fixes a regression since d9fed9df2a, where the single animated stream would be exported twice as two independent streams. Signed-off-by: James Almer <jamrial@gmail.com>
* avformat/mov: improve HEIF parsingJames Almer2024-01-151-8/+14
| | | | | | | | | | | | Parse iprp and iinf boxes and its child boxes to get the actual codec used (AV1 for avif, HEVC for heic), and properly export extradata and other properties in a generic way. The avif tests reference files are updated as the extradata is now exported. Based on a patch by Swaraj Hota Co-authored-by: Swaraj Hota <swarajhota353@gmail.com> Signed-off-by: James Almer <jamrial@gmail.com>
* avformat/mov: rename avif fields to heifJames Almer2024-01-101-2/+2
| | | | | | They are no longer avif specific. Signed-off-by: James Almer <jamrial@gmail.com>
* avformat/mov: Add support for demuxing still HEIC imagesVignesh Venkatasubramanian via ffmpeg-devel2024-01-091-0/+2
| | | | | | | | | | | | | | | | | | They are similar to AVIF images (both use the HEIF container). The only additional work needed is to parse the hvcC box and put it in the extradata. With this patch applied, ffmpeg (when built with an HEVC decoder) is able to decode the files in https://github.com/nokiatech/heif/tree/gh-pages/content/images Also add a couple of fate tests with samples from https://github.com/nokiatech/heif_conformance/tree/master/conformance_files Partially fixes trac ticket #6521. Signed-off-by: Vignesh Venkatasubramanian <vigneshv@google.com> Signed-off-by: James Almer <jamrial@gmail.com>
* avformat/mov: add interleaved_read optionZhao Zhili2023-09-141-0/+1
| | | | | | | | | | | | For badly interleaved files, interleave packets from multiple tracks at the demuxer level can trigger seeking back and forth, which can be dramatically slow depending on the protocol. Demuxer level interleave can be useless sometimes, e.g., reading mp4 via http and then transcoding/remux to DASH. Disable this option when you don't need the demuxer level interleave, and want to avoid the IO penalizes. Co-authored-by: Derek Buitenhuis <derek.buitenhuis@gmail.com> Signed-off-by: Zhao Zhili <zhilizhao@tencent.com>
* avformat/mov: fix ISO/IEC 23003-5 supportZhao Zhili2023-03-151-0/+2
| | | | | | Missing floating-point formats support. Signed-off-by: Zhao Zhili <zhilizhao@tencent.com>
* mov: Reduce the verbosity of the warning about fragmented MP4 vs advanced ↵Martin Storsjö2023-01-311-0/+1
| | | | | | | | | | | | | | | | | | | | | edit lists Only warn if the advanced_editlist option is enabled (it is enabled by default though) so we don't print one warning for each track, and demote the warning to AV_LOG_LEVEL_VERBOSE; this message does get generated whenever parsing a fragmented MP4 file, regardless of whether the file actually uses multiple edits or not. Later when parsing the mov structures, the demuxer does warn if the file did contain multiple edits which would require the advanced_editlist option enabled for decoding correctly. Adjust the warning message for the case when the file seemed like it actually would have needed handling of advanced edit lists, to reflect the fact that it doesn't help to try set the option as it has been automatically disabled. Signed-off-by: Martin Storsjö <martin@martin.st>
* avformat/mov: get the correct fragment stsd_id when decrypting the sampleWang Yaqiang2022-09-211-0/+1
| | | | | | | | When determining whether a packet should be decrypted, should use the stsd_id of the fragment where the current packet is located. Reviewed-by: Zhao Zhili <zhilizhao@tencent.com> Signed-off-by: Wang Yaqiang <wangyaqiang03@kuaishou.com>
* avformat/mov: fix encryption index in the case of multiple trunZhao Zhili2022-08-161-1/+2
| | | | | | | | | | frag_stream_info->index_entry isn't the first sample/trun index. cenc.frag_index_entry_base failed to catch the case since current_index > 0. Fix ticket #9807. Signed-off-by: Zhao Zhili <zhilizhao@tencent.com>
* avformat/mov: Rework the AVIF parser to handle multiple itemsVignesh Venkatasubramanian2022-08-091-0/+6
| | | | | | | | | | | | Stores the item ids of all the items found in the file and processes the primary item at the end of the meta box. This patch does not change any behavior. It sets up the code for parsing alpha channel (and possibly images with 'grid') in follow up patches. Reviewed-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com> Signed-off-by: Vignesh Venkatasubramanian <vigneshv@google.com> Signed-off-by: James Zern <jzern@google.com>
* avformat/mov: Only read the primary item for AVIFVignesh Venkatasubramanian2022-06-291-0/+1
| | | | | | | | | | | | | | | | | | | | Update the still AVIF parser to only read the primary item. With this patch, AVIF still images with exif/icc/alpha channel will no longer fail to parse. For example, this patch enables parsing of files in: https://github.com/AOMediaCodec/av1-avif/tree/master/testFiles/Microsoft Adding two fate tests: 1) demuxing of still image with 1 item - this test will pass regardless of this patch. 2) demuxing of still image with 2 items - this test will fail without this patch and will pass with patch applied. Partially fixes trac ticket #7621 Signed-off-by: Vignesh Venkatasubramanian <vigneshv@google.com> Signed-off-by: James Zern <jzern@google.com>
* avformat/mov: Add support for still image AVIF parsingVignesh Venkatasubramanian2022-04-231-0/+1
| | | | | | | | | | | This patch supports AVIF still images conforming to the final specification that have exactly one item (i.e. no alpha channel). The iloc box is parsed and the mov index populated. Partially fixes #7621. Signed-off-by: Vignesh Venkatasubramanian <vigneshv@google.com> Signed-off-by: Gyan Doshi <ffmpeg@gyani.pro>
* avformat/mov: fix timecode with high frame rate contentMarton Balint2022-04-221-0/+1
| | | | | | | | | | | | | | | | | | | | 60 fps content have "Number of Frames" set to 30 in the tmcd atom, but the frame duration / timescale reflects the original video frame rate. Therefore we multiply the frame count with the quotient of the rounded timecode frame rate and the "Number of Frames" per second to get a frame count in the original (higher) frame rate. Note that the frames part in the timecode will be in high frame rate which will make the timecode different to e.g. MediaInfo which seems to show the 30 fps timecode even for 120 fps content. Regression since 428b4aacb1a91a267650de644519882a5f700388. Fixes ticket #9710. Fixes ticket #9492. Signed-off-by: Marton Balint <cus@passwd.hu>
* avformat/mov: fix seeking with HEVC open GOP filesClément Bœsch2022-03-041-0/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This was tested with medias recorded from an iPhone XR and an iPhone 13. Here is how a typical stream looks like in coding order: ┌────────┬─────┬─────┬──────────┐ │ sample | PTS | DTS | keyframe | ├────────┼─────┼─────┼──────────┤ ┊ ┊ ┊ ┊ ┊ │ 53 │ 560 │ 510 │ No │ │ 54 │ 540 │ 520 │ No │ │ 55 │ 530 │ 530 │ No │ │ 56 │ 550 │ 540 │ No │ │ 57 │ 600 │ 550 │ Yes │ │ * 58 │ 580 │ 560 │ No │ │ * 59 │ 570 │ 570 │ No │ │ * 60 │ 590 │ 580 │ No │ │ 61 │ 640 │ 590 │ No │ │ 62 │ 620 │ 600 │ No │ ┊ ┊ ┊ ┊ ┊ In composition/display order: ┌────────┬─────┬─────┬──────────┐ │ sample | PTS | DTS | keyframe | ├────────┼─────┼─────┼──────────┤ ┊ ┊ ┊ ┊ ┊ │ 55 │ 530 │ 530 │ No │ │ 54 │ 540 │ 520 │ No │ │ 56 │ 550 │ 540 │ No │ │ 53 │ 560 │ 510 │ No │ │ * 59 │ 570 │ 570 │ No │ │ * 58 │ 580 │ 560 │ No │ │ * 60 │ 590 │ 580 │ No │ │ 57 │ 600 │ 550 │ Yes │ │ 63 │ 610 │ 610 │ No │ │ 62 │ 620 │ 600 │ No │ ┊ ┊ ┊ ┊ ┊ Sample/frame 58, 59 and 60 are B-frames which actually depends on the key frame (57). Here the key frame is not an IDR but a "CRA" (Clean Random Access). Initially, I thought I could rely on the sdtp box (independent and disposable samples), but unfortunately: sdtp[54] is_leading:0 sample_depends_on:1 sample_is_depended_on:0 sample_has_redundancy:0 sdtp[55] is_leading:0 sample_depends_on:1 sample_is_depended_on:2 sample_has_redundancy:0 sdtp[56] is_leading:0 sample_depends_on:1 sample_is_depended_on:2 sample_has_redundancy:0 sdtp[57] is_leading:0 sample_depends_on:2 sample_is_depended_on:0 sample_has_redundancy:0 sdtp[58] is_leading:0 sample_depends_on:1 sample_is_depended_on:0 sample_has_redundancy:0 sdtp[59] is_leading:0 sample_depends_on:1 sample_is_depended_on:2 sample_has_redundancy:0 sdtp[60] is_leading:0 sample_depends_on:1 sample_is_depended_on:2 sample_has_redundancy:0 sdtp[61] is_leading:0 sample_depends_on:1 sample_is_depended_on:0 sample_has_redundancy:0 sdtp[62] is_leading:0 sample_depends_on:1 sample_is_depended_on:0 sample_has_redundancy:0 The information that might have been useful here would have been is_leading, but all the samples are set to 0 so this was unusable. Instead, we need to rely on sgpd/sbgp tables. In my case the video track contained 3 sgpd tables with the following grouping types: tscl, sync and tsas. In the sync table we have the following 2 entries (only): sgpd.sync[1]: sync nal_unit_type:0x14 sgpd.sync[2]: sync nal_unit_type:0x15 (The count starts at 1 because 0 carries the undefined semantic, we'll see that later in the reference table). The NAL unit types presented here correspond to: libavcodec/hevc.h: HEVC_NAL_IDR_N_LP = 20, libavcodec/hevc.h: HEVC_NAL_CRA_NUT = 21, In parallel, the sbgp sync table contains the following: ┌────┬───────┬─────┐ │ id │ count │ gdi │ ├────┼───────┼─────┤ │ 0 │ 1 │ 1 │ │ 1 │ 56 │ 0 │ │ 2 │ 1 │ 2 │ │ 3 │ 59 │ 0 │ │ 4 │ 1 │ 2 │ │ 5 │ 59 │ 0 │ │ 6 │ 1 │ 2 │ │ 7 │ 59 │ 0 │ │ 8 │ 1 │ 2 │ │ 9 │ 59 │ 0 │ │ 10 │ 1 │ 2 │ │ 11 │ 11 │ 0 │ └────┴───────┴─────┘ The gdi column (group description index) directly refers to the index in the sgpd.sync table. This means the first frame is an IDR, then we have batches of undefined frames interlaced with CRA frames. No IDR ever appears again (tried on a 30+ seconds sample). With that information, we can build an heuristic using the presentation order. A few things needed to be introduced in this commit: 1. min_sample_duration is extracted from the stts: we need the minimal step between sample in order to PTS-step backward to a valid point 2. In order to avoid a loop over the ctts table systematically during a seek, we build an expanded list of sample offsets which will be used to translate from DTS to PTS 3. An open_key_samples index to keep track of all the non-IDR key frames; for now it only supports HEVC CRA frames. We should probably add BLA frames as well, but I don't have any sample so I prefered to leave that for later It is entirely possible I missed something obvious in my approach, but I couldn't come up with a better solution. Also, as mentioned in the diff, we could optimize is_open_key_sample(), but the linear scaling overhead should be fine for now since it only happens in seek events. Fixing this issue prevents sending broken packets to the decoder. With FFmpeg hevc decoder the frames are skipped, with VideoToolbox the frames are glitching.
* avformat/mov: add parsing for the sgpd sync boxClément Bœsch2022-03-041-0/+2
| | | | | | | | | | | sgpd means Sample Group Description Box. For now, only the sync grouping type is parsed, but the function can easily be adjusted to support other flavours. The sbgp (Sample to Group Box) sync_group table built in previous commit contains references to this table through the group_description_index field.
* avformat/mov: add support for sync group in sbgp boxClément Bœsch2022-03-041-0/+2
|
* avformat/mov: add option max_stts_deltaGyan Doshi2021-12-311-0/+1
| | | | | | | | | | | | | | | | Very high stts sample deltas may occasionally be intended but usually they are written in error or used to store a negative value for dts correction when treated as signed 32-bit integers. This option lets the user set an upper limit, beyond which the delta is clamped to 1. Values greater than the limit if negative when cast to int32 are used to adjust onward dts. Unit is the track time scale. Default is UINT_MAX - 48000*10 which allows upto a 10 second dts correction for 48 kHz audio streams while accommodating 99.9% of uint32 range. Signed-off-by: Gyan Doshi <ffmpeg@gyani.pro> Reviewed-by: Michael Niedermayer <michael@niedermayer.cc>
* avformat/mov: make STTS duration unsigned intGyan Doshi2021-11-221-2/+7
| | | | | | | | | | As per 8.6.1.2.2 of ISO/IEC 14496-12:2015(E), STTS sample offsets are to be always stored as uint32_t. So far, they have been signed ints which led to desync in files with very large offsets. The MOVStts struct was used to store CTTS offsets as well. These can be negative in version 1. So a new struct MOVCtts was created and all declarations for CTTS usage changed to MOVCtts.
* libavformat/mov: add support for 'cens', 'cbc1' and 'cbcs' encryption ↵Nachiket Tarate2021-10-131-0/+2
| | | | | | | | | | | | schemes specified in Common Encryption (CENC) standard correct implementation of 'cenc' encryption scheme to support decryption of partial cipher blocks at the end of subsamples https://www.iso.org/standard/68042.html Signed-off-by: Nachiket Tarate <nachiket.programmer@gmail.com> Signed-off-by: Steven Liu <lq@chinaffmpeg.org>
* avformat/{isom,mov,movenc}: add support for CMAF DASH rolesJan Ekström2021-10-041-0/+12
| | | | | | | | | | | | | | | | This information is coded in a standard MP4 KindBox and utilizes the scheme and values as per the DASH role scheme defined in MPEG-DASH. Other schemes are technically allowed, but where multiple schemes define the same concepts, the DASH scheme should be utilized. Such flagging is additionally utilized by the DASH-IF CMAF ingest specification, enabling an encoder to inform the following component of the roles of the incoming media streams. A test is added for this functionality in a similar manner to the matroska test. Signed-off-by: Jan Ekström <jan.ekstrom@24i.com>
* avformat/movenc: add support for TTML muxingJan Ekström2021-08-251-0/+3
| | | | | | | | | | | Includes basic support for both the ISMV ('dfxp') and MP4 ('stpp') methods. This initial version also foregoes fragmentation support in case the built-in sample squashing is to be utilized, as this eases the initial review. Additionally, add basic tests for both muxing modes in MP4. Signed-off-by: Jan Ekström <jan.ekstrom@24i.com>
* avformat/mov: add option to use tfdt for fragment timestamps.Gyan Doshi2021-06-021-0/+1
|
* Add support for playing Audible AAXC (.aaxc) files [PATCH v4]Vesselin Bontchev2020-11-051-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The AAXC container format is the same as the (already supported) Audible AAX format but it uses a different encryption scheme. Note: audible_key and audible_iv values are variable (per file) and are externally fed. It is possible to extend https://github.com/mkb79/Audible to derive the audible_key and audible_key values. Relevant code: def decrypt_voucher(deviceSerialNumber, customerId, deviceType, asin, voucher): buf = (deviceType + deviceSerialNumber + customerId + asin).encode("ascii") digest = hashlib.sha256(buf).digest() key = digest[0:16] iv = digest[16:] # decrypt "voucher" using AES in CBC mode with no padding cipher = AES.new(key, AES.MODE_CBC, iv) plaintext = cipher.decrypt(voucher).rstrip(b"\x00") # improve this! return json.loads(plaintext) The decrypted "voucher" has the required audible_key and audible_iv values. Update (Nov-2020): This patch has now been tested by multiple folks - details at the following URL: https://github.com/mkb79/Audible/issues/3 Signed-off-by: Vesselin Bontchev <vesselin.bontchev@yandex.com>
* avformat/mov: Only read the mfra size once during sidx parsingDerek Buitenhuis2020-09-031-0/+2
| | | | | | | | | | | On files with more than one sidx box, like live fragmented MP4 files, it was previously re-reading and seeking on every singl sidx box, leading to extremely poor performance on larger files, especially over the network. Only do it on the first one, and stash its result. Signed-off-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
* libavformat/mov: fix multiple trun per trafJohn Stebbins2020-04-111-0/+1
| | | | | | | | | dts would start over at the beginning of each trun when they should be computed contiguously for each trun in a traf Fixes ticket 8070 Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
* avformat/mov: parse sdtp atom and set the pkt disposable flag accordinglyMatthieu Bouron2019-10-121-0/+2
| | | | | | Allows the creation of the sdtp atom while remuxing MP4 to MP4. This atom is required by Apple devices (iPhone, Apple TV) in order to accept 2160p medias.
* avformat/mov.c: require tfhd to begin parsing trunchcunningham2019-02-081-0/+1
| | | | | | | | | | Detecting missing tfhd avoids re-using tfhd track info from the previous moof. For files with multiple tracks, this may make a mess of the avindex and fragindex, which can later trigger av_assert0 in mov_read_trun(). Reviewed-by: Derek Buitenhuis <derek.buitenhuis@gmail.com> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
* Use QT format for audio sample descriptors depending on stsd version.Justin Ruggles2018-09-091-0/+1
| | | | | | | | | | | | | | | | | ISOBMFF does not allow AudioSampleEntryV1 in stsd version 0, so assume the descriptor format is QTFF SoundDescriptionV1. ISOBMFF does not define a version 2. This fixes audio decoding for some MP4 files generated with Apple tools. The additional fields present in SoundDescriptionV1/V2 need to be read in order to correctly read additional boxes that contain information required for decoding the stream. Fixes #7376. Also see: https://github.com/HandBrake/HandBrake/issues/1555 Signed-off-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
* lavf/mov: add AVCodecTag entry for GoPro metadataJohn Stebbins2018-09-081-0/+1
| | | | | | This allows for validation of the track type Signed-off-by: James Almer <jamrial@gmail.com>