changeset 147:26334f5fac2b src

since noone objected, I will get serious with that: review dvdnav.h and remove doxygen-style comments
author mroi
date Thu, 03 Apr 2003 12:57:41 +0000
parents 7f242ec838fd
children 5ddb33e104a8
files dvdnav.h
diffstat 1 files changed, 275 insertions(+), 585 deletions(-) [+]
line wrap: on
line diff
--- a/dvdnav.h	Thu Apr 03 12:55:22 2003 +0000
+++ b/dvdnav.h	Thu Apr 03 12:57:41 2003 +0000
@@ -21,10 +21,9 @@
  *
  */
 
-/**
- * \file dvdnav.h
- * The main file you should include if you want to access dvdnav
- * functionality.
+/*
+ * This is the main header file applications should include if they want
+ * to access dvdnav functionality.
  */
 
 #ifndef DVDNAV_H_INCLUDED
@@ -45,173 +44,150 @@
 #include <dvdread/dvd_reader.h>
 #include <dvdread/ifo_types.h> /* For vm_cmd_t */
 
-/**
+
+/*********************************************************************
+ * dvdnav data types                                                 *
+ *********************************************************************/
+
+/*
  * Opaque data-type can be viewed as a 'DVD handle'. You should get
  * a pointer to a dvdnav_t from the dvdnav_open() function.
- * \sa dvdnav_open()
+ * Never call free() on the pointer, you have to give it back with
+ * dvdnav_close().
  */
 typedef struct dvdnav_s dvdnav_t;
 
-/* Status */
+/* Status as reported by most of libdvdnav's functions */
 typedef int dvdnav_status_t;
 
+/*
+ * Unless otherwise stated, all functions return DVDNAV_STATUS_OK if
+ * they succeeded, otherwise DVDNAV_STATUS_ERR is returned and the error may
+ * be obtained by calling dvdnav_err_to_string().
+ */
 #define DVDNAV_STATUS_ERR 0
 #define DVDNAV_STATUS_OK  1
 
-/** 
- * \defgroup init Initialisation & housekeeping functions 
+
+/*********************************************************************
+ * initialisation & housekeeping functions                           *
+ *********************************************************************/
+
+/*
  * These functions allow you to open a DVD device and associate it
  * with a dvdnav_t.
- * 
- *  Unless otherwise stated, all functions return DVDNAV_STATUS_OK if
- * they succeeded, otherwise DVDNAV_STATUS_ERR is returned and the error may
- * be obtained by calling dvdnav_err_to_string().
- *
- * A minimal <tt>libdvdnav</tt> program should always call dvdnav_open()
- * and dvdnav_close().
- *
- * \par Example:
- * \include minimal.c
- * 
- * @{
  */
 
-/**
- * Attempts to open the DVD drive at the specifiec path and pre-cache
- * any CSS-keys that your hacked libdvdread may use.
+/*
+ * Attempts to open the DVD drive at the specified path and pre-cache
+ * the CSS-keys. libdvdread is used to access the DVD, so any source
+ * supported by libdvdread can be given with "path". Currently,
+ * libdvdread can access: DVD drives, DVD image files, DVD file-by-file
+ * copies.
  *
- * \param dest Pointer to a dvdnav_t pointer to fill in.
- * \param path Any libdvdread acceptable path
+ * The resulting dvdnav_t handle will be written to *dest.
  */
-dvdnav_status_t dvdnav_open(dvdnav_t** dest, const char *path); 
+dvdnav_status_t dvdnav_open(dvdnav_t **dest, const char *path);
 
-/**
+/*
  * Closes a dvdnav_t previously opened with dvdnav_open(), freeing any 
  * memory associated with it.
- *
- * \param self dvdnav_t to close.
  */
 dvdnav_status_t dvdnav_close(dvdnav_t *self);
 
-/**
- * Resets the virtual machine and buffers in a previously opened dvdnav
- *
- * \param self dvdnav_t to reset.
+/*
+ * Resets the DVD virtual machine and cache buffers.
  */
 dvdnav_status_t dvdnav_reset(dvdnav_t *self);
 
-/**
+/*
  * Fills a pointer with a value pointing to a string describing
- * the path associated with an open dvdnav_t. It assigns it NULL
+ * the path associated with an open dvdnav_t. It assigns *path to NULL
  * on error.
- *
- * \param self Pointer to dvdnav_t associated with this operation.
- * \param path Pointer to char* to fill in.
  */
-dvdnav_status_t dvdnav_path(dvdnav_t *self, const char** path);
+dvdnav_status_t dvdnav_path(dvdnav_t *self, const char **path);
 
-/**
+/*
  * Returns a human-readable string describing the last error.
- *
- * \param self Pointer to dvdnav_t associated with this operation.
- * \returns A pointer to said string.
  */
 const char* dvdnav_err_to_string(dvdnav_t *self);
 
-/** \@} */
 
-/** 
- * \defgroup char Changing and Reading DVD Player characteristics
- * 
+/*********************************************************************
+ * changing and reading DVD player characteristics                   *
+ *********************************************************************/
+
+/*
  * These functions allow you to manipulate the various global characteristics
  * of the DVD playback engine.
- * 
- * @{
  */
 
