Mercurial > pt1.oyama
diff libdlna-0.2.3/src/dlna.h @ 129:4f6d9621ee00
add multi session streaming & add depending librarys.
- libupnp-1.6.6
- libdlna-0.2.3
author | Naoya OYAMA <naoya.oyama@gmail.com> |
---|---|
date | Sun, 10 Oct 2010 15:33:18 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libdlna-0.2.3/src/dlna.h Sun Oct 10 15:33:18 2010 +0900 @@ -0,0 +1,296 @@ +/* + * libdlna: reference DLNA standards implementation. + * Copyright (C) 2007 Benjamin Zores <ben@geexbox.org> + * + * This file is part of libdlna. + * + * libdlna is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * libdlna is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with libdlna; if not, write to the Free Software + * Foundation, Inc, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef _DLNA_H_ +#define _DLNA_H_ + +/** + * @file dlna.h + * external api header. + */ + +#ifdef __cplusplus +extern "C" { +#if 0 /* avoid EMACS indent */ +} +#endif /* 0 */ +#endif /* __cplusplus */ + +#define DLNA_STRINGIFY(s) DLNA_TOSTRING(s) +#define DLNA_TOSTRING(s) #s + +#define LIBDLNA_VERSION_INT ((0<<16)+(2<<8)+3) +#define LIBDLNA_VERSION 0.2.3 +#define LIBDLNA_BUILD LIBDLNA_VERSION_INT + +#define LIBDLNA_IDENT "DLNA " DLNA_STRINGIFY(LIBDLNA_VERSION) + +typedef enum { + DLNA_PROTOCOL_INFO_TYPE_UNKNOWN, + DLNA_PROTOCOL_INFO_TYPE_HTTP, + DLNA_PROTOCOL_INFO_TYPE_RTP, + DLNA_PROTOCOL_INFO_TYPE_ANY +} dlna_protocol_info_type_t; + +/* DLNA.ORG_PS: play speed parameter (integer) + * 0 invalid play speed + * 1 normal play speed + */ +typedef enum { + DLNA_ORG_PLAY_SPEED_INVALID = 0, + DLNA_ORG_PLAY_SPEED_NORMAL = 1, +} dlna_org_play_speed_t; + +/* DLNA.ORG_CI: conversion indicator parameter (integer) + * 0 not transcoded + * 1 transcoded + */ +typedef enum { + DLNA_ORG_CONVERSION_NONE = 0, + DLNA_ORG_CONVERSION_TRANSCODED = 1, +} dlna_org_conversion_t; + +/* DLNA.ORG_OP: operations parameter (string) + * "00" (or "0") neither time seek range nor range supported + * "01" range supported + * "10" time seek range supported + * "11" both time seek range and range supported + */ +typedef enum { + DLNA_ORG_OPERATION_NONE = 0x00, + DLNA_ORG_OPERATION_RANGE = 0x01, + DLNA_ORG_OPERATION_TIMESEEK = 0x10, +} dlna_org_operation_t; + +/* DLNA.ORG_FLAGS, padded with 24 trailing 0s + * 80000000 31 senderPaced + * 40000000 30 lsopTimeBasedSeekSupported + * 20000000 29 lsopByteBasedSeekSupported + * 10000000 28 playcontainerSupported + * 8000000 27 s0IncreasingSupported + * 4000000 26 sNIncreasingSupported + * 2000000 25 rtspPauseSupported + * 1000000 24 streamingTransferModeSupported + * 800000 23 interactiveTransferModeSupported + * 400000 22 backgroundTransferModeSupported + * 200000 21 connectionStallingSupported + * 100000 20 dlnaVersion15Supported + * + * Example: (1 << 24) | (1 << 22) | (1 << 21) | (1 << 20) + * DLNA.ORG_FLAGS=01700000[000000000000000000000000] // [] show padding + */ +typedef enum { + DLNA_ORG_FLAG_SENDER_PACED = (1 << 31), + DLNA_ORG_FLAG_TIME_BASED_SEEK = (1 << 30), + DLNA_ORG_FLAG_BYTE_BASED_SEEK = (1 << 29), + DLNA_ORG_FLAG_PLAY_CONTAINER = (1 << 28), + DLNA_ORG_FLAG_S0_INCREASE = (1 << 27), + DLNA_ORG_FLAG_SN_INCREASE = (1 << 26), + DLNA_ORG_FLAG_RTSP_PAUSE = (1 << 25), + DLNA_ORG_FLAG_STREAMING_TRANSFER_MODE = (1 << 24), + DLNA_ORG_FLAG_INTERACTIVE_TRANSFERT_MODE = (1 << 23), + DLNA_ORG_FLAG_BACKGROUND_TRANSFERT_MODE = (1 << 22), + DLNA_ORG_FLAG_CONNECTION_STALL = (1 << 21), + DLNA_ORG_FLAG_DLNA_V15 = (1 << 20), +} dlna_org_flags_t; + +typedef enum { + DLNA_CLASS_UNKNOWN, + DLNA_CLASS_IMAGE, + DLNA_CLASS_AUDIO, + DLNA_CLASS_AV, + DLNA_CLASS_COLLECTION +} dlna_media_class_t; + +typedef enum { + /* Image Class */ + DLNA_PROFILE_IMAGE_JPEG, + DLNA_PROFILE_IMAGE_PNG, + /* Audio Class */ + DLNA_PROFILE_AUDIO_AC3, + DLNA_PROFILE_AUDIO_AMR, + DLNA_PROFILE_AUDIO_ATRAC3, + DLNA_PROFILE_AUDIO_LPCM, + DLNA_PROFILE_AUDIO_MP3, + DLNA_PROFILE_AUDIO_MPEG4, + DLNA_PROFILE_AUDIO_WMA, + /* AV Class */ + DLNA_PROFILE_AV_MPEG1, + DLNA_PROFILE_AV_MPEG2, + DLNA_PROFILE_AV_MPEG4_PART2, + DLNA_PROFILE_AV_MPEG4_PART10, /* a.k.a. MPEG-4 AVC */ + DLNA_PROFILE_AV_WMV9 +} dlna_media_profile_t; + +/** + * DLNA profile. + * This specifies the DLNA profile one file/stream is compatible with. + */ +typedef struct dlna_profile_s { + /* Profile ID, part of DLNA.ORG_PN= string */ + const char *id; + /* Profile MIME type */ + const char *mime; + /* Profile Label */ + const char *label; + /* Profile type: IMAGE / AUDIO / AV */ + dlna_media_class_t class; +} dlna_profile_t; + +/** + * DLNA Library's controller. + * This controls the whole library. + */ +typedef struct dlna_s dlna_t; + +/** + * Initialization of library. + * + * @warning This function must be called before any libdlna function. + * @return DLNA library's controller. + */ +dlna_t *dlna_init (void); + +/** + * Uninitialization of library. + * + * @param[in] dlna The DLNA library's controller. + */ +void dlna_uninit (dlna_t *dlna); + +/** + * Set library's verbosity level. + * + * @param[in] dlna The DLNA library's controller. + * @param[in] level Level of verbosity (0 to disable, 1 to enable). + */ +void dlna_set_verbosity (dlna_t *dlna, int level); + +/** + * Set library's check level on files extension. + * + * @param[in] dlna The DLNA library's controller. + * @param[in] level Level of check (0 for no check, 1 to enable checks). + */ +void dlna_set_extension_check (dlna_t *dlna, int level); + +/** + * Register all known/supported DLNA profiles. + * + * @param[in] dlna The DLNA library's controller. + */ +void dlna_register_all_media_profiles (dlna_t *dlna); + +/** + * Register one specific known/supported DLNA profiles. + * + * @param[in] dlna The DLNA library's controller. + * @param[in] profile The profile ID to be registered. + */ +void dlna_register_media_profile (dlna_t *dlna, dlna_media_profile_t profile); + + +/** + * Guess which DLNA profile one input file/stream is compatible with. + * + * @warning This function returns a pointer, do _NOT_ free it. + * @param[in] dlna The DLNA library's controller. + * @param[in] filename The file to be checked for compliance. + * @return A pointer on file's DLNA profile if compatible, NULL otherwise. + */ +dlna_profile_t *dlna_guess_media_profile (dlna_t *dlna, const char *filename); + +/** + * Provides UPnP A/V ContentDirectory Object Item associated to profile. + * + * @warning This function returns a pointer, do _NOT_ free it. + * @param[in] profile The DLNA profile that was targeted. + * @return A pointer on CDS Object Item string. + */ +char *dlna_profile_upnp_object_item (dlna_profile_t *profile); + +/** + * Output the protocol information string that must be send by a DMS to a DMP + * for the file to be played/recognized. + * + * @param[in] type Streaming method. + * @param[in] speed DLNA.ORG_PS parameter. + * @param[in] ci DLNA.ORG_CI parameter. + * @param[in] op DLNA.ORG_OP parameter. + * @param[in] flags DLNA.ORG_FLAGS parameter. + * @param[in] profile The DLNA's file profile that has been guessed. + * @return The protocol information string. + */ +char * dlna_write_protocol_info (dlna_protocol_info_type_t type, + dlna_org_play_speed_t speed, + dlna_org_conversion_t ci, + dlna_org_operation_t op, + dlna_org_flags_t flags, + dlna_profile_t *p); + +/** + * Create a valid UPnP device description for Digital Media Server (DMS). + * + * @param[in] friendly_name UPnP device friendly name. + * @param[in] manufacturer UPnP device manufacturer. + * @param[in] manufacturer_url UPnP device manufacturer URL. + * @param[in] model_description UPnP device model description. + * @param[in] model_name UPnP device model name. + * @param[in] model_number UPnP device model number. + * @param[in] model_url UPnP device model URL. + * @param[in] serial_number UPnP device serial number. + * @param[in] uuid UPnP device unique identifier. + * @param[in] presentation_url UPnP device web presentation page URL. + * @param[in] cms_scpd_url UPnP ConnectionManager service SCPD URL. + * @param[in] cms_control_url UPnP ConnectionManager service control URL. + * @param[in] cms_event_url UPnP ConnectionManager service event URL. + * @param[in] cds_scpd_url UPnP ContentDirectory service SCPD URL. + * @param[in] cds_control_url UPnP ContentDirectory service control URL. + * @param[in] cds_event_url UPnP ContentDirectory service event URL. + * + * @return The DMS device description string. + */ +char * +dlna_dms_description_get (const char *friendly_name, + const char *manufacturer, + const char *manufacturer_url, + const char *model_description, + const char *model_name, + const char *model_number, + const char *model_url, + const char *serial_number, + const char *uuid, + const char *presentation_url, + const char *cms_scpd_url, + const char *cms_control_url, + const char *cms_event_url, + const char *cds_scpd_url, + const char *cds_control_url, + const char *cds_event_url); + +#ifdef __cplusplus +#if 0 /* avoid EMACS indent */ +{ +#endif /* 0 */ +} +#endif /* __cplusplus */ + +#endif /* _DLNA_H_ */