From d63a56adacb7a6e6c7c2263f791998192d006411 Mon Sep 17 00:00:00 2001 From: Moonchild Date: Sun, 29 Dec 2024 13:50:24 +0100 Subject: [PATCH] Issue #2673 - Part 4: Hook up the ADTS sniffer + raw AAC MIME type. --- netwerk/mime/nsMimeTypes.h | 1 + toolkit/components/mediasniffer/nsMediaSniffer.cpp | 13 +++++++++++++ 2 files changed, 14 insertions(+) diff --git a/netwerk/mime/nsMimeTypes.h b/netwerk/mime/nsMimeTypes.h index aba444de2f..41950a7e71 100644 --- a/netwerk/mime/nsMimeTypes.h +++ b/netwerk/mime/nsMimeTypes.h @@ -88,6 +88,7 @@ #define AUDIO_3GPP2 "audio/3gpp2" #define AUDIO_MIDI "audio/x-midi" #define AUDIO_MATROSKA "audio/x-matroska" +#define AUDIO_AAC "audio/aac" #define BINARY_OCTET_STREAM "binary/octet-stream" diff --git a/toolkit/components/mediasniffer/nsMediaSniffer.cpp b/toolkit/components/mediasniffer/nsMediaSniffer.cpp index e9dc5dbd5d..d00dea894b 100644 --- a/toolkit/components/mediasniffer/nsMediaSniffer.cpp +++ b/toolkit/components/mediasniffer/nsMediaSniffer.cpp @@ -3,6 +3,7 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +#include "ADTSDemuxer.h" #include "FlacDemuxer.h" #include "mozilla/ArrayUtils.h" #include "mozilla/ModuleUtils.h" @@ -125,6 +126,11 @@ MatchesFLAC(const uint8_t* aData, const uint32_t aLength) { return mozilla::FlacDemuxer::FlacSniffer(aData, aLength); } +static bool MatchesADTS(const uint8_t* aData, const uint32_t aLength) +{ + return mozilla::ADTSDemuxer::ADTSSniffer(aData, aLength); +} + NS_IMETHODIMP nsMediaSniffer::GetMIMETypeFromContent(nsIRequest* aRequest, const uint8_t* aData, @@ -183,6 +189,13 @@ nsMediaSniffer::GetMIMETypeFromContent(nsIRequest* aRequest, return NS_OK; } + // Note: Sniff for ADTS content before flac. + // The flac decoder can easily produce false negatives. + if (MatchesADTS(aData, clampedLength)) { + aSniffedType.AssignLiteral(AUDIO_AAC); + return NS_OK; + } + // Flac frames are generally big, often in excess of 24kB. // Using a size of MAX_BYTES_SNIFFED effectively means that we will only // recognize flac content if it starts with a frame.