-/**
- * Returns the region mask (bit 0 set implies region 1, bit 1 set implies
+/*
+ * Sets the region mask (bit 0 set implies region 1, bit 1 set implies
  * region 2, etc) of the virtual machine. Generally you will only need to set
  * this if you are playing RCE discs which query the virtual machine as to its
  * region setting. 
  *
- * \par Note:
- * This has <b>nothing</b> to do with the region setting of the DVD drive.
- *
- * \param self Pointer to dvdnav_t associated with this operation.
- * \param region Pointer to an int which will receive the region code mask.
+ * This has _nothing_ to do with the region setting of the DVD drive.
  */
-dvdnav_status_t dvdnav_get_region_mask(dvdnav_t *self, int *region);
+dvdnav_status_t dvdnav_set_region_mask(dvdnav_t *self, int region_mask);
 
-/**
- * Sets the region mask of the virtual machine.
- *
- * \param self Pointer to dvdnav_t associated with this operation.
- * \param mask 0x00..0xff -- the desired region mask.
+/*
+ * Returns the region mask (bit 0 set implies region 1, bit 1 set implies
+ * region 2, etc) of the virtual machine.
  *
- * \sa dvdnav_get_region_mask()
+ * This has _nothing_ to do with the region setting of the DVD drive.
  */
-dvdnav_status_t dvdnav_set_region_mask(dvdnav_t *self, int mask);
+dvdnav_status_t dvdnav_get_region_mask(dvdnav_t *self, int *region_mask);
 
-/**
+/*
  * Specify whether read-ahead caching should be used. You may not want this if your
  * decoding engine does its own buffering.
- * 
- * \param self Pointer to dvdnav_t associated with this operation.
- * \param use_readahead 0 - no, 1 - yes
- */
-dvdnav_status_t dvdnav_set_readahead_flag(dvdnav_t *self, int use_readahead);
-
-/**
- * Query whether readahead caching/buffering will be used.
+ *
+ * The default read-ahead cache does not use an additional thread for the reading
+ * (see read_cache.c for a threaded cache, but note that this code is currently
+ * unmaintained). It prebuffers on VOBU level by reading ahead several buffers
+ * on every read request. The speed of this prebuffering has been optimized to
+ * also work on slow DVD drives.
  *
- * \param self Pointer to dvdnav_t associated with this operation.
- * \param flag Pointer to int to recieve flag value.
- *
- * \sa dvdnav_get_readahead_flag()
+ * If in addition you want to prevent memcpy's to improve performance, have a look
+ * at dvdnav_get_next_cache_block().
  */
-dvdnav_status_t dvdnav_get_readahead_flag(dvdnav_t *self, int* flag);
+dvdnav_status_t dvdnav_set_readahead_flag(dvdnav_t *self, int read_ahead_flag);
 
-/**
+/*
+ * Query whether read-ahead caching/buffering will be used.
+ */
+dvdnav_status_t dvdnav_get_readahead_flag(dvdnav_t *self, int *read_ahead_flag);
+
+/*
  * Specify whether the positioning works PGC or PG based.
- * Programs (PGs) on DVDs are similar to Chapters and the program chain (PGC)
+ * Programs (PGs) on DVDs are similar to Chapters and a program chain (PGC)
  * usually covers a whole feature. This affects the behaviour of the
- * functions dvdnav_get_position() and dvdnav_sector_search().
+ * functions dvdnav_get_position() and dvdnav_sector_search(). See there.
  * Default is PG based positioning.
- *
- * \param self Pointer to dvdnav_t associated with this operation.
- * \param pgc 0 - PG based, 1 - PGC based
  */
-dvdnav_status_t dvdnav_set_PGC_positioning_flag(dvdnav_t *self, int pgc);
+dvdnav_status_t dvdnav_set_PGC_positioning_flag(dvdnav_t *self, int pgc_based_flag);
 
-/**
+/*
  * Query whether positioning is PG or PGC based.
- *
- * \param self Pointer to dvdnav_t associated with this operation.
- * \param flag Pointer to int to recieve flag value.
- *
- * \sa dvdnav_set_PGC_positioning_flag()
  */
-dvdnav_status_t dvdnav_get_PGC_positioning_flag(dvdnav_t *self, int *flag);
+dvdnav_status_t dvdnav_get_PGC_positioning_flag(dvdnav_t *self, int *pgc_based_flag);
+
 
-/**
- * @}
+/*********************************************************************
+ * reading data                                                      *
+ *********************************************************************/
+
+/*
+ * These functions are used to poll the playback enginge and actually get data 
+ * off the DVD.
  */
 
-/**
- * \defgroup data Reading Data
- *
- * These functions are used to poll the playback enginge and actually get data 
- * off the DVD.
- *
- * @{
- */
-
-/**
+/*
  * Attempts to get the next block off the DVD and copies it into the buffer 'buf'. 
  * If there is any special actions that may need to be performed, the value
- * pointed to by 'event' gets set 
- * accordingly.
+ * pointed to by 'event' gets set accordingly.
  *
  * If 'event' is DVDNAV_BLOCK_OK then 'buf' is filled with the next block
  * (note that means it has to be at /least/ 2048 bytes big). 'len' is
@@ -220,312 +196,210 @@
  * Otherwise, buf is filled with an appropriate event structure and
  * len is set to the length of that structure.
  *
- * \param self Pointer to dvdnav_t associated with this operation.
- * \param buf Buffer (at least 2048 octets) to fill with next block/event structure.
- * \param event Pointer to int to get event type.
- * \param len Pointer to int to get the number of octets written into buf.
+ * See the dvdnav_events.h header for information on the various events.
  */
 dvdnav_status_t dvdnav_get_next_block(dvdnav_t *self, unsigned char *buf,
 				      int *event, int *len);
 
