Skip to content
This repository was archived by the owner on Jul 9, 2025. It is now read-only.

Commit 8179f22

Browse files
committed
Bug 891705 - [MediaEncoder] Implement WebM 1.0 container writer. r=giles, r=gps, r=rillian
This is an integrated patch which includes: 1. Bug 891705: [MediaEncoder] Implement WebM 1.0 container writer. r=giles, r=gps 2. Bug 950567: [MediaEncoder] Phase-in libmkv library. r=giles 3. bug 883749: Implement Vorbis encoding. r=rillian 4. bug 881840: Implement VP8 track encoder. r=rillian
1 parent df0c645 commit 8179f22

33 files changed

Lines changed: 2773 additions & 3 deletions

browser/confvars.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ MOZ_PAY=1
6464
# Enable activities. These are used for FxOS developers currently.
6565
MOZ_ACTIVITIES=1
6666
MOZ_JSDOWNLOADS=1
67+
MOZ_WEBM_ENCODER=1
6768
# Enable exact rooting on desktop.
6869
JSGC_USE_EXACT_ROOTING=1
6970

config/external/moz.build

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@ if CONFIG['MOZ_OPUS']:
2727
if CONFIG['MOZ_WEBM']:
2828
external_dirs += ['media/libnestegg']
2929

30+
if CONFIG['MOZ_WEBM_ENCODER']:
31+
external_dirs += ['media/libmkv']
32+
3033
if CONFIG['MOZ_VPX'] and not CONFIG['MOZ_NATIVE_LIBVPX']:
3134
external_dirs += ['media/libvpx']
3235

configure.in

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5546,6 +5546,11 @@ if test -n "$MOZ_OPUS"; then
55465546
AC_DEFINE(MOZ_OPUS)
55475547
fi
55485548

5549+
if test -n "$MOZ_WEBM_ENCODER"; then
5550+
AC_DEFINE(MOZ_WEBM_ENCODER)
5551+
fi
5552+
AC_SUBST(MOZ_WEBM_ENCODER)
5553+
55495554
dnl ==================================
55505555
dnl = Check alsa availability on Linux
55515556
dnl ==================================

content/media/encoder/MediaEncoder.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,11 @@
1414
#endif
1515
#ifdef MOZ_OPUS
1616
#include "OpusTrackEncoder.h"
17+
18+
#endif
19+
20+
#ifdef MOZ_VORBIS
21+
#include "VorbisTrackEncoder.h"
1722
#endif
1823
#ifdef MOZ_WEBM_ENCODER
1924
#include "VorbisTrackEncoder.h"

content/media/encoder/TrackEncoder.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,20 @@ AudioTrackEncoder::InterleaveTrackData(AudioChunk& aChunk,
128128
}
129129
}
130130

131+
/*static*/
132+
void
133+
AudioTrackEncoder::DeInterleaveTrackData(AudioDataValue* aInput,
134+
int32_t aDuration,
135+
int32_t aChannels,
136+
AudioDataValue* aOutput)
137+
{
138+
for (int32_t i = 0; i < aChannels; ++i) {
139+
for(int32_t j = 0; j < aDuration; ++j) {
140+
aOutput[i * aDuration + j] = aInput[i + j * aChannels];
141+
}
142+
}
143+
}
144+
131145
void
132146
VideoTrackEncoder::NotifyQueuedTrackChanges(MediaStreamGraph* aGraph,
133147
TrackID aID,

content/media/encoder/TrackEncoder.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,13 @@ class AudioTrackEncoder : public TrackEncoder
158158
uint32_t aOutputChannels,
159159
AudioDataValue* aOutput);
160160

161+
/**
162+
* De-interleaves the aInput data and stores the result into aOutput.
163+
* No up-mix or down-mix operations inside.
164+
*/
165+
static void DeInterleaveTrackData(AudioDataValue* aInput, int32_t aDuration,
166+
int32_t aChannels, AudioDataValue* aOutput);
167+
161168
protected:
162169
/**
163170
* Number of samples per channel in a pcm buffer. This is also the value of

content/media/encoder/TrackMetadataBase.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ class TrackMetadataBase
1818
enum MetadataKind {
1919
METADATA_OPUS, // Represent the Opus metadata
2020
METADATA_VP8,
21+
METADATA_VORBIS,
2122
METADATA_AVC,
2223
METADATA_AAC,
2324
METADATA_UNKNOWN // Metadata Kind not set

0 commit comments

Comments
 (0)