summaryrefslogtreecommitdiffstats
path: root/stream
diff options
context:
space:
mode:
Diffstat (limited to 'stream')
-rw-r--r--stream/stream.c18
-rw-r--r--stream/stream.h1
-rw-r--r--stream/stream_lavf.c13
3 files changed, 17 insertions, 15 deletions
diff --git a/stream/stream.c b/stream/stream.c
index 6e0644e59c..d7ab7a751a 100644
--- a/stream/stream.c
+++ b/stream/stream.c
@@ -179,7 +179,7 @@ static stream_t *open_stream_plugin(const stream_info_t *sinfo,
streaming_ctrl_free(s->streaming_ctrl);
#endif
free(s->url);
- free(s);
+ talloc_free(s);
return NULL;
}
@@ -202,6 +202,9 @@ static stream_t *open_stream_plugin(const stream_info_t *sinfo,
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);
+
return s;
}
@@ -510,8 +513,7 @@ stream_t* new_memory_stream(unsigned char* data,int len){
}
stream_t* new_stream(int fd,int type){
- stream_t *s=calloc(1, sizeof(stream_t));
- if(s==NULL) return NULL;
+ stream_t *s=talloc_zero(NULL, stream_t);
#if HAVE_WINSOCK2_H
{
@@ -523,11 +525,6 @@ stream_t* new_stream(int fd,int type){
s->fd=fd;
s->type=type;
- s->buf_pos=s->buf_len=0;
- s->start_pos=s->end_pos=0;
- s->priv=NULL;
- s->url=NULL;
- s->cache_pid=0;
stream_reset(s);
return s;
}
@@ -551,11 +548,8 @@ void free_stream(stream_t *s){
mp_msg(MSGT_STREAM,MSGL_V,"WINSOCK2 uninit\n");
WSACleanup(); // there might be a better place for this (-> later)
#endif
- // Disabled atm, i don't like that. s->priv can be anything after all
- // streams should destroy their priv on close
- //free(s->priv);
free(s->url);
- free(s);
+ talloc_free(s);
}
stream_t* new_ds_stream(demux_stream_t *ds) {
diff --git a/stream/stream.h b/stream/stream.h
index ebab587f03..43980197e7 100644
--- a/stream/stream.h
+++ b/stream/stream.h
@@ -175,6 +175,7 @@ typedef struct stream {
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;
diff --git a/stream/stream_lavf.c b/stream/stream_lavf.c
index a3268c10ae..4dae59c2c0 100644
--- a/stream/stream_lavf.c
+++ b/stream/stream_lavf.c
@@ -16,10 +16,11 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#include "config.h"
+#include <libavformat/avformat.h>
+#include <libavformat/avio.h>
+#include <libavutil/opt.h>
-#include "libavformat/avformat.h"
-#include "libavformat/avio.h"
+#include "config.h"
#include "core/mp_msg.h"
#include "stream.h"
#include "core/m_option.h"
@@ -139,6 +140,12 @@ static int open_f(stream_t *stream, int mode, void *opts, int *file_format)
if (avio_open(&avio, filename, flags) < 0)
goto out;
+ if (avio->av_class) {
+ uint8_t *mt = NULL;
+ if (av_opt_get(avio, "mime_type", AV_OPT_SEARCH_CHILDREN, &mt) >= 0)
+ stream->mime_type = talloc_strdup(stream, mt);
+ }
+
char *rtmp[] = {"rtmp:", "rtmpt:", "rtmpe:", "rtmpte:", "rtmps:"};
for (int i = 0; i < FF_ARRAY_ELEMS(rtmp); i++)
if (!strncmp(filename, rtmp[i], strlen(rtmp[i]))) {