-/**
+/*
  * This basically does the same as dvdnav_get_next_block. The only difference is
  * that it avoids a memcopy, when the requested block was found in the cache.
  * I such a case (cache hit) this function will return a different pointer than
  * the one handed in, pointing directly into the relevant block in the cache.
- * Those pointer must _never_ be freed but instead returned to the library via
+ * Those pointers must _never_ be freed but instead returned to the library via
  * dvdnav_free_cache_block().
- *
- * \param self Pointer to dvdnav_t associated with this operation.
- * \param buf Buffer (at least 2048 octets) to fill with next block/event structure.
- *            A different buffer might be returned, if the block was found in the internal cache.
- * \param event Pointer to int to get event type.
- * \param len Pointer to int to get the number of octets written into buf.
  */
 dvdnav_status_t dvdnav_get_next_cache_block(dvdnav_t *self, unsigned char **buf,
 					    int *event, int *len);
 
-/**
+/*
  * All buffers which came from the internal cache (when dvdnav_get_next_cache_block()
  * returned a buffer different from the one handed in) have to be freed with this
  * function. Although handing in other buffers not from the cache doesn't cause any harm.
- *
- * \param self Pointer to dvdnav_t associated with this operation.
- * \param buf Buffer received from internal cache.
  */
 dvdnav_status_t dvdnav_free_cache_block(dvdnav_t *self, unsigned char *buf);
 
-/**
- * Get video aspect code.
- *
- * \param self Pointer to dvdnav_t associated with this operation.
- * 
- * \returns Video aspect ratio code, 0 -- 4:3, 2 -- 16:9
- */
-uint8_t dvdnav_get_video_aspect(dvdnav_t *self);
-
-/**
- * Get video scaling permissions.
+/*
+ * If we are currently in a still-frame this function skips it.
  *
- * \param self Pointer to dvdnav_t associated with this operation.
- * 
- * \returns Video scaling permissions, bit0 - deny letterboxing, bit1 - deny pan&scan
- */
-uint8_t dvdnav_get_video_scale_permission(dvdnav_t *self);
-
-/**
- * Return a string describing the title. This is an ID string encoded on the
- * disc byt the author. In many cases this is a descriptive string such as
- * `<tt>THE_MATRIX</tt>' but sometimes is sigularly uninformative such as
- * `<tt>PDVD-011421</tt>'.
- * 
- * \param self Pointer to dvdnav_t associated with this operation.
- * \param title_str Pointer to C-style string to receive a string describing the title. 
- */
-dvdnav_status_t dvdnav_get_title_string(dvdnav_t *self, const char **title_str);
-
-/**
- * @}
- */
-
-/**
- * \defgroup nav Navigation Commands
- *
- * @{
- */
-
-/**
- * Returns the number of titles on the disk.
- * 
- * \param self Pointer to dvdnav_t associated with this operation.
- * \param titles Pointer to int to receive number of titles.
- */
-dvdnav_status_t dvdnav_get_number_of_titles(dvdnav_t *self, int *titles);
-
-/**
- * Returns the number of programs within the current title.
- * 
- * \param self Pointer to dvdnav_t associated with this operation.
- * \param titles int to select title.
- * \param parts Pointer to int to receive number of parts.
- */
-dvdnav_status_t dvdnav_get_number_of_parts(dvdnav_t *self, int title, int *parts);
-
-/**
- * If we are currently in a still-frame this function skips it (or attempts to).
- * This might fail if this still-frame is of infinite duration as most DVD
- * authors wouldn't expect you to be able to do this <tt>:)</tt>
- * 
- * \param self Pointer to dvdnav_t associated with this operation.
+ * See also the DVDNAV_STILL_FRAME event.
  */
 dvdnav_status_t dvdnav_still_skip(dvdnav_t *self);
 
-/**
+/*
  * If we are currently in WAIT state, that is: the application is required to
  * wait for its fifos to become empty, calling this signals libdvdnav that this
  * is achieved and that it can continue.
  *
- * \param self Pointer to dvdnav_t associated with this operation.
+ * See also the DVDNAV_WAIT event.
  */
 dvdnav_status_t dvdnav_wait_skip(dvdnav_t *self);
 
-/**
- * Returns the still time status from the next cell
+/*
+ * Returns the still time from the currently playing cell.
+ * The still time is given in seconds with 0xff meaning an indefinite still.
  *
- * \param self Pointer to dvdnav_t associated with this operation.
+ * This function can be used to detect still frames before they are reached.
+ * Some players might need this to prepare for a frame to be shown for a
+ * longer time than usual.
  */
 uint32_t dvdnav_get_next_still_flag(dvdnav_t *self);
 
