summaryrefslogtreecommitdiffstats
path: root/libmpdemux
diff options
context:
space:
mode:
authorlu_zero <lu_zero@b3059339-0415-0410-9bf9-f77b7e298cf2>2007-11-21 13:03:08 +0000
committerlu_zero <lu_zero@b3059339-0415-0410-9bf9-f77b7e298cf2>2007-11-21 13:03:08 +0000
commit8b03e2ecce3d6d7eaa8af3e7d6bc3ff496e70bc6 (patch)
tree6ddd464e1f300f34ae44ca933849384c847fc394 /libmpdemux
parent0d8f77072402e3d539af2ae36b4dd8b6e3b1cab7 (diff)
downloadmpv-8b03e2ecce3d6d7eaa8af3e7d6bc3ff496e70bc6.tar.bz2
mpv-8b03e2ecce3d6d7eaa8af3e7d6bc3ff496e70bc6.tar.xz
Media Format to fourcc conversion (from amol)
Factorize out some if clauses git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@25131 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libmpdemux')
-rw-r--r--libmpdemux/demux_nemesi.c64
1 files changed, 42 insertions, 22 deletions
diff --git a/libmpdemux/demux_nemesi.c b/libmpdemux/demux_nemesi.c
index 0b19d76169..77d73e7e69 100644
--- a/libmpdemux/demux_nemesi.c
+++ b/libmpdemux/demux_nemesi.c
@@ -27,6 +27,27 @@ int rtsp_transport_tcp = 0;
int rtsp_transport_sctp = 0;
// extern int rtsp_port;
+typedef struct {
+ char * mime;
+ unsigned int fourcc;
+} MIMEto4CC;
+
+#define NMS_MAX_FORMATS 16
+
+MIMEto4CC supported_audio[NMS_MAX_FORMATS] = {
+ {"MPA", 0x55},
+ {"vorbis", mmioFOURCC('v','r','b','s')},
+ {NULL, 0},
+};
+
+MIMEto4CC supported_video[NMS_MAX_FORMATS] = {
+ {"MPV", mmioFOURCC('M','P','E','G')},
+ {"H264", mmioFOURCC('H','2','6','4')},
+ {"H263-1998", mmioFOURCC('H','2','6','3')},
+ {"MP4V-ES", mmioFOURCC('M','P','4','V')},
+ {NULL, 0},
+};
+
typedef enum { NEMESI_SESSION_VIDEO,
NEMESI_SESSION_AUDIO } Nemesi_SessionType;
@@ -47,6 +68,19 @@ typedef struct {
#define INVERT_STYPE(stype) ((stype + 1) % 2)
+static unsigned int get4CC(MIMEto4CC * supported_formats, char const * format)
+{
+ unsigned i;
+
+ for(i = 0; i < NMS_MAX_FORMATS; ++i) {
+ if (!supported_formats[i].mime)
+ return 0;
+ else if ( strcmp(supported_formats[i].mime, format) == 0 )
+ return supported_formats[i].fourcc;
+ }
+
+ return 0;
+}
static rtp_ssrc *wait_for_packets(Nemesi_DemuxerStreamData * ndsd, Nemesi_SessionType stype)
{
@@ -200,14 +234,9 @@ demuxer_t* demux_open_rtp(demuxer_t* demuxer)
sh_audio->ds = d_audio;
wf->nSamplesPerSec = 0;
- //List of known audio formats
- if (!strcmp(format_name, "MPA"))
- wf->wFormatTag =
- sh_audio->format = 0x55;
- else if (!strcmp(format_name, "vorbis"))
- wf->wFormatTag =
- sh_audio->format = mmioFOURCC('v','r','b','s');
- else
+ wf->wFormatTag =
+ sh_audio->format = get4CC(supported_audio, format_name);
+ if ( !(wf->wFormatTag) )
mp_msg(MSGT_DEMUX, MSGL_WARN,
"Unknown MPlayer format code for MIME"
" type \"audio/%s\"\n", format_name);
@@ -248,20 +277,9 @@ demuxer_t* demux_open_rtp(demuxer_t* demuxer)
sh_video->frametime = 1.0/fps;
}
- //List of known video formats
- if (!strcmp(format_name, "MPV")) {
- bih->biCompression =
- sh_video->format = mmioFOURCC('M','P','E','G');
- } else if (!strcmp(format_name, "H264")) {
- bih->biCompression =
- sh_video->format = mmioFOURCC('H','2','6','4');
- } else if (!strcmp(format_name, "H263-1998")) {
- bih->biCompression =
- sh_video->format = mmioFOURCC('H','2','6','3');
- } else if (!strcmp(format_name, "MP4V-ES")) {
- bih->biCompression =
- sh_video->format = mmioFOURCC('M','P','4','V');
- } else {
+ bih->biCompression =
+ sh_video->format = get4CC(supported_video, format_name);
+ if ( !(bih->biCompression) ) {
mp_msg(MSGT_DEMUX, MSGL_WARN,
"Unknown MPlayer format code for MIME"
" type \"video/%s\"\n", format_name);
@@ -323,6 +341,8 @@ int demux_rtp_fill_buffer(demuxer_t* demuxer, demux_stream_t* ds)
return 0;
}
+ memset(&fr, 0, sizeof(fr));
+
stype = DS_TO_STYPE(demuxer, ds);
if ( (ssrc = wait_for_packets(ndsd, stype)) == NULL ) {
mp_msg(MSGT_DEMUX, MSGL_INFO, "Bye...\n");