summaryrefslogtreecommitdiffstats
path: root/stream
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2013-01-24 17:43:07 +0100
committerwm4 <wm4@nowhere>2013-01-24 17:45:13 +0100
commit47cec752915a5aa6780b844247b285f5e96536e9 (patch)
tree946435de774fdb80541c3d77a54f91d77ae4235e /stream
parent42b47624f8e5c3742e06f10135ecc0ae34a29064 (diff)
downloadmpv-47cec752915a5aa6780b844247b285f5e96536e9.tar.bz2
mpv-47cec752915a5aa6780b844247b285f5e96536e9.tar.xz
stream: uncrustify stream.c/.h
The formatting almost made me break out in tears.
Diffstat (limited to 'stream')
-rw-r--r--stream/stream.c870
-rw-r--r--stream/stream.h376
2 files changed, 664 insertions, 582 deletions
diff --git a/stream/stream.c b/stream/stream.c
index 76cf453740..9dd190055a 100644
--- a/stream/stream.c
+++ b/stream/stream.c
@@ -54,10 +54,10 @@
#include "cache2.h"
/// We keep these 2 for the gui atm, but they will be removed.
-int vcd_track=0;
-char* cdrom_device=NULL;
-char* dvd_device=NULL;
-int dvd_title=0;
+int vcd_track = 0;
+char *cdrom_device = NULL;
+char *dvd_device = NULL;
+int dvd_title = 0;
struct input_ctx;
static int (*stream_check_interrupt_cb)(struct input_ctx *ctx, int time);
@@ -86,54 +86,54 @@ extern const stream_info_t stream_info_ifo;
extern const stream_info_t stream_info_dvd;
extern const stream_info_t stream_info_bluray;
-static const stream_info_t* const auto_open_streams[] = {
+static const stream_info_t *const auto_open_streams[] = {
#ifdef CONFIG_VCD
- &stream_info_vcd,
+ &stream_info_vcd,
#endif
#ifdef CONFIG_CDDA
- &stream_info_cdda,
+ &stream_info_cdda,
#endif
- &stream_info_ffmpeg, // use for rstp:// before http fallback
- &stream_info_avdevice,
+ &stream_info_ffmpeg, // use for rstp:// before http fallback
+ &stream_info_avdevice,
#ifdef CONFIG_NETWORKING
- &stream_info_http1,
- &stream_info_asf,
- &stream_info_udp,
- &stream_info_http2,
+ &stream_info_http1,
+ &stream_info_asf,
+ &stream_info_udp,
+ &stream_info_http2,
#endif
#ifdef CONFIG_DVBIN
- &stream_info_dvb,
+ &stream_info_dvb,
#endif
#ifdef CONFIG_TV
- &stream_info_tv,
+ &stream_info_tv,
#endif
#ifdef CONFIG_RADIO
- &stream_info_radio,
+ &stream_info_radio,
#endif
#ifdef CONFIG_PVR
- &stream_info_pvr,
+ &stream_info_pvr,
#endif
#ifdef CONFIG_FTP
- &stream_info_ftp,
+ &stream_info_ftp,
#endif
#ifdef CONFIG_VSTREAM
- &stream_info_vstream,
+ &stream_info_vstream,
#endif
#ifdef CONFIG_LIBSMBCLIENT
- &stream_info_smb,
+ &stream_info_smb,
#endif
#ifdef CONFIG_DVDREAD
- &stream_info_ifo,
- &stream_info_dvd,
+ &stream_info_ifo,
+ &stream_info_dvd,
#endif
#ifdef CONFIG_LIBBLURAY
- &stream_info_bluray,
+ &stream_info_bluray,
#endif
- &stream_info_null,
- &stream_info_mf,
- &stream_info_file,
- NULL
+ &stream_info_null,
+ &stream_info_mf,
+ &stream_info_file,
+ NULL
};
static stream_t *open_stream_plugin(const stream_info_t *sinfo,
@@ -142,132 +142,142 @@ static stream_t *open_stream_plugin(const stream_info_t *sinfo,
int *file_format, int *ret,
char **redirected_url)
{
- void* arg = NULL;
- stream_t* s;
- m_struct_t* desc = (m_struct_t*)sinfo->opts;
-
- // Parse options
- if(desc) {
- arg = m_struct_alloc(desc);
- if(sinfo->opts_url) {
- m_option_t url_opt =
- { "stream url", arg , CONF_TYPE_CUSTOM_URL, 0, 0 ,0, (void *)sinfo->opts };
- if (m_option_parse(&url_opt, bstr0("stream url"), bstr0(filename), arg) < 0) {
- mp_tmsg(MSGT_OPEN,MSGL_ERR, "URL parsing failed on url %s\n",filename);
- m_struct_free(desc,arg);
- *ret = STREAM_ERROR;
- return NULL;
- }
+ void *arg = NULL;
+ stream_t *s;
+ m_struct_t *desc = (m_struct_t *)sinfo->opts;
+
+ // Parse options
+ if (desc) {
+ arg = m_struct_alloc(desc);
+ if (sinfo->opts_url) {
+ m_option_t url_opt = { "stream url", arg, CONF_TYPE_CUSTOM_URL, 0,
+ 0, 0, (void *)sinfo->opts };
+ if (m_option_parse(&url_opt, bstr0("stream url"), bstr0(filename),
+ arg) < 0)
+ {
+ mp_tmsg(MSGT_OPEN, MSGL_ERR, "URL parsing failed on url %s\n",
+ filename);
+ m_struct_free(desc, arg);
+ *ret = STREAM_ERROR;
+ return NULL;
+ }
+ }
}
- }
- s = new_stream(-2,-2);
- s->opts = options;
- s->url=strdup(filename);
- s->flags |= mode;
- *ret = sinfo->open(s,mode,arg,file_format);
- if((*ret) != STREAM_OK) {
+ s = new_stream(-2, -2);
+ s->opts = options;
+ s->url = strdup(filename);
+ s->flags |= mode;
+ *ret = sinfo->open(s, mode, arg, file_format);
+ if ((*ret) != STREAM_OK) {
#ifdef CONFIG_NETWORKING
- if (*ret == STREAM_REDIRECTED && redirected_url) {
- if (s->streaming_ctrl && s->streaming_ctrl->url
- && s->streaming_ctrl->url->url)
- *redirected_url = strdup(s->streaming_ctrl->url->url);
- else
- *redirected_url = NULL;
- }
- streaming_ctrl_free(s->streaming_ctrl);
+ if (*ret == STREAM_REDIRECTED && redirected_url) {
+ if (s->streaming_ctrl && s->streaming_ctrl->url
+ && s->streaming_ctrl->url->url)
+ *redirected_url = strdup(s->streaming_ctrl->url->url);
+ else
+ *redirected_url = NULL;
+ }
+ streaming_ctrl_free(s->streaming_ctrl);
#endif
- free(s->url);
- talloc_free(s);
- return NULL;
- }
+ free(s->url);
+ talloc_free(s);
+ return NULL;
+ }
- if (s->streaming && !s->cache_size) {
- // Set default cache size to use if user does not specify it.
- s->cache_size = 320;
- }
+ if (s->streaming && !s->cache_size) {
+ // Set default cache size to use if user does not specify it.
+ s->cache_size = 320;
+ }
- if(s->type <= -2)
- mp_msg(MSGT_OPEN,MSGL_WARN, "Warning streams need a type !!!!\n");
- if(s->flags & MP_STREAM_SEEK && !s->seek)
- s->flags &= ~MP_STREAM_SEEK;
- if(s->seek && !(s->flags & MP_STREAM_SEEK))
- s->flags |= MP_STREAM_SEEK;
+ if (s->type <= -2)
+ mp_msg(MSGT_OPEN, MSGL_WARN, "Warning streams need a type !!!!\n");
+ if (s->flags & MP_STREAM_SEEK && !s->seek)
+ s->flags &= ~MP_STREAM_SEEK;
+ if (s->seek && !(s->flags & MP_STREAM_SEEK))
+ s->flags |= MP_STREAM_SEEK;
- s->mode = mode;
+ s->mode = mode;
- mp_msg(MSGT_OPEN,MSGL_V, "STREAM: [%s] %s\n",sinfo->name,filename);
- mp_msg(MSGT_OPEN,MSGL_V, "STREAM: Description: %s\n",sinfo->info);
- mp_msg(MSGT_OPEN,MSGL_V, "STREAM: Author: %s\n", sinfo->author);
- mp_msg(MSGT_OPEN,MSGL_V, "STREAM: Comment: %s\n", sinfo->comment);
+ mp_msg(MSGT_OPEN, MSGL_V, "STREAM: [%s] %s\n", sinfo->name, filename);
+ mp_msg(MSGT_OPEN, MSGL_V, "STREAM: Description: %s\n", sinfo->info);
+ mp_msg(MSGT_OPEN, MSGL_V, "STREAM: Author: %s\n", sinfo->author);
+ mp_msg(MSGT_OPEN, MSGL_V, "STREAM: Comment: %s\n", sinfo->comment);
- if (s->mime_type)
- mp_msg(MSGT_OPEN, MSGL_V, "Mime-type: '%s'\n", s->mime_type);
+ if (s->mime_type)
+ mp_msg(MSGT_OPEN, MSGL_V, "Mime-type: '%s'\n", s->mime_type);
- return s;
+ return s;
}
static stream_t *open_stream_full(const char *filename, int mode,
struct MPOpts *options, int *file_format)
{
- int i,j,l,r;
- const stream_info_t* sinfo;
- stream_t* s;
- char *redirected_url = NULL;
-
- assert(filename);
-
- int dummy;
- if (!file_format)
- file_format = &dummy;
-
- *file_format = DEMUXER_TYPE_UNKNOWN;
-
- for(i = 0 ; auto_open_streams[i] ; i++) {
- sinfo = auto_open_streams[i];
- if(!sinfo->protocols) {
- mp_msg(MSGT_OPEN,MSGL_WARN, "Stream type %s has protocols == NULL, it's a bug\n", sinfo->name);
- continue;
- }
- for(j = 0 ; sinfo->protocols[j] ; j++) {
- l = strlen(sinfo->protocols[j]);
- // l == 0 => Don't do protocol matching (ie network and filenames)
- if((l == 0 && !strstr(filename, "://")) ||
- ((strncasecmp(sinfo->protocols[j],filename,l) == 0) &&
- (strncmp("://",filename+l,3) == 0))) {
- *file_format = DEMUXER_TYPE_UNKNOWN;
- s = open_stream_plugin(sinfo,filename,mode,options,file_format,&r,
- &redirected_url);
- if(s) return s;
- if(r == STREAM_REDIRECTED && redirected_url) {
- mp_msg(MSGT_OPEN,MSGL_V, "[%s] open %s redirected to %s\n",
- sinfo->info, filename, redirected_url);
- s = open_stream_full(redirected_url, mode, options, file_format);
- free(redirected_url);
- return s;
- }
- else if(r != STREAM_UNSUPPORTED) {
- mp_tmsg(MSGT_OPEN,MSGL_ERR, "Failed to open %s.\n",filename);
- return NULL;
- }
- break;
- }
+ int i, j, l, r;
+ const stream_info_t *sinfo;
+ stream_t *s;
+ char *redirected_url = NULL;
+
+ assert(filename);
+
+ int dummy;
+ if (!file_format)
+ file_format = &dummy;
+
+ *file_format = DEMUXER_TYPE_UNKNOWN;
+
+ for (i = 0; auto_open_streams[i]; i++) {
+ sinfo = auto_open_streams[i];
+ if (!sinfo->protocols) {
+ mp_msg(MSGT_OPEN, MSGL_WARN,
+ "Stream type %s has protocols == NULL, it's a bug\n",
+ sinfo->name);
+ continue;
+ }
+ for (j = 0; sinfo->protocols[j]; j++) {
+ l = strlen(sinfo->protocols[j]);
+ // l == 0 => Don't do protocol matching (ie network and filenames)
+ if ((l == 0 && !strstr(filename, "://")) ||
+ ((strncasecmp(sinfo->protocols[j], filename, l) == 0) &&
+ (strncmp("://", filename + l, 3) == 0))) {
+ *file_format = DEMUXER_TYPE_UNKNOWN;
+ s =
+ open_stream_plugin(sinfo, filename, mode, options,
+ file_format,
+ &r,
+ &redirected_url);
+ if (s)
+ return s;
+ if (r == STREAM_REDIRECTED && redirected_url) {
+ mp_msg(MSGT_OPEN, MSGL_V, "[%s] open %s redirected to %s\n",
+ sinfo->info, filename, redirected_url);
+ s = open_stream_full(redirected_url, mode, options,
+ file_format);
+ free(redirected_url);
+ return s;
+ } else if (r != STREAM_UNSUPPORTED) {
+ mp_tmsg(MSGT_OPEN, MSGL_ERR, "Failed to open %s.\n",
+ filename);
+ return NULL;
+ }
+ break;
+ }
+ }
}
- }
- mp_tmsg(MSGT_OPEN,MSGL_ERR, "No stream found to handle url %s\n", filename);
- return NULL;
+ mp_tmsg(MSGT_OPEN, MSGL_ERR, "No stream found to handle url %s\n", filename);
+ return NULL;
}
-stream_t* open_stream(const char *filename, struct MPOpts *options,
+stream_t *open_stream(const char *filename, struct MPOpts *options,
int *file_format)
{
- return open_stream_full(filename,STREAM_READ,options,file_format);
+ return open_stream_full(filename, STREAM_READ, options, file_format);
}
stream_t *open_output_stream(const char *filename, struct MPOpts *options)
{
- return open_stream_full(filename,STREAM_WRITE,options,NULL);
+ return open_stream_full(filename, STREAM_WRITE, options, NULL);
}
//=================== STREAMER =========================
@@ -284,9 +294,10 @@ static int stream_reconnect(stream_t *s)
do {
if (retry >= MAX_RECONNECT_RETRIES)
return 0;
- if (retry) usec_sleep(RECONNECT_SLEEP_MS * 1000);
+ if (retry)
+ usec_sleep(RECONNECT_SLEEP_MS * 1000);
retry++;
- s->eof=1;
+ s->eof = 1;
stream_reset(s);
} while (stream_seek_internal(s, pos) >= 0 || s->pos != pos); // seek failed
return 1;
@@ -294,195 +305,208 @@ static int stream_reconnect(stream_t *s)
int stream_read_internal(stream_t *s, void *buf, int len)
{
- int orig_len = len;
- // we will retry even if we already reached EOF previously.
- switch(s->type){
- case STREAMTYPE_STREAM:
-#ifdef CONFIG_NETWORKING
- if( s->streaming_ctrl!=NULL && s->streaming_ctrl->streaming_read ) {
- len=s->streaming_ctrl->streaming_read(s->fd, buf, len, s->streaming_ctrl);
- if (s->streaming_ctrl->status == streaming_stopped_e &&
- (!s->end_pos || s->pos == s->end_pos))
+ int orig_len = len;
+ // we will retry even if we already reached EOF previously.
+ switch (s->type) {
+ case STREAMTYPE_STREAM:
+ if (s->streaming_ctrl != NULL && s->streaming_ctrl->streaming_read) {
+ len = s->streaming_ctrl->streaming_read(s->fd, buf, len,
+ s->streaming_ctrl);
+ if (s->streaming_ctrl->status == streaming_stopped_e &&
+ (!s->end_pos || s->pos == s->end_pos))
+ s->eof = 1;
+ } else {
+ if (s->fill_buffer)
+ len = s->fill_buffer(s, buf, len);
+ else
+ len = read(s->fd, buf, len);
+ }
+ break;
+ case STREAMTYPE_DS:
+ len = demux_read_data((demux_stream_t *)s->priv, buf, len);
+ break;
+
+
+ default:
+ len = s->fill_buffer ? s->fill_buffer(s, buf, len) : 0;
+ }
+ if (len <= 0) {
+ // do not retry if this looks like proper eof
+ if (s->eof || (s->end_pos && s->pos == s->end_pos))
+ goto eof_out;
+
+ // just in case this is an error e.g. due to network
+ // timeout reset and retry
+ if (!stream_reconnect(s))
+ goto eof_out;
+ // make sure EOF is set to ensure no endless loops
s->eof = 1;
- } else
-#endif
- if (s->fill_buffer)
- len = s->fill_buffer(s, buf, len);
- else
- len = read(s->fd, buf, len);
- break;
- case STREAMTYPE_DS:
- len = demux_read_data((demux_stream_t*)s->priv, buf, len);
- break;
-
-
- default:
- len= s->fill_buffer ? s->fill_buffer(s, buf, len) : 0;
- }
- if(len<=0){
- // do not retry if this looks like proper eof
- if (s->eof || (s->end_pos && s->pos == s->end_pos))
- goto eof_out;
-
- // just in case this is an error e.g. due to network
- // timeout reset and retry
- if (!stream_reconnect(s))
- goto eof_out;
- // make sure EOF is set to ensure no endless loops
- s->eof=1;
- return stream_read_internal(s, buf, orig_len);
+ return stream_read_internal(s, buf, orig_len);
eof_out:
- s->eof=1;
- return 0;
- }
- // When reading succeeded we are obviously not at eof.
- // This e.g. avoids issues with eof getting stuck when lavf seeks in MPEG-TS
- s->eof=0;
- s->pos+=len;
- return len;
+ s->eof = 1;
+ return 0;
+ }
+ // When reading succeeded we are obviously not at eof.
+ // This e.g. avoids issues with eof getting stuck when lavf seeks in MPEG-TS
+ s->eof = 0;
+ s->pos += len;
+ return len;
}
-int stream_fill_buffer(stream_t *s){
- int len = stream_read_internal(s, s->buffer, STREAM_BUFFER_SIZE);
- if (len <= 0)
- return 0;
- s->buf_pos=0;
- s->buf_len=len;
+int stream_fill_buffer(stream_t *s)
+{
+ int len = stream_read_internal(s, s->buffer, STREAM_BUFFER_SIZE);
+ if (len <= 0)
+ return 0;
+ s->buf_pos = 0;
+ s->buf_len = len;
// printf("[%d]",len);fflush(stdout);
- return len;
+ return len;
}
-int stream_write_buffer(stream_t *s, unsigned char *buf, int len) {
- int rd;
- if(!s->write_buffer)
- return -1;
- rd = s->write_buffer(s, buf, len);
- if(rd < 0)
- return -1;
- s->pos += rd;
- assert(rd == len && "stream_write_buffer(): unexpected short write");
- return rd;
+int stream_write_buffer(stream_t *s, unsigned char *buf, int len)
+{
+ int rd;
+ if (!s->write_buffer)
+ return -1;
+ rd = s->write_buffer(s, buf, len);
+ if (rd < 0)
+ return -1;
+ s->pos += rd;
+ assert(rd == len && "stream_write_buffer(): unexpected short write");
+ return rd;
}
int stream_seek_internal(stream_t *s, int64_t newpos)
{
-if(newpos==0 || newpos!=s->pos){
- switch(s->type){
- case STREAMTYPE_STREAM:
- //s->pos=newpos; // real seek
- // Some streaming protocol allow to seek backward and forward
- // A function call that return -1 can tell that the protocol
- // doesn't support seeking.
+ if (newpos == 0 || newpos != s->pos) {
+ switch (s->type) {
+ case STREAMTYPE_STREAM:
+ //s->pos=newpos; // real seek
+ // Some streaming protocol allow to seek backward and forward
+ // A function call that return -1 can tell that the protocol
+ // doesn't support seeking.
#ifdef CONFIG_NETWORKING
- if(s->seek) { // new stream seek is much cleaner than streaming_ctrl one
- if(!s->seek(s,newpos)) {
- mp_tmsg(MSGT_STREAM,MSGL_ERR, "Seek failed\n");
- return 0;
- }
- break;
- }
-
- if( s->streaming_ctrl!=NULL && s->streaming_ctrl->streaming_seek ) {
- if( s->streaming_ctrl->streaming_seek( s->fd, newpos, s->streaming_ctrl )<0 ) {
- mp_tmsg(MSGT_STREAM,MSGL_INFO,"Stream not seekable!\n");
- return 1;
- }
- break;
- }
+ if (s->seek) { // new stream seek is much cleaner than streaming_ctrl one
+ if (!s->seek(s, newpos)) {
+ mp_tmsg(MSGT_STREAM, MSGL_ERR, "Seek failed\n");
+ return 0;
+ }
+ break;
+ }
+
+ if (s->streaming_ctrl != NULL &&
+ s->streaming_ctrl->streaming_seek) {
+ if (s->streaming_ctrl->streaming_seek(s->fd, newpos,
+ s->streaming_ctrl) < 0) {
+ mp_tmsg(MSGT_STREAM, MSGL_INFO, "Stream not seekable!\n");
+ return 1;
+ }
+ break;
+ }
#endif
- if(newpos<s->pos){
- mp_tmsg(MSGT_STREAM, MSGL_INFO,
- "Cannot seek backward in linear streams!\n");
- return 1;
- }
- break;
- default:
- // This should at the beginning as soon as all streams are converted
- if(!s->seek)
- return 0;
- // Now seek
- if(!s->seek(s,newpos)) {
- mp_tmsg(MSGT_STREAM,MSGL_ERR, "Seek failed\n");
- return 0;
- }
- }
+ if (newpos < s->pos) {
+ mp_tmsg(MSGT_STREAM, MSGL_INFO,
+ "Cannot seek backward in linear streams!\n");
+ return 1;
+ }
+ break;
+ default:
+ // This should at the beginning as soon as all streams are converted
+ if (!s->seek)
+ return 0;
+ // Now seek
+ if (!s->seek(s, newpos)) {
+ mp_tmsg(MSGT_STREAM, MSGL_ERR, "Seek failed\n");
+ return 0;
+ }
+ }
// putchar('.');fflush(stdout);
//} else {
// putchar('%');fflush(stdout);
-}
- return -1;
+ }
+ return -1;
}
-int stream_seek_long(stream_t *s,int64_t pos){
- int res;
-int64_t newpos=0;
+int stream_seek_long(stream_t *s, int64_t pos)
+{
+ int res;
+ int64_t newpos = 0;
// if( mp_msg_test(MSGT_STREAM,MSGL_DBG3) ) printf("seek_long to 0x%X\n",(unsigned int)pos);
- s->buf_pos=s->buf_len=0;
-
- if(s->mode == STREAM_WRITE) {
- if(!s->seek || !s->seek(s,pos))
- return 0;
- return 1;
- }
+ s->buf_pos = s->buf_len = 0;
- if(s->sector_size)
- newpos = (pos/s->sector_size)*s->sector_size;
- else
- newpos = pos&(~((int64_t)STREAM_BUFFER_SIZE-1));
+ if (s->mode == STREAM_WRITE) {
+ if (!s->seek || !s->seek(s, pos))
+ return 0;
+ return 1;
+ }
-if( mp_msg_test(MSGT_STREAM,MSGL_DBG3) ){
- mp_msg(MSGT_STREAM,MSGL_DBG3, "s->pos=%"PRIX64" newpos=%"PRIX64" new_bufpos=%"PRIX64" buflen=%X \n",
- (int64_t)s->pos,(int64_t)newpos,(int64_t)pos,s->buf_len);
-}
- pos-=newpos;
+ if (s->sector_size)
+ newpos = (pos / s->sector_size) * s->sector_size;
+ else
+ newpos = pos & (~((int64_t)STREAM_BUFFER_SIZE - 1));
+
+ if (mp_msg_test(MSGT_STREAM, MSGL_DBG3)) {
+ mp_msg(
+ MSGT_STREAM, MSGL_DBG3,
+ "s->pos=%" PRIX64 " newpos=%" PRIX64 " new_bufpos=%" PRIX64
+ " buflen=%X \n",
+ (int64_t)s->pos, (int64_t)newpos, (int64_t)pos, s->buf_len);
+ }
+ pos -= newpos;
- res = stream_seek_internal(s, newpos);
- if (res >= 0)
- return res;
+ res = stream_seek_internal(s, newpos);
+ if (res >= 0)
+ return res;
- while(s->pos<newpos){
- if(stream_fill_buffer(s)<=0) break; // EOF
- }
+ while (s->pos < newpos) {
+ if (stream_fill_buffer(s) <= 0)
+ break; // EOF
+ }
-s->eof = 0; // EOF reset when seek succeeds.
-while (stream_fill_buffer(s) > 0) {
- if(pos<=s->buf_len){
- s->buf_pos=pos; // byte position in sector
- return 1;
- }
- pos -= s->buf_len;
-}
+ s->eof = 0; // EOF reset when seek succeeds.
+ while (stream_fill_buffer(s) > 0) {
+ if (pos <= s->buf_len) {
+ s->buf_pos = pos; // byte position in sector
+ return 1;
+ }
+ pos -= s->buf_len;
+ }
// Fill failed, but seek still is a success.
-s->pos += pos;
-s->buf_pos = 0;
-s->buf_len = 0;
+ s->pos += pos;
+ s->buf_pos = 0;
+ s->buf_len = 0;
-mp_msg(MSGT_STREAM,MSGL_V,
- "stream_seek: Seek to/past EOF: no buffer preloaded.\n");
-return 1;
+ mp_msg(MSGT_STREAM, MSGL_V,
+ "stream_seek: Seek to/past EOF: no buffer preloaded.\n");
+ return 1;
}
-void stream_reset(stream_t *s){
- if(s->eof){
- s->pos=0;
- s->buf_pos=s->buf_len=0;
- s->eof=0;
- }
- if(s->control) s->control(s,STREAM_CTRL_RESET,NULL);
- //stream_seek(s,0);
+void stream_reset(stream_t *s)
+{
+ if (s->eof) {
+ s->pos = 0;
+ s->buf_pos = s->buf_len = 0;
+ s->eof = 0;
+ }
+ if (s->control)
+ s->control(s, STREAM_CTRL_RESET, NULL);
+ //stream_seek(s,0);
}
-int stream_control(stream_t *s, int cmd, void *arg){
+int stream_control(stream_t *s, int cmd, void *arg)
+{
#ifdef CONFIG_STREAM_CACHE
- if (s->cache_pid)
- return cache_do_control(s, cmd, arg);
+ if (s->cache_pid)
+ return cache_do_control(s, cmd, arg);
#endif
- if(!s->control) return STREAM_UNSUPPORTED;
- return s->control(s, cmd, arg);
+ if (!s->control)
+ return STREAM_UNSUPPORTED;
+ return s->control(s, cmd, arg);
}
void stream_update_size(stream_t *s)
@@ -494,66 +518,74 @@ void stream_update_size(stream_t *s)
}
}
-stream_t* new_memory_stream(unsigned char* data,int len){
- stream_t *s;
-
- if(len < 0)
- return NULL;
- s=calloc(1, sizeof(stream_t)+len);
- s->fd=-1;
- s->type=STREAMTYPE_MEMORY;
- s->buf_pos=0; s->buf_len=len;
- s->start_pos=0; s->end_pos=len;
- stream_reset(s);
- s->pos=len;
- memcpy(s->buffer,data,len);
- return s;
+stream_t *new_memory_stream(unsigned char *data, int len)
+{
+ stream_t *s;
+
+ if (len < 0)
+ return NULL;
+ s = calloc(1, sizeof(stream_t) + len);
+ s->fd = -1;
+ s->type = STREAMTYPE_MEMORY;
+ s->buf_pos = 0;
+ s->buf_len = len;
+ s->start_pos = 0;
+ s->end_pos = len;
+ stream_reset(s);
+ s->pos = len;
+ memcpy(s->buffer, data, len);
+ return s;
}
-stream_t* new_stream(int fd,int type){
- stream_t *s=talloc_zero(NULL, stream_t);
+stream_t *new_stream(int fd, int type)
+{
+ stream_t *s = talloc_zero(NULL, stream_t);
#if HAVE_WINSOCK2_H
- {
- WSADATA wsdata;
- int temp = WSAStartup(0x0202, &wsdata); // there might be a better place for this (-> later)
- mp_msg(MSGT_STREAM,MSGL_V,"WINSOCK2 init: %i\n", temp);
- }
+ {
+ WSADATA wsdata;
+ int temp = WSAStartup(0x0202, &wsdata); // there might be a better place for this (-> later)
+ mp_msg(MSGT_STREAM, MSGL_V, "WINSOCK2 init: %i\n", temp);
+ }
#endif
- s->fd=fd;
- s->type=type;
- stream_reset(s);
- return s;
+ s->fd = fd;
+ s->type = type;
+ stream_reset(s);
+ return s;
}
-void free_stream(stream_t *s){
+void free_stream(stream_t *s)
+{
// printf("\n*** free_stream() called ***\n");
#ifdef CONFIG_STREAM_CACHE
cache_uninit(s);
#endif
- if(s->close) s->close(s);
- if(s->fd>0){
- /* on unix we define closesocket to close
- on windows however we have to distinguish between
- network socket and file */
- if(s->url && strstr(s->url,"://"))
- closesocket(s->fd);
- else close(s->fd);
- }
+ if (s->close)
+ s->close(s);
+ if (s->fd > 0) {
+ /* on unix we define closesocket to close
+ on windows however we have to distinguish between
+ network socket and file */
+ if (s->url && strstr(s->url, "://"))
+ closesocket(s->fd);
+ else
+ close(s->fd);
+ }
#if HAVE_WINSOCK2_H
- mp_msg(MSGT_STREAM,MSGL_V,"WINSOCK2 uninit\n");
- WSACleanup(); // there might be a better place for this (-> later)
+ mp_msg(MSGT_STREAM, MSGL_V, "WINSOCK2 uninit\n");
+ WSACleanup(); // there might be a better place for this (-> later)
#endif
- free(s->url);
- talloc_free(s);
+ free(s->url);
+ talloc_free(s);
}
-stream_t* new_ds_stream(demux_stream_t *ds) {
- stream_t* s = new_stream(-1,STREAMTYPE_DS);
- s->priv = ds;
- return s;
+stream_t *new_ds_stream(demux_stream_t *ds)
+{
+ stream_t *s = new_stream(-1, STREAMTYPE_DS);
+ s->priv = ds;
+ return s;
}
void stream_set_interrupt_callback(int (*cb)(struct input_ctx *, int),
@@ -563,8 +595,9 @@ void stream_set_interrupt_callback(int (*cb)(struct input_ctx *, int),
stream_check_interrupt_ctx = ctx;
}
-int stream_check_interrupt(int time) {
- if(!stream_check_interrupt_cb) {
+int stream_check_interrupt(int time)
+{
+ if (!stream_check_interrupt_cb) {
usec_sleep(time * 1000);
return 0;
}
@@ -576,9 +609,9 @@ int stream_check_interrupt(int time) {
*/
static uint16_t get_le16_inc(const uint8_t **buf)
{
- uint16_t v = AV_RL16(*buf);
- *buf += 2;
- return v;
+ uint16_t v = AV_RL16(*buf);
+ *buf += 2;
+ return v;
}
/**
@@ -586,9 +619,9 @@ static uint16_t get_le16_inc(const uint8_t **buf)
*/
static uint16_t get_be16_inc(const uint8_t **buf)
{
- uint16_t v = AV_RB16(*buf);
- *buf += 2;
- return v;
+ uint16_t v = AV_RB16(*buf);
+ *buf += 2;
+ return v;
}
/**
@@ -600,27 +633,29 @@ static uint16_t get_be16_inc(const uint8_t **buf)
*/
static const uint8_t *find_newline(const uint8_t *buf, int len, int utf16)
{
- uint32_t c;
- const uint8_t *end = buf + len;
- switch (utf16) {
- case 0:
- return (uint8_t *)memchr(buf, '\n', len);
- case 1:
- while (buf < end - 1) {
- GET_UTF16(c, buf < end - 1 ? get_le16_inc(&buf) : 0, return NULL;)
- if (buf <= end && c == '\n')
- return buf - 1;
- }
- break;
- case 2:
- while (buf < end - 1) {
- GET_UTF16(c, buf < end - 1 ? get_be16_inc(&buf) : 0, return NULL;)
- if (buf <= end && c == '\n')
- return buf - 1;
+ uint32_t c;
+ const uint8_t *end = buf + len;
+ switch (utf16) {
+ case 0:
+ return (uint8_t *)memchr(buf, '\n', len);
+ case 1:
+ while (buf < end - 1) {
+ GET_UTF16(c, buf < end - 1 ? get_le16_inc(&buf) : 0, return NULL;
+ )
+ if (buf <= end && c == '\n')
+ return buf - 1;
+ }
+ break;
+ case 2:
+ while (buf < end - 1) {
+ GET_UTF16(c, buf < end - 1 ? get_be16_inc(&buf) : 0, return NULL;
+ )
+ if (buf <= end && c == '\n')
+ return buf - 1;
+ }
+ break;
}
- break;
- }
- return NULL;
+ return NULL;
}
/**
@@ -635,61 +670,72 @@ static const uint8_t *find_newline(const uint8_t *buf, int len, int utf16)
static int copy_characters(uint8_t *dst, int dstsize,
const uint8_t *src, int *len, int utf16)
{
- uint32_t c;
- uint8_t *dst_end = dst + dstsize;
- const uint8_t *end = src + *len;
- switch (utf16) {
- case 0:
- if (*len > dstsize)
- *len = dstsize;
- memcpy(dst, src, *len);
- return *len;
- case 1:
- while (src < end - 1 && dst_end - dst > 8) {
- uint8_t tmp;
- GET_UTF16(c, src < end - 1 ? get_le16_inc(&src) : 0, ;)
- PUT_UTF8(c, tmp, *dst++ = tmp;)
- }
- *len -= end - src;
- return dstsize - (dst_end - dst);
- case 2:
- while (src < end - 1 && dst_end - dst > 8) {
- uint8_t tmp;
- GET_UTF16(c, src < end - 1 ? get_be16_inc(&src) : 0, ;)
- PUT_UTF8(c, tmp, *dst++ = tmp;)
+ uint32_t c;
+ uint8_t *dst_end = dst + dstsize;
+ const uint8_t *end = src + *len;
+ switch (utf16) {
+ case 0:
+ if (*len > dstsize)
+ *len = dstsize;
+ memcpy(dst, src, *len);
+ return *len;
+ case 1:
+ while (src < end - 1 && dst_end - dst > 8) {
+ uint8_t tmp;
+ GET_UTF16(c, src < end - 1 ? get_le16_inc(&src) : 0,;
+ )
+ PUT_UTF8(c, tmp, *dst++ = tmp;
+ )
+ }
+ *len -= end - src;
+ return dstsize - (dst_end - dst);
+ case 2:
+ while (src < end - 1 && dst_end - dst > 8) {
+ uint8_t tmp;
+ GET_UTF16(c, src < end - 1 ? get_be16_inc(&src) : 0,;
+ )
+ PUT_UTF8(c, tmp, *dst++ = tmp;
+ )
+ }
+ *len -= end - src;
+ return dstsize - (dst_end - dst);
}
- *len -= end - src;
- return dstsize - (dst_end - dst);
- }
- return 0;
+ return 0;
}
-unsigned char* stream_read_line(stream_t *s,unsigned char* mem, int max, int utf16) {
- int len;
- const unsigned char *end;
- unsigned char *ptr = mem;
- if (max < 1) return NULL;
- max--; // reserve one for 0-termination
- do {
- len = s->buf_len-s->buf_pos;
- // try to fill the buffer
- if(len <= 0 &&
- (!cache_stream_fill_buffer(s) ||
- (len = s->buf_len-s->buf_pos) <= 0)) break;
- end = find_newline(s->buffer+s->buf_pos, len, utf16);
- if(end) len = end - (s->buffer+s->buf_pos) + 1;
- if(len > 0 && max > 0) {
- int l = copy_characters(ptr, max, s->buffer+s->buf_pos, &len, utf16);
- max -= l;
- ptr += l;
- if (!len)
- break;
- }
- s->buf_pos += len;
- } while(!end);
- ptr[0] = 0;
- if(s->eof && ptr == mem) return NULL;
- return mem;
+unsigned char *stream_read_line(stream_t *s, unsigned char *mem, int max,
+ int utf16)
+{
+ int len;
+ const unsigned char *end;
+ unsigned char *ptr = mem;
+ if (max < 1)
+ return NULL;
+ max--; // reserve one for 0-termination
+ do {
+ len = s->buf_len - s->buf_pos;
+ // try to fill the buffer
+ if (len <= 0 &&
+ (!cache_stream_fill_buffer(s) ||
+ (len = s->buf_len - s->buf_pos) <= 0))
+ break;
+ end = find_newline(s->buffer + s->buf_pos, len, utf16);
+ if (end)
+ len = end - (s->buffer + s->buf_pos) + 1;
+ if (len > 0 && max > 0) {
+ int l = copy_characters(ptr, max, s->buffer + s->buf_pos, &len,
+ utf16);
+ max -= l;
+ ptr += l;
+ if (!len)
+ break;
+ }
+ s->buf_pos += len;
+ } while (!end);
+ ptr[0] = 0;
+ if (s->eof && ptr == mem)
+ return NULL;
+ return mem;
}
struct bstr stream_read_complete(struct stream *s, void *talloc_ctx,
@@ -703,7 +749,9 @@ struct bstr stream_read_complete(struct stream *s, void *talloc_ctx,
int padding = FFMAX(padding_bytes, 1);
char *buf = NULL;
if (s->end_pos > max_size)
- return (struct bstr){NULL, 0};
+ return (struct bstr){
+ NULL, 0
+ };
if (s->end_pos > 0)
bufsize = s->end_pos + padding;
else
@@ -716,10 +764,14 @@ struct bstr stream_read_complete(struct stream *s, void *talloc_ctx,
break;
if (bufsize > max_size) {
talloc_free(buf);
- return (struct bstr){NULL, 0};
+ return (struct bstr){
+ NULL, 0
+ };
}
bufsize = FFMIN(bufsize + (bufsize >> 1), max_size + padding);
}
buf = talloc_realloc_size(talloc_ctx, buf, total_read + padding);
- return (struct bstr){buf, total_read};
+ return (struct bstr){
+ buf, total_read
+ };
}
diff --git a/stream/stream.h b/stream/stream.h
index 43980197e7..4beefc91bd 100644
--- a/stream/stream.h
+++ b/stream/stream.h
@@ -57,7 +57,7 @@
#define STREAMTYPE_AVDEVICE 21
#define STREAM_BUFFER_SIZE 2048
-#define STREAM_MAX_SECTOR_SIZE (8*1024)
+#define STREAM_MAX_SECTOR_SIZE (8 * 1024)
#define VCD_SECTOR_SIZE 2352
#define VCD_SECTOR_OFFS 24
@@ -71,7 +71,7 @@
/// MP_STREAM_SEEK is automaticly set
#define MP_STREAM_SEEK_BW 2
#define MP_STREAM_SEEK_FW 4
-#define MP_STREAM_SEEK (MP_STREAM_SEEK_BW|MP_STREAM_SEEK_FW)
+#define MP_STREAM_SEEK (MP_STREAM_SEEK_BW | MP_STREAM_SEEK_FW)
//////////// Open return code
#define STREAM_REDIRECTED -2
@@ -103,26 +103,28 @@
#define STREAM_CTRL_GET_CACHE_IDLE 17
struct stream_lang_req {
- int type; // STREAM_AUDIO, STREAM_SUB
- int id;
- char name[50];
+ int type; // STREAM_AUDIO, STREAM_SUB
+ int id;
+ char name[50];
};
typedef enum {
- streaming_stopped_e,
- streaming_playing_e
+ streaming_stopped_e,
+ streaming_playing_e
} streaming_status;
typedef struct streaming_control {
- URL_t *url;
- streaming_status status;
- char *buffer;
- unsigned int buffer_size;
- unsigned int buffer_pos;
- unsigned int bandwidth; // The downstream available
- int (*streaming_read)( int fd, char *buffer, int buffer_size, struct streaming_control *stream_ctrl );
- int (*streaming_seek)( int fd, int64_t pos, struct streaming_control *stream_ctrl );
- void *data;
+ URL_t *url;
+ streaming_status status;
+ char *buffer;
+ unsigned int buffer_size;
+ unsigned int buffer_pos;
+ unsigned int bandwidth; // The downstream available
+ int (*streaming_read)(int fd, char *buffer, int buffer_size,
+ struct streaming_control *stream_ctrl);
+ int (*streaming_seek)(int fd, int64_t pos,
+ struct streaming_control *stream_ctrl);
+ void *data;
// hacks for asf
int *audio_id_ptr;
int *video_id_ptr;
@@ -130,56 +132,58 @@ typedef struct streaming_control {
struct stream;
typedef struct stream_info_st {
- const char *info;
- const char *name;
- const char *author;
- const char *comment;
- /// mode isn't used atm (ie always READ) but it shouldn't be ignored
- /// opts is at least in it's defaults settings and may have been
- /// altered by url parsing if enabled and the options string parsing.
- int (*open)(struct stream* st, int mode, void* opts, int* file_format);
- const char* protocols[MAX_STREAM_PROTOCOLS];
- const void* opts;
- int opts_url; /* If this is 1 we will parse the url as an option string
- * too. Otherwise options are only parsed from the
- * options string given to open_stream_plugin */
+ const char *info;
+ const char *name;
+ const char *author;
+ const char *comment;
+ /// mode isn't used atm (ie always READ) but it shouldn't be ignored
+ /// opts is at least in it's defaults settings and may have been
+ /// altered by url parsing if enabled and the options string parsing.
+ int (*open)(struct stream *st, int mode, void *opts, int *file_format);
+ const char *protocols[MAX_STREAM_PROTOCOLS];
+ const void *opts;
+ int opts_url; /* If this is 1 we will parse the url as an option string
+ * too. Otherwise options are only parsed from the
+ * options string given to open_stream_plugin */
} stream_info_t;
typedef struct stream {
- // Read
- int (*fill_buffer)(struct stream *s, char* buffer, int max_len);
- // Write
- int (*write_buffer)(struct stream *s, char* buffer, int len);
- // Seek
- int (*seek)(struct stream *s,int64_t pos);
- // Control
- // Will be later used to let streams like dvd and cdda report
- // their structure (ie tracks, chapters, etc)
- int (*control)(struct stream *s,int cmd,void* arg);
- // Close
- void (*close)(struct stream *s);
-
- int fd; // file descriptor, see man open(2)
- int type; // see STREAMTYPE_*
- int flags;
- int sector_size; // sector size (seek will be aligned on this size if non 0)
- int read_chunk; // maximum amount of data to read at once to limit latency (0 for default)
- unsigned int buf_pos,buf_len;
- int64_t pos,start_pos,end_pos;
- int eof;
- int mode; //STREAM_READ or STREAM_WRITE
- bool streaming; // known to be a network stream if true
- int cache_size; // cache size in KB to use if enabled
- bool cached; // cache active
- unsigned int cache_pid;
- void* cache_data;
- void* priv; // used for DVD, TV, RTSP etc
- char* url; // strdup() of filename/url
- char *mime_type; // when HTTP streaming is used
- char *lavf_type; // name of expected demuxer type for lavf
- struct MPOpts *opts;
- streaming_ctrl_t *streaming_ctrl;
- unsigned char buffer[STREAM_BUFFER_SIZE>STREAM_MAX_SECTOR_SIZE?STREAM_BUFFER_SIZE:STREAM_MAX_SECTOR_SIZE];
+ // Read
+ int (*fill_buffer)(struct stream *s, char *buffer, int max_len);
+ // Write
+ int (*write_buffer)(struct stream *s, char *buffer, int len);
+ // Seek
+ int (*seek)(struct stream *s, int64_t pos);
+ // Control
+ // Will be later used to let streams like dvd and cdda report
+ // their structure (ie tracks, chapters, etc)
+ int (*control)(struct stream *s, int cmd, void *arg);
+ // Close
+ void (*close)(struct stream *s);
+
+ int fd; // file descriptor, see man open(2)
+ int type; // see STREAMTYPE_*
+ int flags;
+ int sector_size; // sector size (seek will be aligned on this size if non 0)
+ int read_chunk; // maximum amount of data to read at once to limit latency (0 for default)
+ unsigned int buf_pos, buf_len;
+ int64_t pos, start_pos, end_pos;
+ int eof;
+ int mode; //STREAM_READ or STREAM_WRITE
+ bool streaming; // known to be a network stream if true
+ int cache_size; // cache size in KB to use if enabled
+ bool cached; // cache active
+ unsigned int cache_pid;
+ void *cache_data;
+ void *priv; // used for DVD, TV, RTSP etc
+ char *url; // strdup() of filename/url
+ char *mime_type; // when HTTP streaming is used
+ char *lavf_type; // name of expected demuxer type for lavf
+ struct MPOpts *opts;
+ streaming_ctrl_t *streaming_ctrl;
+ unsigned char buffer[STREAM_BUFFER_SIZE >
+ STREAM_MAX_SECTOR_SIZE ? STREAM_BUFFER_SIZE :
+ STREAM_MAX_SECTOR_SIZE];
} stream_t;
#ifdef CONFIG_NETWORKING
@@ -191,156 +195,182 @@ int stream_seek_long(stream_t *s, int64_t pos);
#ifdef CONFIG_STREAM_CACHE
int stream_enable_cache_percent(stream_t *stream, int64_t stream_cache_size,
- float stream_cache_min_percent, float stream_cache_seek_min_percent);
-int stream_enable_cache(stream_t *stream,int64_t size,int64_t min,int64_t prefill);
+ float stream_cache_min_percent,
+ float stream_cache_seek_min_percent);
+int stream_enable_cache(stream_t *stream, int64_t size, int64_t min,
+ int64_t prefill);
int cache_stream_fill_buffer(stream_t *s);
-int cache_stream_seek_long(stream_t *s,int64_t pos);
+int cache_stream_seek_long(stream_t *s, int64_t pos);
#else
// no cache, define wrappers:
#define cache_stream_fill_buffer(x) stream_fill_buffer(x)
-#define cache_stream_seek_long(x,y) stream_seek_long(x,y)
-#define stream_enable_cache(x,y,z,w) 1
-#define stream_enable_cache_percent(x,y,z,w) 1
+#define cache_stream_seek_long(x, y) stream_seek_long(x, y)
+#define stream_enable_cache(x, y, z, w) 1
+#define stream_enable_cache_percent(x, y, z, w) 1
#endif
int stream_write_buffer(stream_t *s, unsigned char *buf, int len);
-inline static int stream_read_char(stream_t *s){
- return (s->buf_pos<s->buf_len)?s->buffer[s->buf_pos++]:
- (cache_stream_fill_buffer(s)?s->buffer[s->buf_pos++]:-256);
+inline static int stream_read_char(stream_t *s)
+{
+ return (s->buf_pos < s->buf_len) ? s->buffer[s->buf_pos++] :
+ (cache_stream_fill_buffer(s) ? s->buffer[s->buf_pos++] : -256);
// if(s->buf_pos<s->buf_len) return s->buffer[s->buf_pos++];
// stream_fill_buffer(s);
// if(s->buf_pos<s->buf_len) return s->buffer[s->buf_pos++];
// return 0; // EOF
}
-inline static unsigned int stream_read_word(stream_t *s){
- int x,y;
- x=stream_read_char(s);
- y=stream_read_char(s);
- return (x<<8)|y;
+inline static unsigned int stream_read_word(stream_t *s)
+{
+ int x, y;
+ x = stream_read_char(s);
+ y = stream_read_char(s);
+ return (x << 8) | y;
}
-inline static unsigned int stream_read_dword(stream_t *s){
- unsigned int y;
- y=stream_read_char(s);
- y=(y<<8)|stream_read_char(s);
- y=(y<<8)|stream_read_char(s);
- y=(y<<8)|stream_read_char(s);
- return y;
+inline static unsigned int stream_read_dword(stream_t *s)
+{
+ unsigned int y;
+ y = stream_read_char(s);
+ y = (y << 8) | stream_read_char(s);
+ y = (y << 8) | stream_read_char(s);
+ y = (y << 8) | stream_read_char(s);
+ return y;
}
#define stream_read_fourcc stream_read_dword_le
-inline static unsigned int stream_read_word_le(stream_t *s){
- int x,y;
- x=stream_read_char(s);
- y=stream_read_char(s);
- return (y<<8)|x;
+inline static unsigned int stream_read_word_le(stream_t *s)
+{
+ int x, y;
+ x = stream_read_char(s);
+ y = stream_read_char(s);
+ return (y << 8) | x;
}
inline static uint32_t stream_read_dword_le(stream_t *s)
{
- unsigned int y;
- y=stream_read_char(s);
- y|=stream_read_char(s)<<8;
- y|=stream_read_char(s)<<16;
- y|=stream_read_char(s)<<24;
- return y;
+ unsigned int y;
+ y = stream_read_char(s);
+ y |= stream_read_char(s) << 8;
+ y |= stream_read_char(s) << 16;
+ y |= stream_read_char(s) << 24;
+ return y;
}
-inline static uint64_t stream_read_qword(stream_t *s){
- uint64_t y;
- y = stream_read_char(s);
- y=(y<<8)|stream_read_char(s);
- y=(y<<8)|stream_read_char(s);
- y=(y<<8)|stream_read_char(s);
- y=(y<<8)|stream_read_char(s);
- y=(y<<8)|stream_read_char(s);
- y=(y<<8)|stream_read_char(s);
- y=(y<<8)|stream_read_char(s);
- return y;
+inline static uint64_t stream_read_qword(stream_t *s)
+{
+ uint64_t y;
+ y = stream_read_char(s);
+ y = (y << 8) | stream_read_char(s);
+ y = (y << 8) | stream_read_char(s);
+ y = (y << 8) | stream_read_char(s);
+ y = (y << 8) | stream_read_char(s);
+ y = (y << 8) | stream_read_char(s);
+ y = (y << 8) | stream_read_char(s);
+ y = (y << 8) | stream_read_char(s);
+ return y;
}
-inline static uint64_t stream_read_qword_le(stream_t *s){
- uint64_t y;
- y = stream_read_dword_le(s);
- y|=(uint64_t)stream_read_dword_le(s)<<32;
- return y;
+inline static uint64_t stream_read_qword_le(stream_t *s)
+{
+ uint64_t y;
+ y = stream_read_dword_le(s);
+ y |= (uint64_t)stream_read_dword_le(s) << 32;
+ return y;
}
-inline static unsigned int stream_read_int24(stream_t *s){
- unsigned int y;
- y = stream_read_char(s);
- y=(y<<8)|stream_read_char(s);
- y=(y<<8)|stream_read_char(s);
- return y;
+inline static unsigned int stream_read_int24(stream_t *s)
+{
+ unsigned int y;
+ y = stream_read_char(s);
+ y = (y << 8) | stream_read_char(s);
+ y = (y << 8) | stream_read_char(s);
+ return y;
}
-inline static int stream_read(stream_t *s,char* mem,int total){
- int len=total;
- while(len>0){
- int x;
- x=s->buf_len-s->buf_pos;
- if(x==0){
- if(!cache_stream_fill_buffer(s)) return total-len; // EOF
- x=s->buf_len-s->buf_pos;
+inline static int stream_read(stream_t *s, char *mem, int total)
+{
+ int len = total;
+ while (len > 0) {
+ int x;
+ x = s->buf_len - s->buf_pos;
+ if (x == 0) {
+ if (!cache_stream_fill_buffer(s))
+ return total - len; // EOF
+ x = s->buf_len - s->buf_pos;
+ }
+ if (s->buf_pos > s->buf_len)
+ mp_msg(MSGT_DEMUX, MSGL_WARN,
+ "stream_read: WARNING! s->buf_pos>s->buf_len\n");
+ if (x > len)
+ x = len;
+ memcpy(mem, &s->buffer[s->buf_pos], x);
+ s->buf_pos += x;
+ mem += x;
+ len -= x;
}
- if(s->buf_pos>s->buf_len) mp_msg(MSGT_DEMUX, MSGL_WARN, "stream_read: WARNING! s->buf_pos>s->buf_len\n");
- if(x>len) x=len;
- memcpy(mem,&s->buffer[s->buf_pos],x);
- s->buf_pos+=x; mem+=x; len-=x;
- }
- return total;
+ return total;
}
-unsigned char* stream_read_line(stream_t *s,unsigned char* mem, int max, int utf16);
+unsigned char *stream_read_line(stream_t *s, unsigned char *mem, int max,
+ int utf16);
-inline static int stream_eof(stream_t *s){
- return s->eof;
+inline static int stream_eof(stream_t *s)
+{
+ return s->eof;
}
-inline static int64_t stream_tell(stream_t *s){
- return s->pos+s->buf_pos-s->buf_len;
+inline static int64_t stream_tell(stream_t *s)
+{
+ return s->pos + s->buf_pos - s->buf_len;
}
-inline static int stream_seek(stream_t *s,int64_t pos){
+inline static int stream_seek(stream_t *s, int64_t pos)
+{
- mp_dbg(MSGT_DEMUX, MSGL_DBG3, "seek to 0x%llX\n", (long long)pos);
+ mp_dbg(MSGT_DEMUX, MSGL_DBG3, "seek to 0x%llX\n", (long long)pos);
- if (pos < 0) {
- mp_msg(MSGT_DEMUX, MSGL_ERR, "Invalid seek to negative position %llx!\n",
- (long long)pos);
- pos = 0;
- }
- if(pos<s->pos){
- int64_t x=pos-(s->pos-s->buf_len);
- if(x>=0){
- s->buf_pos=x;
- s->eof = 0;
+ if (pos < 0) {
+ mp_msg(MSGT_DEMUX, MSGL_ERR,
+ "Invalid seek to negative position %llx!\n",
+ (long long)pos);
+ pos = 0;
+ }
+ if (pos < s->pos) {
+ int64_t x = pos - (s->pos - s->buf_len);
+ if (x >= 0) {
+ s->buf_pos = x;
+ s->eof = 0;
// putchar('*');fflush(stdout);
- return 1;
+ return 1;
+ }
}
- }
- return cache_stream_seek_long(s,pos);
+ return cache_stream_seek_long(s, pos);
}
-inline static int stream_skip(stream_t *s,int64_t len){
- if( len<0 || (len>2*STREAM_BUFFER_SIZE && (s->flags & MP_STREAM_SEEK_FW)) ) {
- // negative or big skip!
- return stream_seek(s,stream_tell(s)+len);
- }
- while(len>0){
- int x=s->buf_len-s->buf_pos;
- if(x==0){
- if(!cache_stream_fill_buffer(s)) return 0; // EOF
- x=s->buf_len-s->buf_pos;
+inline static int stream_skip(stream_t *s, int64_t len)
+{
+ if (len < 0 ||
+ (len > 2 * STREAM_BUFFER_SIZE && (s->flags & MP_STREAM_SEEK_FW))) {
+ // negative or big skip!
+ return stream_seek(s, stream_tell(s) + len);
+ }
+ while (len > 0) {
+ int x = s->buf_len - s->buf_pos;
+ if (x == 0) {
+ if (!cache_stream_fill_buffer(s))
+ return 0; // EOF
+ x = s->buf_len - s->buf_pos;
+ }
+ if (x > len)
+ x = len;
+ //memcpy(mem,&s->buf[s->buf_pos],x);
+ s->buf_pos += x;
+ len -= x;
}
- if(x>len) x=len;
- //memcpy(mem,&s->buf[s->buf_pos],x);
- s->buf_pos+=x; len-=x;
- }
- return 1;
+ return 1;
}
struct MPOpts;
@@ -355,9 +385,9 @@ struct bstr stream_read_complete(struct stream *s, void *talloc_ctx,
void stream_reset(stream_t *s);
int stream_control(stream_t *s, int cmd, void *arg);
void stream_update_size(stream_t *s);
-stream_t* new_stream(int fd,int type);
+stream_t *new_stream(int fd, int type);
void free_stream(stream_t *s);
-stream_t* new_memory_stream(unsigned char* data,int len);
+stream_t *new_memory_stream(unsigned char *data, int len);
stream_t *open_stream(const char *filename, struct MPOpts *options,
int *file_format);
stream_t *open_output_stream(const char *filename, struct MPOpts *options);
@@ -367,7 +397,7 @@ struct stream *new_ds_stream(struct demux_stream *ds);
/// Set the callback to be used by libstream to check for user
/// interruption during long blocking operations (cache filling, etc).
struct input_ctx;
-void stream_set_interrupt_callback(int (*cb)(struct input_ctx*, int),
+void stream_set_interrupt_callback(int (*cb)(struct input_ctx *, int),
struct input_ctx *ctx);
/// Call the interrupt checking callback if there is one and
/// wait for time milliseconds
@@ -385,10 +415,10 @@ extern int dvd_angle;
extern char *bluray_device;
typedef struct {
- int id; // 0 - 31 mpeg; 128 - 159 ac3; 160 - 191 pcm
- int language;
- int type;
- int channels;
+ int id; // 0 - 31 mpeg; 128 - 159 ac3; 160 - 191 pcm
+ int language;
+ int type;
+ int channels;
} stream_language_t;
#endif /* MPLAYER_STREAM_H */