-/**
- * Plays a specified title of the DVD.
+/*
+ * Stops playback. The next event obtained with one of the get_next_block
+ * functions will be a DVDNAV_STOP event.
  *
- * \param self Pointer to dvdnav_t associated with this operation.
- * \param title 1..99 -- Title number to play.
+ * It is not required to call this before dvdnav_close().
+ */
+dvdnav_status_t dvdnav_stop(dvdnav_t *self);
+
+
+/*********************************************************************
+ * title/part navigation                                             *
+ *********************************************************************/
+
+/*
+ * Returns the number of titles on the disk.
+ */
+dvdnav_status_t dvdnav_get_number_of_titles(dvdnav_t *self, int *titles);
+
+/*
+ * Returns the number of parts within the given title.
+ */
+dvdnav_status_t dvdnav_get_number_of_parts(dvdnav_t *self, int title, int *parts);
+
+/*
+ * Plays the specified title of the DVD from its beginning (that is: part 1).
  */
 dvdnav_status_t dvdnav_title_play(dvdnav_t *self, int title);
 
-/**
- * Plays the specifiec title, starting from the specified part.
- *
- * \param self Pointer to dvdnav_t associated with this operation.
- * \param title 1..99 -- Title number to play.
- * \param part 1..999 -- Part to start from.
+/*
+ * Plays the specified title, starting from the specified part.
  */
 dvdnav_status_t dvdnav_part_play(dvdnav_t *self, int title, int part);
 
-/**
+/*
  * Play the specified amount of parts of the specified title of
  * the DVD then STOP.
  *
- * \par Note:
  * Currently unimplemented!
- *
- * \param self Pointer to dvdnav_t associated with this operation.
- * \param title 1..99 -- Title number to play.
- * \param part 1..999 -- Part to start from.
- * \param parts_to_play 1..999 -- Number of parts to play.
  */
 dvdnav_status_t dvdnav_part_play_auto_stop(dvdnav_t *self, int title,
 					   int part, int parts_to_play);
 
-/**
- * Play the specified title starting from the specified time
+/*
+ * Play the specified title starting from the specified time.
  *
- * \par Note:
  * Currently unimplemented!
- *
- * \param self Pointer to dvdnav_t associated with this operation.
- * \param title 1..99 -- Title number to play.
- * \param time Timecode to start from (hours, minutes, seconds + frames).
  */
 dvdnav_status_t dvdnav_time_play(dvdnav_t *self, int title,
 				 unsigned long int time);
 
-/**
- * Stops playing the current title (causes a STOP action in
- * dvdnav_get_next_block()).
- * 
- * \param self Pointer to dvdnav_t associated with this operation.
- *
- * \sa dvdnav_get_next_block()
- */
-dvdnav_status_t dvdnav_stop(dvdnav_t *self);
-
-/**
- * Stop playing current title and play the "GoUp"-program chain 
- * (which generally leads to the title menu or a higer-level menu).
- *
- * \param self Pointer to dvdnav_t associated with this operation.
- */
-dvdnav_status_t dvdnav_go_up(dvdnav_t *self);
-
-/**
+/*
  * Stop playing the current position and jump to the specified menu.
  *
- * \param self Pointer to dvdnav_t associated with this operation.
- * \param menu Which menu to call (see DVDMenuID_t).
- *
- * \sa DVDMenuID_t (from <tt>libdvdread</tt>)
+ * See also DVDMenuID_t from libdvdread
  */
 dvdnav_status_t dvdnav_menu_call(dvdnav_t *self, DVDMenuID_t menu);
 
-/**
+/*
  * Return the title number and part currently being played or
  * -1 if in a menu.
- *
- * \param self Pointer to dvdnav_t associated with this operation.
- * \param title Pointer to into which will receive the current title number.
- * \param part Pointer to into which will receive the current part number.
  */
 dvdnav_status_t dvdnav_current_title_info(dvdnav_t *self, int *title,
-			     		  int *part);
-
-/**
- * @}
- */
+					  int *part);
 
-/** 
- * \defgroup search Searching
- *
- * @{
+/*
+ * Return the current position (in blocks) within the current
+ * title and the length (in blocks) of said title.
+ * 
+ * Current implementation is wrong and likely to behave unpredictably!
+ * Use is discouraged!
  */
+dvdnav_status_t dvdnav_get_position_in_title(dvdnav_t *self,
+					     unsigned int *pos,
+					     unsigned int *len);
 
-/**
- * Stop playing the current position and start playback of the title
- * from the specified timecode.
- *
- * \par Note:
- * Currently unimplemented!
+/*
+ * This function is only available for compatibility reasons.
  *
- * \param self Pointer to dvdnav_t associated with this operation.
- * \param time Timecode to start from.
+ * Stop playing the current position and start playback of the current title
+ * from the specified part.
  */
-dvdnav_status_t dvdnav_time_search(dvdnav_t *self, 
-				   unsigned long int time);
+dvdnav_status_t dvdnav_part_search(dvdnav_t *self, int part);
+
 
-/**
+/*********************************************************************
+ * program chain/program navigation                                  *
+ *********************************************************************/
+
+/*
  * Stop playing the current position and start playback from the last
  * VOBU boundary before the given sector. The sector number is not
  * meant to be an absolute physical DVD sector, but a relative sector
  * in the current program. This function cannot leave the current
  * program and will fail, if asked to do so.
- * 
- * from the specified sector offset.
  *
- * \param self Pointer to dvdnav_t associated with this operation.
- * \param offset Sector offset to start from.
- * \param origin Start from here, start or end.
+ * If program chain based positioning is enabled
+ * (see dvdnav_set_PGC_positioning_flag()), this will seek to the relative
+ * sector inside the current program chain.
+ *
+ * 'origin' can be one of SEEK_SET, SEEK_CUR, SEEK_END as defined in
+ * fcntl.h.
  */
 dvdnav_status_t dvdnav_sector_search(dvdnav_t *self, 
 				     unsigned long int offset, int origin);
 
-/**
- * Stop playing the current position and start playback of the current title
- * from the specified part (chapter).
+/*
+ * Stop playing the current position and start playback of the title
+ * from the specified timecode.
  *
- * \param self Pointer to dvdnav_t associated with this operation.
- * \param part 1..999 -- Part to start from.
+ * Currently unimplemented!
  */
-dvdnav_status_t dvdnav_part_search(dvdnav_t *self, int part);
+dvdnav_status_t dvdnav_time_search(dvdnav_t *self, 
+				   unsigned long int time);
 
-/**
+/*
+ * Stop playing current position and play the "GoUp"-program chain.
+ * (which generally leads to the title menu or a higer-level menu).
+ */
+dvdnav_status_t dvdnav_go_up(dvdnav_t *self);
+
+/*
  * Stop playing the current position and start playback at the
  * previous program (if it exists).
- *
- * \param self Pointer to dvdnav_t associated with this operation.
  */
 dvdnav_status_t dvdnav_prev_pg_search(dvdnav_t *self);
 
-/**
+/*
  * Stop playing the current position and start playback at the
  * first program.
- *
- * \param self Pointer to dvdnav_t associated with this operation.
  */
 dvdnav_status_t dvdnav_top_pg_search(dvdnav_t *self);
 
-/**
+/*
  * Stop playing the current position and start playback at the
  * next program (if it exists).
- *
- * \param self Pointer to dvdnav_t associated with this operation.
  */
 dvdnav_status_t dvdnav_next_pg_search(dvdnav_t *self);
 
-/**
+/*
  * Return the current position (in blocks) within the current
  * program and the length (in blocks) of current program.
- * 
- * \param self Pointer to dvdnav_t associated with this operation.
- * \param pos Pointer to unsigned int to get the current position.
- * \param len Pointer to unsinged int to hold the length of the current program.
+ *
+ * If program chain based positioning is enabled
+ * (see dvdnav_set_PGC_positioning_flag()), this will return the
+ * relative position in and the length of the current program chain.
  */
 dvdnav_status_t dvdnav_get_position(dvdnav_t *self, unsigned int *pos,
 				    unsigned int *len);
 
-/**
- * Return the current position (in blocks) within the current
- * title and the length (in blocks) of said title.
- * 
- * \par Note:
- * Current implementation is wrong and likely to behave unpredictably.
- * Use is discouraged.
- *
- * \param self Pointer to dvdnav_t associated with this operation.
- * \param pos Pointer to unsigned int to get the current position.
- * \param len Pointer to unsinged int to hold the length of the current title.
- */
-dvdnav_status_t dvdnav_get_position_in_title(dvdnav_t *self,
-					     unsigned int *pos,
-					     unsigned int *len);
 
-/**
- * @}
- */
+/*********************************************************************
+ * menu highlights                                                   *
+ *********************************************************************/
 
-/**
- * \defgroup highlight Highlights
- *
+/*
  * Most functions related to highlights take a NAV PCI packet as a parameter.
  * While you can get the such a packet from libdvdnav, for players with internal
  * FIFOs, this will result in errors, because due to the FIFO length, libdvdnav will
@@ -533,407 +407,223 @@
  * Therefore, player applications who have a NAV packet available, which is
  * better in sync with the actual playback should always pass this one to these
  * functions.
- *
- * @{
  */
 
-/**
+/*
  * Get the currently highlighted button 
- * number (1..36) or 0 if no button is highlighed.
- *
- * \param self Pointer to dvdnav_t associated with this operation.
- * \param button Pointer to the value to fill in.
+ * number (1..36) or 0 if no button is highlighted.
  */
-dvdnav_status_t dvdnav_get_current_highlight(dvdnav_t *self, int* button);
+dvdnav_status_t dvdnav_get_current_highlight(dvdnav_t *self, int *button);
 
-/**
+/*
  * Returns the Presentation Control Information (PCI) structure associated
  * with the current position.
  *
- * \param self Pointer to dvdnav_t associated with this operation.
- *
- * \sa pci_t (in <tt>libdvdread</tt>)
+ * Read the general notes above.
+ * See also libdvdreads nav_types.h for definition of pci_t.
  */
 pci_t* dvdnav_get_current_nav_pci(dvdnav_t *self);
 
-/**
- * Returns the DSI (data seach information) structure associated
+/*
+ * Returns the DSI (data search information) structure associated
  * with the current position.
  *
- * \param self Pointer to dvdnav_t associated with this operation.
- *
- * \sa pci_t (in <tt>libdvdread</tt>)
+ * Read the general notes above.
+ * See also libdvdreads nav_types.h for definition of dsi_t.
  */
 dsi_t* dvdnav_get_current_nav_dsi(dvdnav_t *self);
 
