Reinhard Tartler [Fri, 4 Jan 2013 23:20:33 +0000 (00:20 +0100)]
finalize changelog for version 9
Anton Khirnov [Fri, 4 Jan 2013 16:53:47 +0000 (17:53 +0100)]
Prepare for 9 Release.
Anton Khirnov [Thu, 3 Jan 2013 17:02:59 +0000 (18:02 +0100)]
Update release notes for the 9 release.
Add a paragraph about MSVC and mention 24-bit FLAC encoding.
Anton Khirnov [Thu, 3 Jan 2013 11:01:15 +0000 (12:01 +0100)]
avprobe: also output dar/par if only defined in stream
Based on a patch by Jan Gerber <j@v2v.cc>
Peter Meerwald [Thu, 3 Jan 2013 13:17:29 +0000 (14:17 +0100)]
lavr: fix missing " in header documentation
Signed-off-by: Peter Meerwald <p.meerwald@bct-electronic.com>
Signed-off-by: Martin Storsjö <martin@martin.st>
Martin Storsjö [Tue, 1 Jan 2013 22:25:37 +0000 (00:25 +0200)]
aviobuf: Discard old buffered, previously read data in ffio_read_partial
This makes RTP custom IO work properly with pure read-only
AVIOContexts as well.
Signed-off-by: Martin Storsjö <martin@martin.st>
Martin Storsjö [Tue, 1 Jan 2013 21:41:29 +0000 (23:41 +0200)]
rtsp: Add support for depacketizing RTP data via custom IO
To use this, set sdpflags=custom_io to the sdp demuxer. During
the avformat_open_input call, the SDP is read from the AVFormatContext
AVIOContext (ctx->pb) - after the avformat_open_input call,
during the av_read_frame() calls, the same ctx->pb is used for reading
packets (and sending back RTCP RR packets).
Normally, one would use this with a read-only AVIOContext for the
SDP during the avformat_open_input call, then close that one and
replace it with a read-write one for the packets after the
avformat_open_input call has returned.
This allows using the RTP depacketizers as "pure" demuxers, without
having them tied to the libavformat network IO.
Signed-off-by: Martin Storsjö <martin@martin.st>
Martin Storsjö [Wed, 17 Oct 2012 13:05:24 +0000 (16:05 +0300)]
rtpdec: Move the URLContext used for RTCP RR out from the context, to a parameter
Signed-off-by: Martin Storsjö <martin@martin.st>
Martin Storsjö [Tue, 1 Jan 2013 20:57:36 +0000 (22:57 +0200)]
aviobuf: Partial support for reading in read/write contexts
So far, aviocontexts are used either in pure-read or pure-write
mode - full read/write mode doesn't work well (and implementing it
is a much larger, not totally trivial change).
This patch allows using avio_read and ffio_read_partial on
read/write aviocontexts, where the read operations are passed
through directly unbuffered, while writes are buffered as usual.
This is enough to support the operations needed by packet based
data transfer like in udp/rtp, where aviocontext is the only
public API for hooking up custom IO.
Signed-off-by: Martin Storsjö <martin@martin.st>
Clément Bœsch [Wed, 2 Jan 2013 05:05:55 +0000 (06:05 +0100)]
build: Avoid detecting bogus components named 'x'
The function find_things() in configure is confused by component
registration calls as part of multiline macros defining combined
component registration. Coalesce those macros into one line to
work around the issue.
Signed-off-by: Diego Biurrun <diego@biurrun.de>
Signed-off-by: Martin Storsjö <martin@martin.st>
Johan Andersson [Tue, 1 Jan 2013 17:56:55 +0000 (18:56 +0100)]
cmdutils: update copyright year to 2013
Signed-off-by: Martin Storsjö <martin@martin.st>
Janne Grunau [Sat, 29 Dec 2012 18:30:12 +0000 (19:30 +0100)]
h264: check SPS entries directly to detect pixel format changes
Comparing AVCodecContext.pix_fmt against the get_pixel_format() return
value has the side effect of calling the get_format() callback on each
slice. Users of the callback will probably handle hardware accelerator
initialization in the callback.
Reinhard Tartler [Wed, 2 Jan 2013 19:16:39 +0000 (20:16 +0100)]
forgotten changelogs for 9_beta2
Martin Storsjö [Sun, 30 Dec 2012 22:46:14 +0000 (00:46 +0200)]
rtmp: Add support for limelight authentication
Limelight is a not too uncommon CDN. The authentication scheme is
pretty similar to the adobe authentication, but is even closer to
normal http digest authentication (but not close enough to warrant
sharing code) than the adobe version.
Signed-off-by: Martin Storsjö <martin@martin.st>
Martin Storsjö [Sun, 30 Dec 2012 20:39:38 +0000 (22:39 +0200)]
rtmp: Add support for adobe authentication
This is mostly used to authenticate the client when publishing.
Tested with wowza and akamai.
Some but not all servers support resending a new connect invoke
within the same connection, so always reconnect for sending a new
connection attempt. This matches what other applications do as well.
The authentication scheme is structurally pretty similar to http
digest authentication, but uses base64 instead of hex strings.
Signed-off-by: Martin Storsjö <martin@martin.st>
Martin Storsjö [Sun, 30 Dec 2012 20:38:23 +0000 (22:38 +0200)]
rtmp: Add a function for writing AMF strings based on two substrings
This avoids having to concatenate them into one buffer before writing
them as AMF.
Signed-off-by: Martin Storsjö <martin@martin.st>
Martin Storsjö [Sun, 30 Dec 2012 16:53:35 +0000 (18:53 +0200)]
rtmp: Return a proper error code in handle_invoke_error
Signed-off-by: Martin Storsjö <martin@martin.st>
Hendrik Leppkes [Tue, 30 Oct 2012 21:57:37 +0000 (22:57 +0100)]
configure: suppress -fPIC in msvc builds
MSVC doesn't understand the option, and emits a warning on every
call to cl.exe.
Signed-off-by: Martin Storsjö <martin@martin.st>
Diego Biurrun [Sun, 30 Dec 2012 23:29:36 +0000 (00:29 +0100)]
Drop unnecessary 'l' length modifier when printfing double values.
%f denotes a double argument and 'l' does nothing in this case
according to the C spec.
Diego Biurrun [Sun, 23 Dec 2012 17:43:19 +0000 (18:43 +0100)]
truemotion2: Sanitize tm2_read_header()
Also give a variable a more sensible name.
Anton Khirnov [Fri, 28 Dec 2012 05:20:01 +0000 (06:20 +0100)]
FATE: add cavs test
Anton Khirnov [Fri, 28 Dec 2012 05:19:12 +0000 (06:19 +0100)]
cavsdec: export picture type in the output frame
Anton Khirnov [Thu, 27 Dec 2012 16:12:10 +0000 (17:12 +0100)]
cavs: deMpegEncContextize
It does not use any of the mpegvideo infrastructure, just a few fields
from the context.
Fixes a segfault with the emu edge flag, since emu edge buffer is now
allocated as a part of the frame buffer allocation and cavs calls
ff_get_buffer() directly, it does not use mpegvideo buffer management.
Fixes a memleak of the last frame.
Anton Khirnov [Thu, 27 Dec 2012 13:16:25 +0000 (14:16 +0100)]
cavs: cosmetics, reformat top part
Anton Khirnov [Thu, 27 Dec 2012 12:57:56 +0000 (13:57 +0100)]
cavsdec: cosmetics, reformat
Diego Biurrun [Fri, 28 Dec 2012 18:06:04 +0000 (19:06 +0100)]
libavcodec/utils: Add braces to shut up gcc warnings
libavcodec/utils.c:1050:5: warning: missing braces around initializer [-Wmissing-braces]
libavcodec/utils.c:1314:5: warning: missing braces around initializer [-Wmissing-braces]
Luca Barbato [Sat, 29 Dec 2012 17:05:49 +0000 (18:05 +0100)]
snow: use VideoDSPContext
It was left over from the initial conversion.
Luca Barbato [Sat, 29 Dec 2012 11:31:01 +0000 (12:31 +0100)]
hlsenc: make segment number unsigned
It will overflow if somebody keeps streaming for a time long enough.
Kanglin [Sat, 29 Dec 2012 11:09:17 +0000 (12:09 +0100)]
hlsenc: make EXT-X-MEDIA-SEQUENCE always increase
Luca Barbato [Sat, 29 Dec 2012 10:46:01 +0000 (11:46 +0100)]
hlsenc: do not add timestamps in different timebases
start_time is in stream timebase units while end_time is
in AV_TIME_BASE ones.
Kanglin [Sat, 29 Dec 2012 10:44:33 +0000 (11:44 +0100)]
hlsenc: use the correct AV_TIME_BASE macro
recording_time is in AV_TIME_BASE units.
Luca Barbato [Tue, 25 Dec 2012 09:05:42 +0000 (10:05 +0100)]
hlsenc: keep the playlist to the correct number of items
Consider the corner case with a list size larger than the wrap
number.
Luca Barbato [Tue, 25 Dec 2012 08:14:59 +0000 (09:14 +0100)]
hlsenc: use the segment filename in the playlist entry
Avoid calling av_get_frame_filename twice, once to generate the
segment filename and once to generate the playlist.
Luca Barbato [Tue, 25 Dec 2012 07:59:38 +0000 (08:59 +0100)]
hlsenc: check append_entry return value
Luca Barbato [Sun, 23 Dec 2012 23:08:35 +0000 (00:08 +0100)]
hlsenc: use the basename to generate the list entries
The segment path is desumed from the playlist path, recording a
relative path in the playlist while serving the file could lead
to misleading results.
Luca Barbato [Sun, 23 Dec 2012 20:25:24 +0000 (21:25 +0100)]
avstring: add av_basename and av_dirname
Thread safe version of the common basename and dirname.
Diego Biurrun [Tue, 25 Dec 2012 14:29:39 +0000 (15:29 +0100)]
cosmetics: Prettyprint codec/format/filter registration files
Diego Biurrun [Sun, 23 Dec 2012 18:06:35 +0000 (19:06 +0100)]
avfilter: Refactor unconditional filter registration
Diego Biurrun [Thu, 29 Nov 2012 09:34:54 +0000 (10:34 +0100)]
build: Add rtpenc_chain extra config option
Also fixes linking in various configs with only individual parts enabled
because the RTP muxer chaining code depends on the general RTP code,
which is now accounted for.
Diego Biurrun [Sat, 10 Nov 2012 13:47:52 +0000 (14:47 +0100)]
configure: Add --disable-all command line option
This option disables all programs, libraries and other parts of Libav
that get built as part of the compilation process.
Janne Grunau [Tue, 25 Dec 2012 23:24:21 +0000 (00:24 +0100)]
mpegvideo: initialize videodsp with correct pixel depth
Fixes decoding of 9/10 bit per pixel h264 videos as reported in
https://bugzilla.libav.org/show_bug.cgi?id=404 .
Anton Khirnov [Fri, 16 Nov 2012 17:42:16 +0000 (18:42 +0100)]
wnv1: cosmetics, reformat
Anton Khirnov [Fri, 16 Nov 2012 05:40:14 +0000 (06:40 +0100)]
xan: remove a trivially true if().
This function used to be shared with the xxan decoder, but that is not
true anymore.
Anton Khirnov [Thu, 15 Nov 2012 13:24:51 +0000 (14:24 +0100)]
ansi: do not depend on get_buffer() initializing the frame.
The background changes from 128 (used by the default/cmdutils
get_buffer()) to 0. This looks more correct.
Anton Khirnov [Thu, 15 Nov 2012 19:42:22 +0000 (20:42 +0100)]
zerocodec: remove an unused variable.
Anton Khirnov [Thu, 15 Nov 2012 17:24:29 +0000 (18:24 +0100)]
zmbv: remove some pointless comments and empty lines
Anton Khirnov [Thu, 15 Nov 2012 21:03:00 +0000 (22:03 +0100)]
yop: simplify/sanitize the decoding loop
Do not overwrite linesize set by get_buffer().
The last frame in the FATE test is not decoded anymore, since the file
is cut and a part of it is missing.
Anton Khirnov [Thu, 15 Nov 2012 09:38:38 +0000 (10:38 +0100)]
c93: set palette_has_changed.
Anton Khirnov [Thu, 15 Nov 2012 08:23:55 +0000 (09:23 +0100)]
bmp: cosmetics, reformat
Martin Storsjö [Sun, 23 Dec 2012 19:34:06 +0000 (21:34 +0200)]
hlsenc: Don't duplicate a string constant
Signed-off-by: Martin Storsjö <martin@martin.st>
Stefano Sabatini [Thu, 20 Dec 2012 23:27:00 +0000 (00:27 +0100)]
hlsenc: Allocate enough space for the pattern string
If s->filename doesn't contain any period/filename extension to strip
away, the buffer will be too small to fit both strings. This isn't
any buffer overflow since the concatenation uses av_strlcat with
the right buffer size.
Signed-off-by: Martin Storsjö <martin@martin.st>
Martin Storsjö [Sun, 23 Dec 2012 15:10:04 +0000 (17:10 +0200)]
lavc: Correct the description of pkt_dts
The description as updated in
6e5c44b0f made it sound like it is
handled exactly like the pts, which it is not. Clarify that it
is the packet that triggered returning the frame instead of just
the last avpacket (in case of frame threading, it won't be the
dts of the last packet).
Signed-off-by: Martin Storsjö <martin@martin.st>
Diego Biurrun [Tue, 18 Dec 2012 14:04:48 +0000 (15:04 +0100)]
avfilter: Compile FIFO filters unconditionally
Building libavfilter without that functionality makes little sense.
Diego Biurrun [Sun, 23 Dec 2012 17:10:05 +0000 (18:10 +0100)]
Return proper error code after av_log_ask_for_sample()
Diego Biurrun [Thu, 20 Dec 2012 21:40:39 +0000 (22:40 +0100)]
configure: cosmetics: Separate hwaccel dependencies from decoders/encoders
Also move mpegvideo_select statement to the correct position.
Luca Barbato [Sat, 22 Dec 2012 16:58:24 +0000 (17:58 +0100)]
oggdec: check memory allocation
Luca Barbato [Fri, 21 Dec 2012 18:12:41 +0000 (19:12 +0100)]
oggdec: K&R cosmetic formatting
Luca Barbato [Fri, 21 Dec 2012 11:05:46 +0000 (12:05 +0100)]
hlsenc: correctly report target duration
Anton Khirnov [Wed, 14 Nov 2012 07:56:04 +0000 (08:56 +0100)]
8bps: cosmetics
Remove some pointless comments and empty lines.
Anton Khirnov [Wed, 14 Nov 2012 08:09:43 +0000 (09:09 +0100)]
aasc: cosmetics, reformat
Anton Khirnov [Wed, 14 Nov 2012 13:28:36 +0000 (14:28 +0100)]
ansi: remove an extra return
Anton Khirnov [Wed, 14 Nov 2012 13:49:44 +0000 (14:49 +0100)]
asvdec: cosmetics, reformat
Anton Khirnov [Wed, 14 Nov 2012 14:10:24 +0000 (15:10 +0100)]
aura: cosmetics, reformat
Anton Khirnov [Tue, 13 Nov 2012 21:10:54 +0000 (22:10 +0100)]
4xm: don't rely on get_buffer() initializing the frame.
Anton Khirnov [Thu, 6 Dec 2012 13:06:46 +0000 (14:06 +0100)]
huffyuv: split encoder and decoder into separate files.
Anton Khirnov [Fri, 21 Dec 2012 20:52:34 +0000 (21:52 +0100)]
lavc: make pkt_{p,d}ts doxy less confusing
Anton Khirnov [Fri, 21 Dec 2012 20:50:50 +0000 (21:50 +0100)]
lavc: rewrite and extend AVFrame doxy
Justin Ruggles [Thu, 8 Nov 2012 23:35:49 +0000 (18:35 -0500)]
opt: avoid segfault in av_opt_next() if the class does not have an option list
CC: libav-stable@libav.org
Justin Ruggles [Fri, 10 Feb 2012 22:51:11 +0000 (17:51 -0500)]
ttadec: fix last frame handling when seeking
Using a frame count, as is done currently, does not work at all with
seeking. Instead, when the number of samples in the final frame has
been decoded, we check if only the 32-bit CRC is remaining. If so, we
assume that it is the final frame.
There is no longer a need to keep total_frames in TTAContext.
Justin Ruggles [Sat, 22 Dec 2012 06:21:09 +0000 (01:21 -0500)]
alacdec: do not be too strict about the extradata size
Sometimes the extradata has duplicate atoms, but that shouldn't prevent
decoding. Just ensure that it is at least 36 bytes as a sanity check.
CC: libav-stable@libav.org
Justin Ruggles [Sun, 16 Dec 2012 16:02:39 +0000 (11:02 -0500)]
flac: only set channel layout if not previously set or on channel count change
Fixes Bug 402
Reinhard Tartler [Fri, 21 Dec 2012 14:16:33 +0000 (15:16 +0100)]
prepare 9_beta3 release
Martin Storsjö [Tue, 11 Dec 2012 13:12:31 +0000 (15:12 +0200)]
rtpdec_vp8: Don't return known-broken packets
This is built on the assumption that the first partition of each
VP8 packet is essential for decoding any later packet - if this
partition is broken/missed, the arithmetic coder gets out of sync
and decoding the bitstream in further packet ends up with total
garbage. If packets of a frame are lost, make sure the first
partition is intact (return only this part of the packet, nothing
else), otherwise stop returning data until the next keyframe is
received.
Alternatively, one would simply not return any packets at all
until the next keyframe, if packet loss is detected.
Signed-off-by: Martin Storsjö <martin@martin.st>
Martin Storsjö [Mon, 10 Dec 2012 12:38:32 +0000 (14:38 +0200)]
rtpdec: Pass the sequence number to depacketizers
This allows depacketizers to figure out if packets have been lost.
Signed-off-by: Martin Storsjö <martin@martin.st>
Diego Biurrun [Tue, 18 Dec 2012 14:08:56 +0000 (15:08 +0100)]
configure: Make avconv depend on null, anull and resample filters
Building avconv without that functionality makes little sense.
Diego Biurrun [Thu, 20 Dec 2012 19:44:39 +0000 (20:44 +0100)]
build: avfilter: Remove duplicate compilation entry for vf_scale
vf_scale should not be unconditionally compiled even if disabled.
Diego Biurrun [Wed, 19 Dec 2012 17:48:21 +0000 (18:48 +0100)]
miscellaneous typo fixes
Luca Barbato [Thu, 20 Dec 2012 13:07:23 +0000 (14:07 +0100)]
lavc: add missing files for arm
Across the many retouches those did not make the main commit.
Ronald S. Bultje [Sat, 15 Dec 2012 17:46:02 +0000 (09:46 -0800)]
lavc: introduce VideoDSPContext
Move some functions from dsputil. The idea is that videodsp contains
functions that are useful for a large and varied set of video decoders.
Currently, it contains emulated_edge_mc() and prefetch().
Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
Martin Storsjö [Thu, 20 Dec 2012 11:53:27 +0000 (13:53 +0200)]
rtp: Don't read priv_data unless it is allocated
This makes all users of rtpenc_chain (rtsp muxer, sapenc, mov
rtp hinting) work again, broken since
8034130e0.
Signed-off-by: Martin Storsjö <martin@martin.st>
Björn Axelsson [Thu, 13 Dec 2012 13:48:25 +0000 (14:48 +0100)]
flvenc: Check whether seeking back to the header succeeded
The FLV muxer tries to update the header in write_trailer, which is
impossible if writing to a pipe or network stream. Don't write header
data if seeking to the header fails.
Signed-off-by: Martin Storsjö <martin@martin.st>
Jernej Virag [Mon, 17 Dec 2012 09:04:15 +0000 (10:04 +0100)]
sapenc: Pass the title on to the chained muxers
This makes sure it ends up in the SDP, providing a proper session name
in the SAP announcements.
Signed-off-by: Martin Storsjö <martin@martin.st>
Justin Ruggles [Wed, 31 Oct 2012 19:40:12 +0000 (15:40 -0400)]
lavr: add option for dithering during sample format conversion to s16
Anton Khirnov [Thu, 13 Dec 2012 16:53:31 +0000 (17:53 +0100)]
mpeg12: do not decode extradata more than once.
Fixes CVE-2012-2803.
CC: libav-stable@libav.org
Anton Khirnov [Wed, 19 Dec 2012 20:53:22 +0000 (21:53 +0100)]
cmdutils: pass number of groups to split_commandline().
This makes the code simpler and avoids mixing designated and
non-designated initializers in a potentially unsafe way in avconv.
Janne Grunau [Wed, 19 Dec 2012 09:31:12 +0000 (10:31 +0100)]
mov: handle h263 and flv1 for codec_tag 'H','2','6','3'
The sample in https://bugzilla.libav.org/show_bug.cgi?id=393 and
samples/F4V/H263_NM_f.mp4 both have codec_tag H263 for different
codecs. H263 is apparently used by Flash Media Server for Sorensen
Spark videos.
Patch based on commit
5442083b1c541dd166b3adf39131259fc846a62b by
Carl Eugen Hoyos. Fixes bug 393.
Victor Lopez [Wed, 19 Dec 2012 08:12:24 +0000 (09:12 +0100)]
h264: fix sps parsing for SVC and CAVLC 4:4:4 Intra profiles
Fixes bug 396.
CC: libav-stable@libav.org
Janne Grunau [Tue, 18 Dec 2012 21:57:58 +0000 (22:57 +0100)]
mpegvideo: increase edge_emu_buffer size for VC1
The VC1 decoder uses edge_emu_buffer simultaneously for luma and chroma
and needs more space. That was not a problem before
f1d8763a02b5fce
since the size for edge_emu_buffer was always calculated with 2 byte per
pixel since the linesize was not known.
Fixes occasionally fate errors in vc1_sa10143.
Ronald S. Bultje [Wed, 19 Dec 2012 01:02:31 +0000 (17:02 -0800)]
lavc: merge latest x86inc.asm fixes with x264
Unbreak NASM support.
Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
Janne Grunau [Tue, 18 Dec 2012 19:11:28 +0000 (20:11 +0100)]
avcodec: bump minor for adaptive h264 frame-mt
Also adds forgotten Changelog entry.
Anton Khirnov [Sat, 15 Dec 2012 10:45:59 +0000 (11:45 +0100)]
avconv: pass the actually selected decoder to filter_codec_opts().
Anton Khirnov [Fri, 8 Jun 2012 19:35:16 +0000 (21:35 +0200)]
avconv: use new options parser.
Anton Khirnov [Mon, 11 Jun 2012 08:18:51 +0000 (10:18 +0200)]
cmdutils: don't log an error in opt_default().
It results in spurious errors when using the new preparser.
Anton Khirnov [Sun, 10 Jun 2012 18:46:30 +0000 (20:46 +0200)]
cmdutils: add a commandline pre-parser.
It splits the commandline into a more convenient internal representation
for further parsing.
This will allow e.g.
- processing global options first independently of their location on the
commandline, eliminating ugly hacks for processing e.g. cpuflags
first
- better options validation and error reporting. It is now possible for
the parser to know that it's applying an input option to an output
file or vice versa and act accordingly.
Anton Khirnov [Sun, 10 Jun 2012 15:57:52 +0000 (17:57 +0200)]
cmdutils: split parse_option().
Separate the code that searches for the option to use and the code that
actually writes it. The writing code will be reused by the new options
parser.
Anton Khirnov [Thu, 7 Jun 2012 19:52:07 +0000 (21:52 +0200)]
cmdutils: add a macro to simplify grow_array() calls.
Janne Grunau [Thu, 6 Sep 2012 11:30:08 +0000 (13:30 +0200)]
h264: support frame parameter changes during frame-mt
Fixes CVE-2012-2782.
Janne Grunau [Sun, 25 Nov 2012 21:42:07 +0000 (22:42 +0100)]
mpegvideo: allocate scratch buffers after linesize is known
Since we can't know which stride a custom get_buffer() implementation is
going to use we have to allocate this scratch buffers after the linesize
is known. It was pretty safe for 8 bit per pixel pixel formats since we
always allocated memory for up to 16 bits per pixel. It broke hoever
with cmdutis.c's alloc_buffer() and high pixel bit depth since it
allocated larger edges than mpegvideo expected.
Fixes fuzzed sample nasa-8s2.ts_s244342.
Michael Niedermayer [Sun, 18 Nov 2012 17:46:05 +0000 (18:46 +0100)]
ff_h264_direct_ref_list_init: fix B slice check.
Fixes null pointer dereference.
Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
Janne Grunau [Mon, 17 Dec 2012 20:36:05 +0000 (21:36 +0100)]
h264: increase dist_scale_factor for up to 32 references
Compute dist_scale_factor_field only for MBAFF since that is the only
case in which it is used.