mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-09 01:08:39 +09:00
Alow AAC audio codec data in matroska/webm streams.
Allow CRC32 elements in matroska cluster elements.
This commit is contained in:
parent
d2baf53a14
commit
3dfc953945
4 changed files with 28 additions and 2 deletions
|
|
@ -82,6 +82,10 @@ WebMDecoder::CanHandleMediaType(const nsACString& aMIMETypeExcludingCodecs,
|
|||
continue;
|
||||
}
|
||||
|
||||
if (IsAACCodecString(codec)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Some unsupported codec.
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -422,6 +422,8 @@ WebMDemuxer::ReadMetadata()
|
|||
mInfo.mAudio.mMimeType = "audio/opus";
|
||||
OpusDataDecoder::AppendCodecDelay(mInfo.mAudio.mCodecSpecificConfig,
|
||||
media::TimeUnit::FromNanoseconds(params.codec_delay).ToMicroseconds());
|
||||
} else if (mAudioCodec == NESTEGG_CODEC_AAC) {
|
||||
mInfo.mAudio.mMimeType = "audio/mp4a-latm";
|
||||
}
|
||||
mSeekPreroll = params.seek_preroll;
|
||||
mInfo.mAudio.mRate = params.rate;
|
||||
|
|
|
|||
|
|
@ -73,6 +73,7 @@ extern "C" {
|
|||
#define NESTEGG_CODEC_OPUS 3 /**< Track uses Xiph Opus codec. */
|
||||
#define NESTEGG_CODEC_AV1 4 /**< Track uses AOMedia AV1 codec. */
|
||||
#define NESTEGG_CODEC_AVC1 5 /**< Track uses AVC1 'h264' */
|
||||
#define NESTEGG_CODEC_AAC 6 /**< Track uses AAC 'mp4a' */
|
||||
#define NESTEGG_CODEC_UNKNOWN INT_MAX /**< Track uses unknown codec. */
|
||||
|
||||
#define NESTEGG_VIDEO_MONO 0 /**< Track is mono video. */
|
||||
|
|
|
|||
|
|
@ -158,6 +158,7 @@ enum ebml_type_enum {
|
|||
#define TRACK_ID_VORBIS "A_VORBIS"
|
||||
#define TRACK_ID_OPUS "A_OPUS"
|
||||
#define TRACK_ID_AVC1 "V_MPEG4/ISO/AVC"
|
||||
#define TRACK_ID_AAC "A_AAC"
|
||||
|
||||
/* Track Encryption */
|
||||
#define CONTENT_ENC_ALGO_AES 5
|
||||
|
|
@ -2405,6 +2406,9 @@ nestegg_track_codec_id(nestegg * ctx, unsigned int track)
|
|||
if (strcmp(codec_id, TRACK_ID_AVC1) == 0)
|
||||
return NESTEGG_CODEC_AVC1;
|
||||
|
||||
if (strcmp(codec_id, TRACK_ID_AAC) == 0)
|
||||
return NESTEGG_CODEC_AAC;
|
||||
|
||||
return NESTEGG_CODEC_UNKNOWN;
|
||||
}
|
||||
|
||||
|
|
@ -2425,7 +2429,8 @@ nestegg_track_codec_data_count(nestegg * ctx, unsigned int track,
|
|||
|
||||
codec_id = nestegg_track_codec_id(ctx, track);
|
||||
|
||||
if (codec_id == NESTEGG_CODEC_OPUS) {
|
||||
if (codec_id == NESTEGG_CODEC_OPUS ||
|
||||
codec_id == NESTEGG_CODEC_AAC) {
|
||||
*count = 1;
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -2464,7 +2469,8 @@ nestegg_track_codec_data(nestegg * ctx, unsigned int track, unsigned int item,
|
|||
|
||||
if (nestegg_track_codec_id(ctx, track) != NESTEGG_CODEC_VORBIS &&
|
||||
nestegg_track_codec_id(ctx, track) != NESTEGG_CODEC_OPUS &&
|
||||
nestegg_track_codec_id(ctx, track) != NESTEGG_CODEC_AVC1)
|
||||
nestegg_track_codec_id(ctx, track) != NESTEGG_CODEC_AVC1 &&
|
||||
nestegg_track_codec_id(ctx, track) != NESTEGG_CODEC_AAC)
|
||||
return -1;
|
||||
|
||||
if (ne_get_binary(entry->codec_private, &codec_private) != 0)
|
||||
|
|
@ -2777,6 +2783,19 @@ nestegg_read_packet(nestegg * ctx, nestegg_packet ** pkt)
|
|||
if (r != 1)
|
||||
return r;
|
||||
|
||||
/* Some files have a crc32 element, since it also has to be first it
|
||||
conflicts with the timecode spec. Just ignore it */
|
||||
if (id == ID_CRC32) {
|
||||
ctx->log(ctx, NESTEGG_LOG_DEBUG,
|
||||
"read_packet: skipping crc element in a cluster");
|
||||
r = ne_io_read_skip(ctx->io, size);
|
||||
if (r != 1)
|
||||
return r;
|
||||
r = ne_read_element(ctx, &id, &size);
|
||||
if (r != 1)
|
||||
return r;
|
||||
}
|
||||
|
||||
/* Timecode must be the first element in a Cluster, per spec. */
|
||||
if (id != ID_TIMECODE)
|
||||
return -1;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue