Mercurial > libavformat.hg
changeset 1057:6c53db379305 libavformat
clean and simplify mov_write_packet
author | bcoudurier |
---|---|
date | Fri, 14 Apr 2006 10:51:32 +0000 |
parents | 4af4c74a4548 |
children | d5efc69f27c6 |
files | movenc.c |
diffstat | 1 files changed, 33 insertions(+), 41 deletions(-) [+] |
line wrap: on
line diff
--- a/movenc.c Fri Apr 14 09:54:17 2006 +0000 +++ b/movenc.c Fri Apr 14 10:51:32 2006 +0000 @@ -1641,55 +1641,47 @@ if (url_is_streamed(&s->pb)) return 0; /* Can't handle that */ if (!size) return 0; /* Discard 0 sized packets */ - if (enc->codec_type == CODEC_TYPE_VIDEO ) { + if (enc->codec_type == CODEC_TYPE_AUDIO) { + switch (enc->codec_id) { + case CODEC_ID_AMR_NB: + { /* We must find out how many AMR blocks there are in one packet */ + static uint16_t packed_size[16] = + {13, 14, 16, 18, 20, 21, 27, 32, 6, 0, 0, 0, 0, 0, 0, 0}; + int len = 0; + + while (len < size && samplesInChunk < 100) { + len += packed_size[(pkt->data[len] >> 3) & 0x0F]; + samplesInChunk++; + } + } + break; + case CODEC_ID_PCM_ALAW: + samplesInChunk = size/enc->channels; + break; + case CODEC_ID_PCM_S16BE: + case CODEC_ID_PCM_S16LE: + samplesInChunk = size/(2*enc->channels); + break; + default: + samplesInChunk = 1; + } + } else { samplesInChunk = 1; } - else if (enc->codec_type == CODEC_TYPE_AUDIO ) { - if( enc->codec_id == CODEC_ID_AMR_NB) { - /* We must find out how many AMR blocks there are in one packet */ - static uint16_t packed_size[16] = - {13, 14, 16, 18, 20, 21, 27, 32, 6, 0, 0, 0, 0, 0, 0, 0}; - int len = 0; - while (len < size && samplesInChunk < 100) { - len += packed_size[(pkt->data[len] >> 3) & 0x0F]; - samplesInChunk++; - } - } - else if(enc->codec_id == CODEC_ID_PCM_ALAW) { - samplesInChunk = size/enc->channels; - } - else if(enc->codec_id == CODEC_ID_PCM_S16BE || enc->codec_id == CODEC_ID_PCM_S16LE) { - samplesInChunk = size/(2*enc->channels); - } - else { - samplesInChunk = 1; - } - } - - if ((enc->codec_id == CODEC_ID_MPEG4 || enc->codec_id == CODEC_ID_AAC) - && trk->vosLen == 0) { -// assert(enc->extradata_size); - + /* copy extradata if it exists */ + if (trk->vosLen == 0 && enc->extradata_size > 0) { trk->vosLen = enc->extradata_size; trk->vosData = av_malloc(trk->vosLen); memcpy(trk->vosData, enc->extradata, trk->vosLen); } - if (enc->codec_id == CODEC_ID_H264) { - if (trk->vosLen == 0) { - /* copy extradata */ - trk->vosLen = enc->extradata_size; - trk->vosData = av_malloc(trk->vosLen); - memcpy(trk->vosData, enc->extradata, trk->vosLen); - } - if (*(uint8_t *)trk->vosData != 1) { - /* from x264 or from bytestream h264 */ - /* nal reformating needed */ - avc_parse_nal_units(&pkt->data, &pkt->size); - assert(pkt->size); - size = pkt->size; - } + if (enc->codec_id == CODEC_ID_H264 && trk->vosLen > 0 && *(uint8_t *)trk->vosData != 1) { + /* from x264 or from bytestream h264 */ + /* nal reformating needed */ + avc_parse_nal_units(&pkt->data, &pkt->size); + assert(pkt->size); + size = pkt->size; } cl = trk->entry / MOV_INDEX_CLUSTER_SIZE;