You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

92 lines
3.0 KiB

/*****************************************************************************
* segments.h
*****************************************************************************
* Copyright (C) 2023 VLC authors and VideoLAN
*
* This program 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.
*
* This program 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 this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
#ifndef HLS_SEGMENTS_H
#define HLS_SEGMENTS_H
struct hls_storage;
struct hls_config;
typedef struct hls_segment
{
char *url;
unsigned int id;
vlc_tick_t length;
struct hls_storage *storage;
httpd_url_t *http_url;
struct vlc_list priv_node;
} hls_segment_t;
struct hls_segment_queue_config
{
unsigned int playlist_id;
httpd_host_t *httpd_ref;
httpd_callback_t httpd_callback;
};
typedef struct
{
struct hls_segment_queue_config config;
unsigned int total_segments;
const struct hls_config *hls_config;
struct vlc_list segments;
} hls_segment_queue_t;
#define hls_segment_queue_Foreach(queue, it) \
vlc_list_foreach (it, &(queue)->segments, priv_node)
#define hls_segment_queue_Foreach_const(queue, it) \
vlc_list_foreach_const (it, &(queue)->segments, priv_node)
#define hls_segment_GetFirst(queue) \
vlc_list_first_entry_or_null(&(queue)->segments, hls_segment_t, priv_node);
void hls_segment_queue_Init(hls_segment_queue_t *,
const struct hls_segment_queue_config *,
const struct hls_config *);
void hls_segment_queue_Clear(hls_segment_queue_t *);
/**
* Add a new segment to the queue.
*
* If the queue is at max capacity, the first inserted segment will also be
* popped and destroyed.
*
* \param content A chain of block containing segment's data.
* \param length The media time size of the segment.
*
* \retval VLC_SUCCESS on success.
* \retval VLC_ENOMEM on internal allocation failure.
*/
int hls_segment_queue_NewSegment(hls_segment_queue_t *,
block_t *content,
vlc_tick_t length);
static inline bool
hls_segment_queue_IsAtMaxCapacity(const hls_segment_queue_t *queue)
{
return queue->hls_config->max_segments != 0 &&
queue->hls_config->max_segments <= queue->total_segments;
}
#endif