Original commit message from CVS:
* gst/adder/gstadder.c: (forward_event_func),
(gst_adder_src_event), (gst_adder_collected),
(gst_adder_change_state):
* gst/adder/gstadder.h:
Remember the start position asked in the incoming seeks, so we can
output GST_EVENT_NEW_SEGMENT with a correct position value (instead
of assuming it will always be 0).
Original commit message from CVS:
* ext/ogg/gstoggdemux.c: (gst_ogg_demux_init),
(gst_ogg_demux_finalize), (gst_ogg_demux_perform_seek),
(gst_ogg_demux_loop):
Send the GST_EVENT_NEW_SEGMENT from the streaming thread.
Original commit message from CVS:
* gst/ffmpegcolorspace/gstffmpegcolorspace.c:
(gst_ffmpegcsp_get_unit_size):
Return FALSE instead of returning a random false unit
size when the format isn't known/supported (even if
this shouldn't happen under normal circumstances).
Original commit message from CVS:
Patch by: Tim-Philipp Müller <tim at centricular dot net>
* ext/gnomevfs/gstgnomevfssrc.c: (gst_gnome_vfs_src_create),
(gst_gnome_vfs_src_start):
Try harder to get the size from a uri by using _info_uri() when
_info_from_handle() does not give us enough info.
Also follow symlinks when getting the size.
Partially Fixes#332864.
Original commit message from CVS:
Patch by: Viktor Peters <viktor dot peters at gmail dot com>
* ext/alsa/gstalsamixer.c: (gst_alsa_mixer_ensure_track_list),
(gst_alsa_mixer_update), (gst_alsa_mixer_get_volume),
(gst_alsa_mixer_set_volume), (gst_alsa_mixer_set_mute),
(gst_alsa_mixer_set_record):
* ext/alsa/gstalsamixertrack.c:
(gst_alsa_mixer_track_update_alsa_capabilities),
(alsa_track_has_cap), (gst_alsa_mixer_track_new),
(gst_alsa_mixer_track_update):
* ext/alsa/gstalsamixertrack.h:
Improve and fix mixer track handling, in particular better handling
of alsa's pvolume/pswitch/cvolume/cswitch capabilities; create separate
track objects for tracks that have both capture and playback volume
(and label them differently as well so they're not mistakenly
assumed to be duplicates); classify mixer tracks that only affect
the audible volume of something (rather than the capture volume)
as playback tracks. Redefine/fix meaning of RECORD and MUTE flags
for capture tracks to correspond to alsa-pswitch alsa-cswitch
(following the meaning documented in the mixer interface header
file); add support for alsa's exclusive cswitch groups; update/sync
state/flags better if mixer settings are changed by another
application. Fixes#336075.
Original commit message from CVS:
* ext/vorbis/vorbisenc.c: (gst_vorbis_enc_push_buffer),
(gst_vorbis_enc_buffer_check_discontinuous),
(gst_vorbis_enc_chain):
Ignore explicit DISCONT marked on buffers (which is often spurious,
particularly when using multiple segments), in favour of solely
using the timestamps/durations.
Original commit message from CVS:
* gst/audiorate/gstaudiorate.c: (gst_audio_rate_chain):
Don't rely on incoming buffers offset anymore, since it is completely
broken when using multiple segments.
Instead convert the incoming buffers timestamp to running time, and
then convert that value to the offsets.
Also inform GstSegment of the last outputted stop position, which is
needed if we received several segments with an unknown stop value.
Original commit message from CVS:
* gst/audiorate/gstaudiorate.c: (gst_audio_rate_sink_event),
(gst_audio_rate_chain):
Make the metadata of the buffer writable before changing its
flags.
Original commit message from CVS:
* gst/audiorate/gstaudiorate.c: (gst_audio_rate_reset),
(gst_audio_rate_setcaps), (gst_audio_rate_init),
(gst_audio_rate_sink_event), (gst_audio_rate_src_event),
(gst_audio_rate_chain), (gst_audio_rate_change_state):
Fix audiorate some more.
Reset and resync counters on flush and READY.
Handle the DISCONT flag correctly.
Use GstSegment to track position.
Fail when not negotiated.
Original commit message from CVS:
* gst/tcp/gstmultifdsink.c: (gst_multi_fd_sink_render):
Small cleanups.
If a buffer is received with no caps, make the buffer metadata
writable and set the caps, making sure that we don't screw up the
refcounts.
Original commit message from CVS:
* gst/gdp/gstgdppay.c: (gst_gdp_pay_reset),
(gst_gdp_pay_reset_streamheader), (gst_gdp_pay_chain):
Fix memory leaks and misleading debug messages, add a couple of
comments.
* gst/tcp/gstmultifdsink.c: (gst_multi_fd_sink_get_stats),
(gst_multi_fd_sink_render):
Do not use gst_buffer_make_writable() in a basesink render method,
as it may incorrectly unref the buffer. Instead, use convoluted
dance to avoid copying the buffer except when we need to.
Original commit message from CVS:
* ext/vorbis/vorbisenc.c:
(gst_vorbis_enc_buffer_check_discontinuous):
Allow very small discontinuities in the timestamps. These we can't
do anything useful with anyway (because vorbis's timestamps have
only sample granularity), and are commonly produced by elements with
minor bugs. Allow up to 1/2 a sample out.
Fixes#351742.
Original commit message from CVS:
* tests/examples/seek/seek.c: (seek_cb), (start_seek), (stop_seek),
(play_scrub_toggle_cb), (main):
Add a checkbox to enable play scrubbing. Makes it possible to disable
normal scrubbing.
Original commit message from CVS:
* ext/ogg/gstogmparse.c: (gst_ogm_audio_parse_base_init),
(gst_ogm_video_parse_base_init), (gst_ogm_text_parse_base_init),
(gst_ogm_parse_class_init), (gst_ogm_parse_dispose),
(gst_ogm_parse_init), (gst_ogm_audio_parse_init),
(gst_ogm_video_parse_init), (gst_ogm_text_parse_init),
(gst_ogm_parse_stream_header), (gst_ogm_parse_comment_packet),
(gst_ogm_text_parse_strip_trailing_zeroes),
(gst_ogm_parse_data_packet), (gst_ogm_parse_chain),
(gst_ogm_parse_sink_event), (gst_ogm_parse_change_state):
Refactor ogm parse, do better input checking, misc. clean-ups.
Cache incoming events and push them once the source pad has
been created. Don't pass unterminated strings to sscanf().
Strip trailing zeroes from subtitle text output, since they
are not valid UTF-8. Don't push vorbiscomment packets on
the subtitle text pad. Output perfect streams if possible.
Original commit message from CVS:
* tests/check/libs/cddabasesrc.c: (GST_START_TEST):
Waits for tasks to settle down so that we clean up correctly for
valgrind.
Original commit message from CVS:
* tests/check/libs/tag.c: (GST_START_TEST), (taglists_are_equal):
Unit test fixes: \377 is more likely to fit into 8 bits than \777;
actually return return value in taglists_are_equal.
Original commit message from CVS:
* ext/ogg/gstogmparse.c: (gst_ogm_parse_chain):
Fix crash due to broken bitstream parsing on x86-64: can't make
any assumptions about sizeof(struct) due to alignment/packing
differences on different architectures. Fixes#351790.
Original commit message from CVS:
* gst-libs/gst/riff/riff-read.c: (gst_riff_read_chunk),
(gst_riff_parse_chunk), (gst_riff_parse_file_header),
(gst_riff_parse_strh), (gst_riff_parse_strf_vids),
(gst_riff_parse_strf_auds), (gst_riff_parse_strf_iavs),
(gst_riff_parse_info):
Protect public functions against bad input.
Do some cleanups.
Fix documentation.
Original commit message from CVS:
* gst-libs/gst/riff/riff-ids.h:
* gst-libs/gst/riff/riff-media.c: (gst_riff_create_audio_caps):
Add voxware audio IDs (even if we can't play it) (#351795).
Original commit message from CVS:
* gst-libs/gst/riff/riff-media.c:
(gst_riff_create_video_template_caps),
(gst_riff_create_audio_template_caps),
(gst_riff_create_iavs_template_caps):
Const-ify some arrays and use G_N_ELEMENTS instead
of wasting oodles of RAM on terminator bits.
Original commit message from CVS:
* gst-libs/gst/tag/gstvorbistag.c:
(gst_tag_list_to_vorbiscomment_buffer):
* tests/check/libs/tag.c: (GST_START_TEST):
And the same for _to_vorbiscomment_buffer(): allow
id_data_len == 0 for speex.
Original commit message from CVS:
* gst-libs/gst/tag/gstvorbistag.c:
(gst_tag_list_from_vorbiscomment_buffer):
Allow id_data_len == 0 (needed for vorbis comments in Speex files).
Also add some checks to make sure we don't memcmp() beyond the end of
vorbiscomment buffer if the ID to check for is larger than the buffer.
* tests/check/libs/tag.c: (GST_START_TEST):
Some more tests for gst_tag_list_from_vorbiscomment_buffer().
Original commit message from CVS:
* ext/vorbis/vorbisenc.c: (gst_vorbis_enc_metadata_set1),
(gst_vorbis_enc_set_metadata):
Use vorbis comment utility functions from libgsttag
instead of re-inventing the wheel (partially fixes#347091).
Original commit message from CVS:
* tests/check/elements/audioconvert.c: (GST_START_TEST):
Fix leaks. Wait for state transitions that might happen ASYNC, as well
as some that won't.
Original commit message from CVS:
* docs/libs/Makefile.am:
* docs/libs/gst-plugins-base-libs-sections.txt:
* docs/libs/gst-plugins-base-libs.types:
Don't try to GObject scan the netbuffer as it's not a GObject.
Fixes#351308.
* gst-libs/gst/netbuffer/gstnetbuffer.c:
* gst-libs/gst/netbuffer/gstnetbuffer.h:
Document GstNetBuffer.
Original commit message from CVS:
* gst/audioconvert/gstaudioconvert.c:
(gst_audio_convert_get_unit_size), (set_structure_widths):
Lower debug, use g_assert in _get_unit_size
* gst/audioresample/gstaudioresample.c:
(audioresample_get_unit_size):
* gst/ffmpegcolorspace/gstffmpegcolorspace.c:
(gst_ffmpegcsp_get_unit_size):
* gst/videoscale/gstvideoscale.c: (gst_video_scale_get_unit_size):
use g_assert in _get_unit_size
Original commit message from CVS:
* gst-libs/gst/tag/gstvorbistag.c: (gst_vorbis_tag_add),
(gst_tag_to_vorbis_comments):
Serialise unknown vorbis comments into GST_TAG_EXTENDED_COMMENT
tags and deserialise them properly as well (#351768).
Add some more gtk-doc blurbs and also some g_return_if_fail().
* tests/check/libs/tag.c: (GST_START_TEST),
(back_to_vorbis_comments), (taglists_are_equal), (tag_suite):
More tests.
Original commit message from CVS:
* gst-libs/gst/cdda/gstcddabasesrc.c: (gst_cdda_base_src_create):
Make buffer durations add up (duration should be next_ts-ts for
perfect streams). Fixes CD ripping to Ogg/Vorbis with vorbisenc
from CVS.
* tests/check/libs/cddabasesrc.c: (gst_cd_foo_src_close),
(test_buffer_timestamps), (cddabasesrc_suite):
Add unit test for the above.
* tests/check/Makefile.am:
Don't know why cddabasesrc test was in VALGRIND_TO_FIX, remove
to see what happens.
Original commit message from CVS:
* ext/alsa/gstalsasink.c: (gst_alsasink_set_property),
(gst_alsasink_open):
* ext/alsa/gstalsasrc.c: (gst_alsasrc_set_property),
(gst_alsasrc_open):
Avoid setting and using a NULL device name.
Print more info when we fail to open a device.
Original commit message from CVS:
* gst/playback/gstplaybin.c: (gst_play_bin_class_init),
(gst_play_bin_set_property), (gst_play_bin_get_property),
(value_list_append_structure_list),
(gst_play_bin_handle_redirect_message),
(gst_play_bin_handle_message):
Add "connection-speed" property; re-order redirect messages with
multiple redirect locations depending on the minimum bitrate if
that information is available and a connection speed is set
(#350399).
Original commit message from CVS:
* ext/ogg/gstoggdemux.c: (gst_ogg_demux_submit_buffer),
(gst_ogg_demux_get_next_page), (gst_ogg_demux_perform_seek),
(gst_ogg_demux_read_chain), (gst_ogg_demux_loop):
Add some more debug info.
Don't crash when a seek failed.
Actually return the result of the seek instead of TRUE.
Ignore multiple BOS pages with the same serial so that we don't create
the same stream multiple times.
Post an error when we fail to do the initial seek.
Original commit message from CVS:
* ext/alsa/gstalsa.c: (gst_alsa_detect_rates),
(gst_alsa_detect_channels), (gst_alsa_probe_supported_formats):
Small code cleanup.
* ext/alsa/gstalsamixer.c: (gst_alsa_mixer_open),
(gst_alsa_mixer_new):
Remove hack that always set the device to hw:0*.
Properly find the card name for whatever device was configured.
Do some better debugging.
Fixes#350784.
* ext/alsa/gstalsamixerelement.c:
(gst_alsa_mixer_element_set_property),
(gst_alsa_mixer_element_change_state):
Cleanups.
Handle setting of a NULL device name better.
Original commit message from CVS:
2006-08-11 Andy Wingo <wingo@pobox.com>
* gst/tcp/gsttcp.h: For now, always disable deprecation here --
fixes the build.
Original commit message from CVS:
* ext/ogg/gstoggdemux.c: (gst_ogg_pad_src_query):
Implement SEEKING query in its most basic form, so that we can
at least check if we're seekable or not (#350655).
Original commit message from CVS:
* gst/typefind/gsttypefindfunctions.c: (mpeg2_sys_type_find):
The checks here are not even close to anything that would
justify MAXIMUM probability, lowering to POSSIBLE until someone
fixes the checks (case at hand: quicktime redirection files
might start with 00 00 01 XX and pass the checks here just
fine, see #350399).
Original commit message from CVS:
Patch by: Sjoerd Simons <sjoerd at luon net>
* gst/typefind/gsttypefindfunctions.c: (multipart_type_find):
Better detection for multipart/x-mixed-replace: accept leading
whitespaces before the boundary marker as well (as our very own
multipartmux used to produce) (#349068).
Original commit message from CVS:
* tests/check/Makefile.am:
* tests/check/libs/.cvsignore:
* tests/check/libs/audio.c: (structure_contains_channel_positions),
(fixed_caps_have_channel_positions), (GST_START_TEST),
(audio_suite), (main):
Add a few tests for the channel position stuff in libgstaudio.
Original commit message from CVS:
* ext/alsa/gstalsa.c: (caps_add_channel_configuration),
(gst_alsa_detect_channels):
* ext/alsa/gstalsasink.c:
Add support for cards that (only) do more than 8 channels,
like the Delta 44 (#345188).
* gst-libs/gst/audio/multichannel.c:
(gst_audio_check_channel_positions):
* gst-libs/gst/audio/multichannel.h:
API: add GST_AUDIO_CHANNEL_POSITION_NONE, which stands for an
unspecified channel position and cannot be combined with any
of the other audio channel positions; adjust position layout
checks accordingly (#345188).
Original commit message from CVS:
Patch by: Jens Granseuer <jensgr at gmx net>
* gst/typefind/gsttypefindfunctions.c: (plugin_init):
Add typefinder for Interplay's MVE format (#348973).
Original commit message from CVS:
* gst/audioresample/gstaudioresample.c: (audioresample_stop),
(audioresample_set_caps):
Don't leak references to the incoming caps. Clean them up when
stopping.
* gst/videoscale/gstvideoscale.c: (gst_video_scale_class_init),
(gst_video_scale_finalize):
Don't leak our temporary pixel buffer.
* tests/check/Makefile.am:
* tests/check/pipelines/simple-launch-lines.c: (run_pipeline),
(GST_START_TEST), (simple_launch_lines_suite):
Fix leaks and re-enable the test for valgrind checking.
Original commit message from CVS:
Patch by: Sjoerd Simons <sjoerd at luon net>
* gst/typefind/gsttypefindfunctions.c: (multipart_type_find),
(plugin_init):
Add typefind function for multipart/x-mixed-replace (#348916).
Original commit message from CVS:
* gst/adder/gstadder.c: (gst_adder_setcaps),
(gst_adder_query_duration):
Fix leak in duration query.
Reflow some docs and notes.
Original commit message from CVS:
* tests/check/pipelines/vorbisenc.c: (GST_START_TEST),
(vorbisenc_suite):
Enable Andy's extra vorbisenc test, now that it passes. Also fix one
aspect of it.
Original commit message from CVS:
* ext/vorbis/vorbisenc.c: (gst_vorbis_enc_generate_sink_caps),
(gst_vorbis_enc_sink_getcaps), (gst_vorbis_enc_buffer_from_packet),
(gst_vorbis_enc_push_buffer),
(gst_vorbis_enc_buffer_check_discontinuous),
(gst_vorbis_enc_chain), (gst_vorbis_enc_change_state):
* ext/vorbis/vorbisenc.h:
Handle discontinuities in the input vorbis stream correctly,
so that the output is properly timestamped (and has good granulepos
values). Needs some oggmux fixes too.
Original commit message from CVS:
patch by: Kai Vehmanen <kv2004 eca cx>
* gst-libs/gst/rtp/gstbasertpdepayload.c:
(gst_base_rtp_depayload_chain),
(gst_base_rtp_depayload_handle_sink_event),
(gst_base_rtp_depayload_change_state):
Don't send multiple newsegments with different formats.
Fixes#348677.
Original commit message from CVS:
* ext/ogg/gstoggdemux.c: (gst_ogg_pad_internal_chain),
(gst_ogg_demux_do_seek), (gst_ogg_demux_read_chain):
Make seeking in ogg more accurate again by doing the more correct
granuletime to stream time conversion.
Original commit message from CVS:
* gst/tcp/gstmultifdsink.c: (gst_multi_fd_sink_add_full),
(gst_multi_fd_sink_new_client):
debug a little more understandably
do not use goto as a substitute for break, especially if
break is also being used
Original commit message from CVS:
* gst-libs/gst/audio/gstbaseaudiosink.c:
(gst_base_audio_sink_render):
Don't try to align a sample to an unknown value.
Original commit message from CVS:
* gst-libs/gst/audio/gstbaseaudiosink.c:
(gst_base_audio_sink_provide_clock), (gst_base_audio_sink_render):
When the audio clock is slaved to another clock, never try to align
samples but trust the rate interpolation algorithm.
Original commit message from CVS:
* ext/alsa/gstalsasink.c: (set_hwparams), (gst_alsasink_prepare):
Don't try to calculate silence samples, base class does this much
better now.
* gst-libs/gst/audio/gstringbuffer.c: (build_linear_format),
(gst_ring_buffer_debug_spec_caps), (gst_ring_buffer_parse_caps),
(gst_ring_buffer_acquire):
Calculate silence samples correctly.
* gst-libs/gst/audio/gstringbuffer.h:
Add _CAST macro.
Original commit message from CVS:
* gst/typefind/gsttypefindfunctions.c: (xml_check_first_element):
Limit search for the first markup tag to the first few kB of
the file. If we don't find one there, it's highly unlikely that
this is an XML(-ish) file.
Original commit message from CVS:
2006-07-21 Andy Wingo <wingo@pobox.com>
* tests/check/pipelines/theoraenc.c (test_discontinuity): Similar
test to the one in vorbisenc. Also commented out.
Original commit message from CVS:
2006-07-21 Andy Wingo <wingo@pobox.com>
* tests/check/pipelines/vorbisenc.c:
(test_discontinuity): New test, commented out until Mike lands
some elite vorbisenc patches.
Original commit message from CVS:
2006-07-21 Andy Wingo <wingo@pobox.com>
* tests/check/pipelines/vorbisenc.c:
* tests/check/pipelines/theoraenc.c: Port to bufferstraw.
Bufferstraw was actually factored out of these tests. Now we share
code yay.
Original commit message from CVS:
* gst-libs/gst/audio/gstaudiosink.c: (audioringbuffer_thread_func),
(gst_audioringbuffer_finalize), (gst_audioringbuffer_acquire),
(gst_audioringbuffer_release), (gst_audioringbuffer_stop):
Fix leak.
Avoid type casting when we can.
* gst-libs/gst/audio/gstringbuffer.c: (gst_ring_buffer_dispose):
Fix mem leak.
Original commit message from CVS:
* ext/alsa/gstalsamixerelement.c:
(gst_alsa_mixer_element_change_state):
Make state change fail if the specified device can't be opened
for some reason.
Original commit message from CVS:
* gst/playback/test.c: (gen_video_element), (gen_audio_element),
(cb_newpad), (main):
Example of a small audio/video player using decodebin.
Original commit message from CVS:
* gst-libs/gst/rtp/gstbasertpdepayload.c:
(gst_base_rtp_depayload_chain),
(gst_base_rtp_depayload_change_state):
Don't assert when not negotiated but post a meaningfull
error message. Fixes#347918.
* gst-libs/gst/rtp/gstbasertppayload.c:
Add comment about better default MTU size.
* gst-libs/gst/rtp/gstrtpbuffer.c: (gst_rtp_buffer_validate_data):
Small cleanups, start docs.
Original commit message from CVS:
Patch by: Martin Szulecki
* sys/v4l/gstv4lelement.c: (gst_v4lelement_get_property):
If "device-name" is requested and the device is not
open, try to temporarily open it to obtain this
information (#342494).
Original commit message from CVS:
* gst-libs/gst/tag/gstid3tag.c:
Add TSSE <=> GST_TAG_ENCODER mapping (see #347898).
* gst-libs/gst/tag/gsttageditingprivate.h:
* gst-libs/gst/tag/gstvorbistag.c:
Some more random const-ifications.
Original commit message from CVS:
* gst-libs/gst/riff/riff-ids.h:
* gst-libs/gst/riff/riff-media.c:
(gst_riff_create_video_template_caps):
Add more FOURCCs (sort list to make stuff easier to find),
add comment what those 16 bytes in struct _gst_riff_strh according to
one avi-dumper are
Original commit message from CVS:
* gst-libs/gst/audio/multichannel.c:
(gst_audio_check_channel_positions),
(gst_audio_fixate_channel_positions):
Const-ify two arrays.
Original commit message from CVS:
* ext/alsa/gstalsa.c: (caps_add_channel_configuration):
Fix typo, so that alsasink also advertises 8 channels
if that's supported (tags: can, worms, open, alsa, ph34r).
Original commit message from CVS:
* ext/ogg/gstoggdemux.c: (gst_ogg_pad_internal_chain),
(gst_ogg_pad_submit_packet), (gst_ogg_demux_read_chain):
*sigh*, when is the compiler going to warn when the comments
are out-of-sync with the code.. Refix case of busted theora
headers with 0 granule pos.
Original commit message from CVS:
* gst-libs/gst/rtp/gstbasertpdepayload.c:
(gst_base_rtp_depayload_wait),
(gst_base_rtp_depayload_change_state),
(gst_base_rtp_depayload_set_property),
(gst_base_rtp_depayload_get_property):
Fix 99% cpu load by waiting for absolute times on the
clock. Fixes#347300.
Original commit message from CVS:
2006-07-14 Andy Wingo <wingo@pobox.com>
* ext/theora/gsttheoraparse.h:
* ext/theora/theoraparse.c (theora_parse_drain_event_queue)
(theora_parse_push_headers, theora_parse_clear_queue)
(theora_parse_drain_queue_prematurely, )
(theora_parse_sink_event, theora_parse_change_state): Queue events
until we initialized our state, like in vorbisparse.
Original commit message from CVS:
2006-07-14 Andy Wingo <wingo@pobox.com>
* ext/vorbis/vorbisparse.h:
* ext/vorbis/vorbisparse.c (vorbis_parse_drain_event_queue)
(vorbis_parse_push_headers, vorbis_parse_clear_queue)
(vorbis_parse_drain_queue_prematurely, )
(vorbis_parse_sink_event, vorbis_parse_change_state): Queue events
until we have initialized our state. Fixes seeking after an
initial pad block.
2006-07-14 Andy Wingo <wingo@pobox.com>
Patch by: Iain * <iaingnome@gmail.com>
* ext/ogg/gstoggdemux.c (gst_ogg_demux_finalize): Fix memleak.
Original commit message from CVS:
* tests/check/pipelines/vorbisenc.c: (stop_pipeline):
Move a g_cond_signal to earlier to avoid sometimes deadlocking
(commonly happens when running this test under valgrind) when trying
to remove the buffer probe.
Original commit message from CVS:
* sys/ximage/ximagesink.c: (gst_ximagesink_ximage_new),
(gst_ximagesink_change_state):
* sys/xvimage/xvimagesink.c: (gst_xvimagesink_xvimage_new),
(gst_xvimagesink_change_state):
Implement a locking order to ensure we always take the object lock
before the x_lock and never vice-versa.