-/**
+/*
  * Get the area associated with a certain button.
- *
- * \param nav_pci Pointer to the PCI structure you may have got via
- * dvdnav_get_current_nav_pci().
- *
- * \param button Button number to query.
- * \param mode 0..3 -- Button mode to query.
- * \param highlight Pointer to dvdnav_highlight_area_t to fill in.
- *
- * \sa dvdnav_highlight_area_t
  */
-dvdnav_status_t dvdnav_get_highlight_area(pci_t* nav_pci , int32_t button, int32_t mode,
-					  dvdnav_highlight_area_t* highlight);
+dvdnav_status_t dvdnav_get_highlight_area(pci_t *nav_pci , int32_t button, int32_t mode,
+					  dvdnav_highlight_area_t *highlight);
 
-/**
+/*
  * Move button highlight around as suggested by function name (e.g. with arrow keys).
- * 
- * \param self Pointer to dvdnav_t associated with this operation.
  */
 dvdnav_status_t dvdnav_upper_button_select(dvdnav_t *self, pci_t *pci);
-
-/**
- * Move button highlight around as suggested by function name (e.g. with arrow keys).
- * 
- * \param self Pointer to dvdnav_t associated with this operation.
- */
-
 dvdnav_status_t dvdnav_lower_button_select(dvdnav_t *self, pci_t *pci);
-
-/**
- * Move button highlight around as suggested by function name (e.g. with arrow keys).
- * 
- * \param self Pointer to dvdnav_t associated with this operation.
- */
 dvdnav_status_t dvdnav_right_button_select(dvdnav_t *self, pci_t *pci);
-
-/**
- * Move button highlight around as suggested by function name (e.g. with arrow keys).
- * 
- * \param self Pointer to dvdnav_t associated with this operation.
- */
 dvdnav_status_t dvdnav_left_button_select(dvdnav_t *self, pci_t *pci);
 
-/**
- * Activate (press) the currently highlighted button.
- * \param self Pointer to dvdnav_t associated with this operation.
+/*
+ * Activate ("press") the currently highlighted button.
  */
 dvdnav_status_t dvdnav_button_activate(dvdnav_t *self, pci_t *pci);
 
-/**
+/*
  * Highlight a specific button.
- *
- * \param self Pointer to dvdnav_t associated with this operation.
- * \param button 1..39 -- Button number to activate.
  */
 dvdnav_status_t dvdnav_button_select(dvdnav_t *self, pci_t *pci, int button);
 
-/**
- * Activate (press) specified button.
- *
- * \param self Pointer to dvdnav_t associated with this operation.
- * \param button 1..39 -- Button number to activate.
+/*
+ * Activate ("press") specified button.
  */
 dvdnav_status_t dvdnav_button_select_and_activate(dvdnav_t *self, pci_t *pci, int button);
 
-/**
+/*
  * Activate (press) a button and execute specified command.
- *
- * \param self Pointer to dvdnav_t associated with this operation.
- * \param cmd DVD Command to execute.
  */
 dvdnav_status_t dvdnav_button_activate_cmd(dvdnav_t *self, int32_t button, vm_cmd_t *cmd);
 
-/**
- * Select button at specified (image) co-ordinates.
- *
- * \param self Pointer to dvdnav_t associated with this operation.
- * \param x X co-ordinate in image.
- * \param y Y xo-ordinate in image.
+/*
+ * Select button at specified video frame coordinates.
  */
 dvdnav_status_t dvdnav_mouse_select(dvdnav_t *self, pci_t *pci, int x, int y);
 
-/**
- * Activate (press) button at specified co-ordinates.
- * 
- * \param self Pointer to dvdnav_t associated with this operation.
- * \param x X co-ordinate in image.
- * \param y Y xo-ordinate in image.
+/*
+ * Activate ("press") button at specified video frame coordinates.
  */
 dvdnav_status_t dvdnav_mouse_activate(dvdnav_t *self, pci_t *pci, int x, int y);
 
-/**
- * @}
+
+/*********************************************************************
+ * languages                                                         *
+ *********************************************************************/
+
+/* 
+ * The language codes expected by these functions are two character
+ * codes as defined in ISO639.
  */
 
-/** 
- * \defgroup languages Languages
- *
- * @{
- */
-
-/**
+/*
  * Set which menu language we should use.
- *
- * \param self Pointer to dvdnav_t associated with this operation.
- * \param code 2 char ISO639 Language code in a C-style string.
  */
 dvdnav_status_t dvdnav_menu_language_select(dvdnav_t *self,
 					   char *code);
 
-/**
+/*
  * Set which audio language we should use.
- *
- * \param self Pointer to dvdnav_t associated with this operation.
- * \param code 2 char ISO639 Language code in a C-style string.
  */
 dvdnav_status_t dvdnav_audio_language_select(dvdnav_t *self,
 					    char *code);
 
-/**
+/*
  * Set which spu language we should use.
- *
- * \param self Pointer to dvdnav_t associated with this operation.
- * \param code 2 char ISO639 Language code in a C-style string.
  */
 dvdnav_status_t dvdnav_spu_language_select(dvdnav_t *self,
 					  char *code);
 
