CopyBlocker

One reason an export re-encodes rather than copying its streams across.

A copy is near-instant and lossless, so an export that misses it is worth explaining. Every member names one thing the caller can drop to get the copy back, and ExportPlan.copyBlockedBy lists the ones that applied.

None of these is an Adjustment: the caller asked for an output and got exactly that output, so nothing was changed behind their back and ExportSpec.strict has nothing to refuse.

Entries

Link copied to clipboard

More than one track, whose audio has to be mixed.

Link copied to clipboard

More than one clip, which has to be joined.

Link copied to clipboard

Composition-level effects, which have to be rendered.

Link copied to clipboard

Track-level effects, which have to be rendered.

Link copied to clipboard

Clip-level effects, which have to be rendered.

Link copied to clipboard

ExportSpec.frameRate names a rate, which only an encoder can deliver.

Link copied to clipboard

ExportSpec.videoCodec names a codec rather than leaving it to the source's own. Neither VideoCodec.Auto nor VideoCodec.MatchSource blocks a copy.

Link copied to clipboard

ExportSpec.audioCodec names a codec rather than leaving it to the source's own.

Link copied to clipboard

ExportSpec.heightPx names a height below the source's own, which only an encoder can deliver. A height at or above it keeps the source's frame and blocks nothing.

Link copied to clipboard

ExportSpec.bitrate names a rate or ExportSpec.quality names a tier, which only an encoder can deliver.

Link copied to clipboard

Geometry moves the frame away from the source's, whether from a target height or an effect.

Link copied to clipboard
Link copied to clipboard

The track is held off until after the composition starts, so the output opens on a gap.

Link copied to clipboard

The track contributes only audio or only video, so a stream the source carries is dropped.

Link copied to clipboard

The clip's audio level is not unity, so the samples have to be scaled.

Link copied to clipboard

The track's audio level is not unity, so the samples have to be scaled.

Link copied to clipboard

The composition's audio level is not unity, so the samples have to be scaled. That is dev.jordond.filmstrip.edit.AudioSpec.Mute, or a volume other than one.

Link copied to clipboard

The clip's speed is not one, so its frames have to be retimed and its audio stretched.

Link copied to clipboard

The clip is trimmed and no sync sample sits within Clip.snapWithin of the cut, so reaching it means decoding.

Link copied to clipboard

The clip ends before its source does and the source's video packets carry no presentation times, the way an AVI with B-frames lists them, so a copy has no frame it knows to stop on. Running the clip to the source's end keeps the copy.

Link copied to clipboard

The muxer will not take this source's streams without re-encoding them.

Link copied to clipboard

The source's pixels are not square and the backend cannot copy such a source as it is. On Android, media3's Transformer re-encodes it to square pixels or writes it across unchecked, so a copy never runs there.

Link copied to clipboard

The source's codecs have no VideoCodec or AudioCodec member to name them by, so a copy could not report what it wrote.

Link copied to clipboard

This backend has no stream copy at all.

Link copied to clipboard

The grade has to come down to SDR, which only a decode and re-encode can do.

Properties

Link copied to clipboard

Returns a representation of an immutable list of all enum entries, in the order they're declared.

Link copied to clipboard
expect val name: String
Link copied to clipboard
expect val ordinal: Int

Functions

Link copied to clipboard

Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)

Link copied to clipboard

Returns an array containing the constants of this enum type, in the order they're declared.