diff --git a/configure b/configure index 09db04772c..6275648a0f 100755 --- a/configure +++ b/configure @@ -2872,6 +2872,7 @@ done check_lib math.h sin -lm disabled crystalhd || check_lib libcrystalhd/libcrystalhd_if.h DtsCrystalHDVersion -lcrystalhd || disable crystalhd +enabled vaapi && require vaapi va/va.h vaInitialize -lva check_mathfunc exp2 check_mathfunc exp2f diff --git a/libavcodec/aacdec.c b/libavcodec/aacdec.c index 5f86b89b38..a0b67f4af7 100644 --- a/libavcodec/aacdec.c +++ b/libavcodec/aacdec.c @@ -969,19 +969,19 @@ static inline float *VMUL4S(float *dst, const float *v, unsigned idx, union float754 s = { .f = *scale }; union float754 t; - t.i = s.i ^ (sign & 1<<31); + t.i = s.i ^ (sign & 1U<<31); *dst++ = v[idx & 3] * t.f; sign <<= nz & 1; nz >>= 1; - t.i = s.i ^ (sign & 1<<31); + t.i = s.i ^ (sign & 1U<<31); *dst++ = v[idx>>2 & 3] * t.f; sign <<= nz & 1; nz >>= 1; - t.i = s.i ^ (sign & 1<<31); + t.i = s.i ^ (sign & 1U<<31); *dst++ = v[idx>>4 & 3] * t.f; sign <<= nz & 1; nz >>= 1; - t.i = s.i ^ (sign & 1<<31); + t.i = s.i ^ (sign & 1U<<31); *dst++ = v[idx>>6 & 3] * t.f; return dst; @@ -1174,11 +1174,11 @@ static int decode_spectrum_and_dequant(AACContext *ac, float coef[1024], b += 4; n = (1 << b) + SHOW_UBITS(re, gb, b); LAST_SKIP_BITS(re, gb, b); - *icf++ = cbrt_tab[n] | (bits & 1<<31); + *icf++ = cbrt_tab[n] | (bits & 1U<<31); bits <<= 1; } else { unsigned v = ((const uint32_t*)vq)[cb_idx & 15]; - *icf++ = (bits & 1<<31) | v; + *icf++ = (bits & 1U<<31) | v; bits <<= !!v; } cb_idx >>= 4; diff --git a/libavcodec/audioconvert.c b/libavcodec/audioconvert.c index 67cacbdcf1..e101095e40 100644 --- a/libavcodec/audioconvert.c +++ b/libavcodec/audioconvert.c @@ -145,8 +145,8 @@ if(ctx->fmt_pair == ofmt + AV_SAMPLE_FMT_NB*ifmt){\ else CONV(AV_SAMPLE_FMT_U8 , uint8_t, AV_SAMPLE_FMT_S32, (*(const int32_t*)pi>>24) + 0x80) else CONV(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_S32, *(const int32_t*)pi>>16) else CONV(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_S32, *(const int32_t*)pi) - else CONV(AV_SAMPLE_FMT_FLT, float , AV_SAMPLE_FMT_S32, *(const int32_t*)pi*(1.0 / (1<<31))) - else CONV(AV_SAMPLE_FMT_DBL, double , AV_SAMPLE_FMT_S32, *(const int32_t*)pi*(1.0 / (1<<31))) + else CONV(AV_SAMPLE_FMT_FLT, float , AV_SAMPLE_FMT_S32, *(const int32_t*)pi*(1.0 / (1U<<31))) + else CONV(AV_SAMPLE_FMT_DBL, double , AV_SAMPLE_FMT_S32, *(const int32_t*)pi*(1.0 / (1U<<31))) else CONV(AV_SAMPLE_FMT_U8 , uint8_t, AV_SAMPLE_FMT_FLT, av_clip_uint8( lrintf(*(const float*)pi * (1<<7)) + 0x80)) else CONV(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_FLT, av_clip_int16( lrintf(*(const float*)pi * (1<<15)))) else CONV(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_FLT, av_clipl_int32(llrintf(*(const float*)pi * (1U<<31)))) diff --git a/libavcodec/dsputil.c b/libavcodec/dsputil.c index de74fe7ac5..90e6440a87 100644 --- a/libavcodec/dsputil.c +++ b/libavcodec/dsputil.c @@ -2610,7 +2610,7 @@ static inline uint32_t clipf_c_one(uint32_t a, uint32_t mini, { if(a > mini) return mini; - else if((a^(1<<31)) > maxisign) return maxi; + else if((a^(1U<<31)) > maxisign) return maxi; else return a; } @@ -2618,7 +2618,7 @@ static void vector_clipf_c_opposite_sign(float *dst, const float *src, float *mi int i; uint32_t mini = *(uint32_t*)min; uint32_t maxi = *(uint32_t*)max; - uint32_t maxisign = maxi ^ (1<<31); + uint32_t maxisign = maxi ^ (1U<<31); uint32_t *dsti = (uint32_t*)dst; const uint32_t *srci = (const uint32_t*)src; for(i=0; ipict_type = (header & (1<<31))? FF_P_TYPE : FF_I_TYPE; + f->pict_type = (header & (1U<<31))? FF_P_TYPE : FF_I_TYPE; f->key_frame = f->pict_type == FF_I_TYPE; if (f->pict_type == FF_I_TYPE) { @@ -223,7 +223,7 @@ static int decode_frame(AVCodecContext *avctx, return -1; } /* bit 31 means same as previous pic */ - f->pict_type = (header & (1<<31))? FF_P_TYPE : FF_I_TYPE; + f->pict_type = (header & (1U<<31))? FF_P_TYPE : FF_I_TYPE; f->key_frame = f->pict_type == FF_I_TYPE; if (f->pict_type == FF_I_TYPE) { diff --git a/libavcodec/libvo-aacenc.c b/libavcodec/libvo-aacenc.c index 7e2e3070b1..205c00e922 100644 --- a/libavcodec/libvo-aacenc.c +++ b/libavcodec/libvo-aacenc.c @@ -122,7 +122,7 @@ AVCodec ff_libvo_aacenc_encoder = { aac_encode_frame, aac_encode_close, NULL, - .sample_fmts = (const enum SampleFormat[]){SAMPLE_FMT_S16,SAMPLE_FMT_NONE}, - .long_name = NULL_IF_CONFIG_SMALL("VisualOn libvo-aacenc AAC"), + .sample_fmts = (const enum AVSampleFormat[]){AV_SAMPLE_FMT_S16,AV_SAMPLE_FMT_NONE}, + .long_name = NULL_IF_CONFIG_SMALL("libvo-aacenc AAC"), }; diff --git a/libavcodec/libvo-amrwbenc.c b/libavcodec/libvo-amrwbenc.c index c5c3b4eaf7..661a15d445 100644 --- a/libavcodec/libvo-amrwbenc.c +++ b/libavcodec/libvo-amrwbenc.c @@ -120,8 +120,8 @@ AVCodec ff_libvo_amrwbenc_encoder = { amr_wb_encode_frame, amr_wb_encode_close, NULL, - .sample_fmts = (const enum SampleFormat[]){SAMPLE_FMT_S16,SAMPLE_FMT_NONE}, - .long_name = NULL_IF_CONFIG_SMALL("VisualOn libvo-amrwbenc Adaptive Multi-Rate " + .sample_fmts = (const enum AVSampleFormat[]){AV_SAMPLE_FMT_S16,AV_SAMPLE_FMT_NONE}, + .long_name = NULL_IF_CONFIG_SMALL("libvo-amrwbenc Adaptive Multi-Rate " "(AMR) Wide-Band"), }; diff --git a/libavcodec/ppc/fft_altivec.c b/libavcodec/ppc/fft_altivec.c index ec610b0a4c..1ea2369f55 100644 --- a/libavcodec/ppc/fft_altivec.c +++ b/libavcodec/ppc/fft_altivec.c @@ -122,7 +122,7 @@ static void ff_imdct_calc_altivec(FFTContext *s, FFTSample *output, const FFTSam int n = 1 << s->mdct_bits; int n4 = n >> 2; int n16 = n >> 4; - vec_u32 sign = {1<<31,1<<31,1<<31,1<<31}; + vec_u32 sign = {1U<<31,1U<<31,1U<<31,1U<<31}; vec_u32 *p0 = (vec_u32*)(output+n4); vec_u32 *p1 = (vec_u32*)(output+n4*3); diff --git a/libavcodec/vorbis_enc.c b/libavcodec/vorbis_enc.c index 7dae4cb2b0..d15d3454eb 100644 --- a/libavcodec/vorbis_enc.c +++ b/libavcodec/vorbis_enc.c @@ -394,7 +394,7 @@ static void put_float(PutBitContext *pb, float f) mant = (int)ldexp(frexp(f, &exp), 20); exp += 788 - 20; if (mant < 0) { - res |= (1 << 31); + res |= (1U << 31); mant = -mant; } res |= mant | (exp << 21); diff --git a/libavformat/asfdec.c b/libavformat/asfdec.c index 9724c84992..dbb3f82205 100644 --- a/libavformat/asfdec.c +++ b/libavformat/asfdec.c @@ -1234,7 +1234,7 @@ static int asf_read_seek(AVFormatContext *s, int stream_index, int64_t pts, int /* Try using the protocol's read_seek if available */ if(s->pb) { - int ret = ffio_read_seek(s->pb, stream_index, pts, flags); + int ret = avio_seek_time(s->pb, stream_index, pts, flags); if(ret >= 0) asf_reset_header(s); if (ret != AVERROR(ENOSYS)) diff --git a/libavformat/avio.h b/libavformat/avio.h index fa43340f9c..7deca337cf 100644 --- a/libavformat/avio.h +++ b/libavformat/avio.h @@ -618,4 +618,31 @@ int udp_get_file_handle(URLContext *h); */ const char *avio_enum_protocols(void **opaque, int output); +/** + * Pause and resume playing - only meaningful if using a network streaming + * protocol (e.g. MMS). + * @param pause 1 for pause, 0 for resume + */ +int avio_pause(AVIOContext *h, int pause); + +/** + * Seek to a given timestamp relative to some component stream. + * Only meaningful if using a network streaming protocol (e.g. MMS.). + * @param stream_index The stream index that the timestamp is relative to. + * If stream_index is (-1) the timestamp should be in AV_TIME_BASE + * units from the beginning of the presentation. + * If a stream_index >= 0 is used and the protocol does not support + * seeking based on component streams, the call will fail with ENOTSUP. + * @param timestamp timestamp in AVStream.time_base units + * or if there is no stream specified then in AV_TIME_BASE units. + * @param flags Optional combination of AVSEEK_FLAG_BACKWARD, AVSEEK_FLAG_BYTE + * and AVSEEK_FLAG_ANY. The protocol may silently ignore + * AVSEEK_FLAG_BACKWARD and AVSEEK_FLAG_ANY, but AVSEEK_FLAG_BYTE will + * fail with ENOTSUP if used and not supported. + * @return >= 0 on success + * @see AVInputFormat::read_seek + */ +int64_t avio_seek_time(AVIOContext *h, int stream_index, + int64_t timestamp, int flags); + #endif /* AVFORMAT_AVIO_H */ diff --git a/libavformat/avio_internal.h b/libavformat/avio_internal.h index 71a6846ef8..92528f2d18 100644 --- a/libavformat/avio_internal.h +++ b/libavformat/avio_internal.h @@ -67,32 +67,6 @@ uint64_t ffio_read_varlen(AVIOContext *bc); /** @warning must be called before any I/O */ int ffio_set_buf_size(AVIOContext *s, int buf_size); -/** - * Pause and resume playing - only meaningful if using a network streaming - * protocol (e.g. MMS). - * @param pause 1 for pause, 0 for resume - */ -int ffio_read_pause(AVIOContext *h, int pause); -/** - * Seek to a given timestamp relative to some component stream. - * Only meaningful if using a network streaming protocol (e.g. MMS.). - * @param stream_index The stream index that the timestamp is relative to. - * If stream_index is (-1) the timestamp should be in AV_TIME_BASE - * units from the beginning of the presentation. - * If a stream_index >= 0 is used and the protocol does not support - * seeking based on component streams, the call will fail with ENOTSUP. - * @param timestamp timestamp in AVStream.time_base units - * or if there is no stream specified then in AV_TIME_BASE units. - * @param flags Optional combination of AVSEEK_FLAG_BACKWARD, AVSEEK_FLAG_BYTE - * and AVSEEK_FLAG_ANY. The protocol may silently ignore - * AVSEEK_FLAG_BACKWARD and AVSEEK_FLAG_ANY, but AVSEEK_FLAG_BYTE will - * fail with ENOTSUP if used and not supported. - * @return >= 0 on success - * @see AVInputFormat::read_seek - */ -int64_t ffio_read_seek (AVIOContext *h, int stream_index, - int64_t timestamp, int flags); - void ffio_init_checksum(AVIOContext *s, unsigned long (*update_checksum)(unsigned long c, const uint8_t *p, unsigned int len), unsigned long checksum); diff --git a/libavformat/aviobuf.c b/libavformat/aviobuf.c index fb6a0c7b69..70084e9323 100644 --- a/libavformat/aviobuf.c +++ b/libavformat/aviobuf.c @@ -412,12 +412,12 @@ void put_flush_packet(AVIOContext *s) } int av_url_read_fpause(AVIOContext *s, int pause) { - return ffio_read_pause(s, pause); + return avio_pause(s, pause); } int64_t av_url_read_fseek(AVIOContext *s, int stream_index, int64_t timestamp, int flags) { - return ffio_read_seek(s, stream_index, timestamp, flags); + return avio_seek_time(s, stream_index, timestamp, flags); } void init_checksum(AVIOContext *s, unsigned long (*update_checksum)(unsigned long c, const uint8_t *p, unsigned int len), @@ -1022,14 +1022,14 @@ int url_fget_max_packet_size(AVIOContext *s) } #endif -int ffio_read_pause(AVIOContext *s, int pause) +int avio_pause(AVIOContext *s, int pause) { if (!s->read_pause) return AVERROR(ENOSYS); return s->read_pause(s->opaque, pause); } -int64_t ffio_read_seek(AVIOContext *s, int stream_index, +int64_t avio_seek_time(AVIOContext *s, int stream_index, int64_t timestamp, int flags) { URLContext *h = s->opaque; diff --git a/libavformat/flvdec.c b/libavformat/flvdec.c index d06cfcc8d5..58a2abad2b 100644 --- a/libavformat/flvdec.c +++ b/libavformat/flvdec.c @@ -130,8 +130,8 @@ static int parse_keyframes_index(AVFormatContext *s, AVIOContext *ioc, AVStream char str_val[256]; int64_t *times = NULL; int64_t *filepositions = NULL; - int ret = 0; - int64_t initial_pos = url_ftell(ioc); + int ret = AVERROR(ENOSYS); + int64_t initial_pos = avio_tell(ioc); while (avio_tell(ioc) < max_pos - 2 && amf_get_string(ioc, str_val, sizeof(str_val)) > 0) { int64_t** current_array; @@ -164,6 +164,12 @@ static int parse_keyframes_index(AVFormatContext *s, AVIOContext *ioc, AVStream goto finish; current_array[0][i] = av_int2dbl(avio_rb64(ioc)); } + if (times && filepositions) { + // All done, exiting at a position allowing amf_parse_object + // to finish parsing the object + ret = 0; + break; + } } if (timeslen == fileposlen) { @@ -520,7 +526,7 @@ leave: static int flv_read_seek(AVFormatContext *s, int stream_index, int64_t ts, int flags) { - return ffio_read_seek(s->pb, stream_index, ts, flags); + return avio_seek_time(s->pb, stream_index, ts, flags); } #if 0 /* don't know enough to implement this */ @@ -541,7 +547,7 @@ static int flv_read_seek2(AVFormatContext *s, int stream_index, ts = av_rescale_rnd(ts, 1000, AV_TIME_BASE, flags & AVSEEK_FLAG_BACKWARD ? AV_ROUND_DOWN : AV_ROUND_UP); } - ret = ffio_read_seek(s->pb, stream_index, ts, flags); + ret = avio_seek_time(s->pb, stream_index, ts, flags); } if (ret == AVERROR(ENOSYS)) diff --git a/libavformat/utils.c b/libavformat/utils.c index 835408bc32..0ea8ca94a9 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -2600,7 +2600,7 @@ int av_read_play(AVFormatContext *s) if (s->iformat->read_play) return s->iformat->read_play(s); if (s->pb) - return ffio_read_pause(s->pb, 0); + return avio_pause(s->pb, 0); return AVERROR(ENOSYS); } @@ -2609,7 +2609,7 @@ int av_read_pause(AVFormatContext *s) if (s->iformat->read_pause) return s->iformat->read_pause(s); if (s->pb) - return ffio_read_pause(s->pb, 1); + return avio_pause(s->pb, 1); return AVERROR(ENOSYS); }