-/**
- * @}
- */
 
-/** 
- * \defgroup streams Sub-Picture Unit (Subtitles) and Audio Streams 
- *
- * All these commands manipulate the audio/subtitle stream numbers that the
- * player engine thinks is playing. Note that all the streams are still returned
- * multiplexed by dvdnav_get_next_block(). You should try to make sure that the
- * MPEG demuxer and the player engine both have the same thoughts on what stream the
- * user is currently listening to.
- *
- * \sa dvdnav_get_next_block()
- * 
- * @{
- */
+/*********************************************************************
+ * obtaining stream attributes                                       *
+ *********************************************************************/
 
-/**
- * Set a specific PHYSICAL MPEG stream.
- *
- * \param self Pointer to dvdnav_t associated with this operation.
- * \param audio 0..7 -- Stream number.
- */
-dvdnav_status_t dvdnav_physical_audio_stream_change(dvdnav_t *self,
-						    int audio);
-
-/**
- * Set a specific logical audio stream.
- *
- * \param self Pointer to dvdnav_t associated with this operation.
- * \param audio 0..7 -- Stream number.
- */
-dvdnav_status_t dvdnav_logical_audio_stream_change(dvdnav_t *self,
-						   int audio);
-
-/**
- * Set the int pointed to to the current PHYSICAL audio
- * stream.
- *
- * \param self Pointer to dvdnav_t associated with this operation.
- * \param audio Pointer to int which will receive value.
- */
-dvdnav_status_t dvdnav_get_physical_audio_stream(dvdnav_t *self, int* audio);
-
-/**
- * Set the int pointed to to the current LOGICAL audio
- * stream.
- *
- * \param self Pointer to dvdnav_t associated with this operation.
- * \param audio Pointer to int which will receive value.
+/*
+ * Return a string describing the title of the DVD.
+ * This is an ID string encoded on the disc by the author. In many cases
+ * this is a descriptive string such as `THE_MATRIX' but sometimes is sigularly
+ * uninformative such as `PDVD-011421'. Some DVD authors even forget to set this,
+ * so you may also read the default of the authoring software they used, like
+ * `DVDVolume'.
  */
-dvdnav_status_t dvdnav_get_logical_audio_stream(dvdnav_t *self, int* audio);
+dvdnav_status_t dvdnav_get_title_string(dvdnav_t *self, const char **title_str);
 
-/**
- * Set a specific PHYSICAL MPEG SPU stream and whether it should be
- * displayed.
- *
- * \param self Pointer to dvdnav_t associated with this operation.
- * \param stream 0..31 or 63 (dummy) -- Stram number.
- * \param display: 0..1 -- Is this actually being displayed?
+/*
+ * Get video aspect code.
+ * The aspect code does only change on VTS boundaries.
+ * See the DVDNAV_VTS_CHANGE event.
+ * 
+ * 0 -- 4:3, 2 -- 16:9
  */
-dvdnav_status_t dvdnav_physical_spu_stream_change(dvdnav_t *self,
-					  	  int stream, int display);
-
-/**
- * Set a specific LOGICAL SPU stream and whether it should be
- * displayed.
- *
- * \param self Pointer to dvdnav_t associated with this operation.
- * \param stream 0..31 or 63 (dummy) -- Stram number.
- * \param display: 0..1 -- Is this actually being displayed?
- */
-dvdnav_status_t dvdnav_logical_spu_stream_change(dvdnav_t *self,
-						 int stream, int display);
+uint8_t dvdnav_get_video_aspect(dvdnav_t *self);
 
-/**
- * Set the ints pointed to to the current PHYSICAL SPU
- * stream & display flag.
+/*
+ * Get video scaling permissions.
+ * The scaling permission does only change on VTS boundaries.
+ * See the DVDNAV_VTS_CHANGE event.
  *
- * \param self Pointer to dvdnav_t associated with this operation.
- * \param stream Pointer which will receive value.
- * \param display Pointer which will receive value.
+ * bit0 set = deny letterboxing, bit1 set = deny pan&scan
  */
-dvdnav_status_t dvdnav_get_physical_spu_stream(dvdnav_t *self,
-					       int* stream, int* display);
+uint8_t dvdnav_get_video_scale_permission(dvdnav_t *self);
 
-/**
- * Set the ints pointed to to the current LOGICAL SPU
- * stream & display flag.
- *
- * \param self Pointer to dvdnav_t associated with this operation.
- * \param stream Pointer which will receive value.
- * \param display Pointer which will receive value.
- */
-dvdnav_status_t dvdnav_get_logical_spu_stream(dvdnav_t *self,
-					      int* stream, int* disply);
-
-/**
- * Converts a *logical* audio stream id into country code 
- * (returns <tt>0xffff</tt> if no such stream).
- * 
- * \param self Pointer to dvdnav_t associated with this operation.
- * \param stream Stream number
+/*
+ * Converts a *logical* audio stream id into language code
+ * (returns 0xffff if no such stream).
  */
 uint16_t dvdnav_audio_stream_to_lang(dvdnav_t *self, uint8_t stream);
 
