*/
int av_new_packet(AVPacket *pkt, int size)
{
- int64_t* p;
- pkt->data = av_malloc(size + 9);
+ int i;
+ pkt->data = av_malloc(size + FF_INPUT_BUFFER_PADDING_SIZE);
if (!pkt->data)
return AVERROR_NOMEM;
pkt->size = size;
pkt->pts = AV_NOPTS_VALUE;
pkt->stream_index = 0;
pkt->flags = 0;
- p = (int64_t*)&pkt->data[size];
- *p = 0;
+
+ for(i=0; i<FF_INPUT_BUFFER_PADDING_SIZE; i++)
+ pkt->data[size+i]= 0;
+
return 0;
}
if (buf_size > 0) {
url_setbufsize(&ic->pb, buf_size);
}
- /* read probe data */
- pd->buf_size = get_buffer(&ic->pb, buf, PROBE_BUF_SIZE);
- url_fseek(&ic->pb, 0, SEEK_SET);
+ if (!fmt) {
+ /* read probe data */
+ pd->buf_size = get_buffer(&ic->pb, buf, PROBE_BUF_SIZE);
+ url_fseek(&ic->pb, 0, SEEK_SET);
+ }
}
/* guess file format */
goto fail;
}
+ /* XXX: suppress this hack for redirectors */
+ if (fmt == &redir_demux) {
+ err = redir_open(ic_ptr, &ic->pb);
+ url_fclose(&ic->pb);
+ av_free(ic);
+ return err;
+ }
+
ic->iformat = fmt;
/* allocate private data */
st->codec_info_state = CSTATE_FOUND;
codec = avcodec_find_decoder(st->codec.codec_id);
if (codec) {
+ if(codec->capabilities & CODEC_CAP_TRUNCATED)
+ st->codec.flags |= CODEC_FLAG_TRUNCATED;
+
ret = avcodec_open(&st->codec, codec);
if (ret >= 0)
st->codec_info_state = CSTATE_DECODING;
{
AVStream *st;
INT64 pts_mask;
- int ret;
+ int ret, frame_size;
st = s->streams[stream_index];
pts_mask = (1LL << s->pts_wrap_bits) - 1;
/* update pts */
switch (st->codec.codec_type) {
case CODEC_TYPE_AUDIO:
+ if (st->codec.frame_size <= 1) {
+ frame_size = size / st->codec.channels;
+ /* specific hack for pcm codecs because no frame size is provided */
+ switch(st->codec.codec_id) {
+ case CODEC_ID_PCM_S16LE:
+ case CODEC_ID_PCM_S16BE:
+ case CODEC_ID_PCM_U16LE:
+ case CODEC_ID_PCM_U16BE:
+ frame_size >>= 1;
+ break;
+ default:
+ break;
+ }
+ } else {
+ frame_size = st->codec.frame_size;
+ }
av_frac_add(&st->pts,
- (INT64)s->pts_den * st->codec.frame_size);
+ (INT64)s->pts_den * frame_size);
break;
case CODEC_TYPE_VIDEO:
av_frac_add(&st->pts,