diff options
author | Benny Prijono <bennylp@teluu.com> | 2012-04-04 04:45:28 +0000 |
---|---|---|
committer | Benny Prijono <bennylp@teluu.com> | 2012-04-04 04:45:28 +0000 |
commit | 8df3600ebbe933615529c1e26f8c8fc9655d67b9 (patch) | |
tree | 99d1f5cc996154e3e68f764239112c6bd8179e2f /pjmedia/src | |
parent | 5868f7043173eadd0b1d0813ef9198b3f5037975 (diff) |
Re #1446: set format to PCM when WAVE_FMT_TAG_PCM is detected in AVI file, so that other pjmedia components can recognize that it is a raw PCM format
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@4014 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjmedia/src')
-rw-r--r-- | pjmedia/src/pjmedia/avi_player.c | 29 |
1 files changed, 21 insertions, 8 deletions
diff --git a/pjmedia/src/pjmedia/avi_player.c b/pjmedia/src/pjmedia/avi_player.c index f08cb9ee..2d86153e 100644 --- a/pjmedia/src/pjmedia/avi_player.c +++ b/pjmedia/src/pjmedia/avi_player.c @@ -58,15 +58,19 @@ static void data_to_host(void *data, pj_uint8_t bits, unsigned count) { unsigned i; - pj_int32_t *data32 = (pj_int32_t *)data; - pj_int16_t *data16 = (pj_int16_t *)data; + count /= (bits == 32? 4 : 2); - for (i=0; i<count; ++i) { - if (bits == 32) - data32[i] = pj_swap32(data32[i]); - else - data16[i] = pj_swap16(data16[i]); + + if (bits == 32) { + pj_int32_t *data32 = (pj_int32_t *)data; + for (i=0; i<count; ++i) + data32[i] = pj_swap32(data32[i]); + } else { + pj_int16_t *data16 = (pj_int16_t *)data; + for (i=0; i<count; ++i) + data16[i] = pj_swap16(data16[i]); } + } static void data_to_host2(void *data, pj_uint8_t nsizes, pj_uint8_t *sizes) @@ -98,6 +102,7 @@ struct avi_reader_port pjmedia_port base; unsigned stream_id; unsigned options; + pjmedia_format_id fmt_id; pj_uint16_t bits_per_sample; pj_bool_t eof; pj_off_t fsize; @@ -326,6 +331,8 @@ pjmedia_avi_player_create_streams(pj_pool_t *pool, goto on_error; for (i = 0, nstr = 0; i < avi_hdr.avih_hdr.num_streams; i++) { + pjmedia_format_id fmt_id; + /* Skip non-audio, non-video, or disabled streams) */ if ((!COMPARE_TAG(avi_hdr.strl_hdr[i].data_type, PJMEDIA_AVI_VIDS_TAG) && @@ -354,6 +361,7 @@ pjmedia_avi_player_create_streams(pj_pool_t *pool, PJ_LOG(4, (THIS_FILE, "Unsupported video stream")); continue; } + fmt_id = avi_hdr.strl_hdr[i].codec; } else { /* Check supported audio formats here */ if ((avi_hdr.strl_hdr[i].codec != PJMEDIA_FORMAT_PCM && @@ -365,6 +373,10 @@ pjmedia_avi_player_create_streams(pj_pool_t *pool, PJ_LOG(4, (THIS_FILE, "Unsupported audio stream")); continue; } + /* Normalize format ID */ + fmt_id = avi_hdr.strl_hdr[i].codec; + if (avi_hdr.strl_hdr[i].codec == PJMEDIA_WAVE_FMT_TAG_PCM) + fmt_id = PJMEDIA_FORMAT_PCM; } if (nstr == 0) { @@ -381,6 +393,7 @@ pjmedia_avi_player_create_streams(pj_pool_t *pool, } fport[nstr]->stream_id = i; + fport[nstr]->fmt_id = fmt_id; /* Open file. */ status = pj_file_open(pool, filename, PJ_O_RDONLY, &fport[nstr]->fd); @@ -433,7 +446,7 @@ pjmedia_avi_player_create_streams(pj_pool_t *pool, fport[i]->bits_per_sample = strf_hdr->bits_per_sample; pjmedia_format_init_audio(&fport[i]->base.info.fmt, - strl_hdr->codec, + fport[i]->fmt_id, strf_hdr->sample_rate, strf_hdr->nchannels, strf_hdr->bits_per_sample, |