-/**
+/*
  * Converts a *logical* subpicture stream id into country code 
- * (returns <tt>0xffff</tt> if no such stream).
- * 
- * \param self Pointer to dvdnav_t associated with this operation.
- * \param stream Stream number
+ * (returns 0xffff if no such stream).
  */
 uint16_t dvdnav_spu_stream_to_lang(dvdnav_t *self, uint8_t stream);
 
-/**
- * Converts a *physical* audio stream id into a logical stream number 
- * 
- * \param self Pointer to dvdnav_t associated with this operation.
- * \param audio_num Stream number
+/*
+ * Converts a *physical* (MPEG) audio stream id into a logical stream number.
  */
 int8_t dvdnav_get_audio_logical_stream(dvdnav_t *self, uint8_t audio_num);
 
-/**
- * Converts a *physical* subpicture stream id into a logical stream number 
- * 
- * \param self Pointer to dvdnav_t associated with this operation.
- * \param subp_num Stream number
+/*
+ * Converts a *physical* (MPEG) subpicture stream id into a logical stream number.
  */
 int8_t dvdnav_get_spu_logical_stream(dvdnav_t *self, uint8_t subp_num);
 
-/**
+/*
  * Get active audio stream.
- * 
- * \param self Pointer to dvdnav_t associated with this operation.
  */
 int8_t dvdnav_get_active_audio_stream(dvdnav_t *self);
 
-/**
+/*
  * Get active spu stream.
- * 
- * \param self Pointer to dvdnav_t associated with this operation.
  */
 int8_t dvdnav_get_active_spu_stream(dvdnav_t *self);
 
-/**
- * @}
- */
+
+/*********************************************************************
+ * multiple angles                                                   *
+ *********************************************************************/
 
-/** 
- * \defgroup angles Multiple angles
+/*
+ * The libdvdnav library abstracts away the difference between seamless and
+ * non-seamless angles. From the point of view of the programmer you just set the
+ * angle number and all is well in the world. You will always see only the
+ * selected angle coming from the get_next_block functions.
  *
- * The <tt>libdvdnav</tt> library abstracts away the difference between seamless and
- * non-seamless angles. From the point of view of the programmer you just set the
- * angle number and all is well in the world. 
- *
- * \par Note:
+ * Note:
  * It is quite possible that some tremendously strange DVD feature might change the
  * angle number from under you. Generally you should always view the results from
  * dvdnav_get_angle_info() as definitive only up to the next time you call
  * dvdnav_get_next_block().
- *
- * @{
  */
 
-/**
+/*
  * Sets the current angle. If you try to follow a non existant angle
  * the call fails.
- *
- * \param self Pointer to dvdnav_t associated with this operation.
- * \param angle 1..9 -- Currentl angle to follow.
  */
 dvdnav_status_t dvdnav_angle_change(dvdnav_t *self, int angle);
 
-/**
+/*
  * Returns the current angle and number of angles present.
- *
- * \param self Pointer to dvdnav_t associated with this operation.
- * \param current_angle Pointer to int which will get the current angle.
- * \param number_of_angles Pointer to int which will get the number of angles.
  */
-dvdnav_status_t dvdnav_get_angle_info(dvdnav_t *self, int* current_angle,
+dvdnav_status_t dvdnav_get_angle_info(dvdnav_t *self, int *current_angle,
 				      int *number_of_angles);
 
-/**
- * @}
- */
+/*********************************************************************
+ * domain queries                                                    *
+ *********************************************************************/
 
-/** 
- * \defgroup domain Domain Queries
- *
- * The following functions can be used to query whether we are in
- * particular domains or not.
- *
- * @{
- */
-
-/**
- * Are we in the First Play domain. (Menu) 
- * \param self Pointer to dvdnav_t associated with this operation.
- * \returns -1 on failure, 1 if condition is true, 0 if condition is false
+/*
+ * Are we in the First Play domain?
  */
 int8_t dvdnav_is_domain_fp(dvdnav_t *self);
 
-/**
- * Are we in the Video management Menu domain. (Menu) 
- * \param self Pointer to dvdnav_t associated with this operation.
- * \returns -1 on failure, 1 if condition is true, 0 if condition is false
+/*
+ * Are we in the Video management Menu domain?
  */
 int8_t dvdnav_is_domain_vmgm(dvdnav_t *self);
 
-/**
- * Are we in the Video Title Menu domain (Menu) 
- * \param self Pointer to dvdnav_t associated with this operation.
- * \returns -1 on failure, 1 if condition is true, 0 if condition is false
+/*
+ * Are we in the Video Title Menu domain?
  */
 int8_t dvdnav_is_domain_vtsm(dvdnav_t *self);
 
-/**
- * Are we in the Video Title domain (playing movie)?
- * \param self Pointer to dvdnav_t associated with this operation.
- * \returns -1 on failure, 1 if condition is true, 0 if condition is false
+/*
+ * Are we in the Video Title Set domain?
  */
 int8_t dvdnav_is_domain_vts(dvdnav_t *self);
 
-/**
- * @}
- */
-
-/*
- * The following info appears on the front page of the reference manual. It is
- * included here to keep it with the main dvdnav source files. The copyright notice
- * refers to the comments _only_. All machine-readable source code is covered by
- * the copyright notice at the top of this file.
- *
- * Oh, and the official language of the documentation is English -- 
- * English English (as in the English spoken in England) not US English.
- */
 
 #ifdef __cplusplus
 }