You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-15 14:13:16 +02:00
Merge remote branch 'qatar/master'
* qatar/master: Partially merged:flvdec: Allow parsing keyframes metadata without seeking in most cases Error out if vaapi is not found avio: undeprecate av_url_read_fseek/fpause under nicer names libvo-*: Don't use deprecated sample format names and enum names DUPLICATE flvdec: Fix support for flvtool2 "keyframes based" generated index DUPLICATE libavcodec: Use "const enum AVSampleFormat[]" in AVCodec initialization Fix the conversion of AV_SAMPLE_FMT_FLT and _DBL to AV_SAMPLE_FMT_S32. Convert some undefined 1<<31 shifts into 1U<<31. Conflicts: configure libavcodec/libvo-aacenc.c libavcodec/libvo-amrwbenc.c libavformat/flvdec.c Marged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
1
configure
vendored
1
configure
vendored
@@ -2872,6 +2872,7 @@ done
|
|||||||
|
|
||||||
check_lib math.h sin -lm
|
check_lib math.h sin -lm
|
||||||
disabled crystalhd || check_lib libcrystalhd/libcrystalhd_if.h DtsCrystalHDVersion -lcrystalhd || disable crystalhd
|
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 exp2
|
||||||
check_mathfunc exp2f
|
check_mathfunc exp2f
|
||||||
|
@@ -969,19 +969,19 @@ static inline float *VMUL4S(float *dst, const float *v, unsigned idx,
|
|||||||
union float754 s = { .f = *scale };
|
union float754 s = { .f = *scale };
|
||||||
union float754 t;
|
union float754 t;
|
||||||
|
|
||||||
t.i = s.i ^ (sign & 1<<31);
|
t.i = s.i ^ (sign & 1U<<31);
|
||||||
*dst++ = v[idx & 3] * t.f;
|
*dst++ = v[idx & 3] * t.f;
|
||||||
|
|
||||||
sign <<= nz & 1; nz >>= 1;
|
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;
|
*dst++ = v[idx>>2 & 3] * t.f;
|
||||||
|
|
||||||
sign <<= nz & 1; nz >>= 1;
|
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;
|
*dst++ = v[idx>>4 & 3] * t.f;
|
||||||
|
|
||||||
sign <<= nz & 1; nz >>= 1;
|
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;
|
*dst++ = v[idx>>6 & 3] * t.f;
|
||||||
|
|
||||||
return dst;
|
return dst;
|
||||||
@@ -1174,11 +1174,11 @@ static int decode_spectrum_and_dequant(AACContext *ac, float coef[1024],
|
|||||||
b += 4;
|
b += 4;
|
||||||
n = (1 << b) + SHOW_UBITS(re, gb, b);
|
n = (1 << b) + SHOW_UBITS(re, gb, b);
|
||||||
LAST_SKIP_BITS(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;
|
bits <<= 1;
|
||||||
} else {
|
} else {
|
||||||
unsigned v = ((const uint32_t*)vq)[cb_idx & 15];
|
unsigned v = ((const uint32_t*)vq)[cb_idx & 15];
|
||||||
*icf++ = (bits & 1<<31) | v;
|
*icf++ = (bits & 1U<<31) | v;
|
||||||
bits <<= !!v;
|
bits <<= !!v;
|
||||||
}
|
}
|
||||||
cb_idx >>= 4;
|
cb_idx >>= 4;
|
||||||
|
@@ -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_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_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_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_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 / (1<<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_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_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))))
|
else CONV(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_FLT, av_clipl_int32(llrintf(*(const float*)pi * (1U<<31))))
|
||||||
|
@@ -2610,7 +2610,7 @@ static inline uint32_t clipf_c_one(uint32_t a, uint32_t mini,
|
|||||||
{
|
{
|
||||||
|
|
||||||
if(a > mini) return 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;
|
else return a;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2618,7 +2618,7 @@ static void vector_clipf_c_opposite_sign(float *dst, const float *src, float *mi
|
|||||||
int i;
|
int i;
|
||||||
uint32_t mini = *(uint32_t*)min;
|
uint32_t mini = *(uint32_t*)min;
|
||||||
uint32_t maxi = *(uint32_t*)max;
|
uint32_t maxi = *(uint32_t*)max;
|
||||||
uint32_t maxisign = maxi ^ (1<<31);
|
uint32_t maxisign = maxi ^ (1U<<31);
|
||||||
uint32_t *dsti = (uint32_t*)dst;
|
uint32_t *dsti = (uint32_t*)dst;
|
||||||
const uint32_t *srci = (const uint32_t*)src;
|
const uint32_t *srci = (const uint32_t*)src;
|
||||||
for(i=0; i<len; i+=8) {
|
for(i=0; i<len; i+=8) {
|
||||||
|
@@ -180,7 +180,7 @@ static int decode_frame(AVCodecContext *avctx,
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
/* bit 31 means same as previous pic */
|
/* 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;
|
f->key_frame = f->pict_type == FF_I_TYPE;
|
||||||
|
|
||||||
if (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;
|
return -1;
|
||||||
}
|
}
|
||||||
/* bit 31 means same as previous pic */
|
/* 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;
|
f->key_frame = f->pict_type == FF_I_TYPE;
|
||||||
|
|
||||||
if (f->pict_type == FF_I_TYPE) {
|
if (f->pict_type == FF_I_TYPE) {
|
||||||
|
@@ -122,7 +122,7 @@ AVCodec ff_libvo_aacenc_encoder = {
|
|||||||
aac_encode_frame,
|
aac_encode_frame,
|
||||||
aac_encode_close,
|
aac_encode_close,
|
||||||
NULL,
|
NULL,
|
||||||
.sample_fmts = (const enum SampleFormat[]){SAMPLE_FMT_S16,SAMPLE_FMT_NONE},
|
.sample_fmts = (const enum AVSampleFormat[]){AV_SAMPLE_FMT_S16,AV_SAMPLE_FMT_NONE},
|
||||||
.long_name = NULL_IF_CONFIG_SMALL("VisualOn libvo-aacenc AAC"),
|
.long_name = NULL_IF_CONFIG_SMALL("libvo-aacenc AAC"),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -120,8 +120,8 @@ AVCodec ff_libvo_amrwbenc_encoder = {
|
|||||||
amr_wb_encode_frame,
|
amr_wb_encode_frame,
|
||||||
amr_wb_encode_close,
|
amr_wb_encode_close,
|
||||||
NULL,
|
NULL,
|
||||||
.sample_fmts = (const enum SampleFormat[]){SAMPLE_FMT_S16,SAMPLE_FMT_NONE},
|
.sample_fmts = (const enum AVSampleFormat[]){AV_SAMPLE_FMT_S16,AV_SAMPLE_FMT_NONE},
|
||||||
.long_name = NULL_IF_CONFIG_SMALL("VisualOn libvo-amrwbenc Adaptive Multi-Rate "
|
.long_name = NULL_IF_CONFIG_SMALL("libvo-amrwbenc Adaptive Multi-Rate "
|
||||||
"(AMR) Wide-Band"),
|
"(AMR) Wide-Band"),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -122,7 +122,7 @@ static void ff_imdct_calc_altivec(FFTContext *s, FFTSample *output, const FFTSam
|
|||||||
int n = 1 << s->mdct_bits;
|
int n = 1 << s->mdct_bits;
|
||||||
int n4 = n >> 2;
|
int n4 = n >> 2;
|
||||||
int n16 = n >> 4;
|
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 *p0 = (vec_u32*)(output+n4);
|
||||||
vec_u32 *p1 = (vec_u32*)(output+n4*3);
|
vec_u32 *p1 = (vec_u32*)(output+n4*3);
|
||||||
|
|
||||||
|
@@ -394,7 +394,7 @@ static void put_float(PutBitContext *pb, float f)
|
|||||||
mant = (int)ldexp(frexp(f, &exp), 20);
|
mant = (int)ldexp(frexp(f, &exp), 20);
|
||||||
exp += 788 - 20;
|
exp += 788 - 20;
|
||||||
if (mant < 0) {
|
if (mant < 0) {
|
||||||
res |= (1 << 31);
|
res |= (1U << 31);
|
||||||
mant = -mant;
|
mant = -mant;
|
||||||
}
|
}
|
||||||
res |= mant | (exp << 21);
|
res |= mant | (exp << 21);
|
||||||
|
@@ -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 */
|
/* Try using the protocol's read_seek if available */
|
||||||
if(s->pb) {
|
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)
|
if(ret >= 0)
|
||||||
asf_reset_header(s);
|
asf_reset_header(s);
|
||||||
if (ret != AVERROR(ENOSYS))
|
if (ret != AVERROR(ENOSYS))
|
||||||
|
@@ -618,4 +618,31 @@ int udp_get_file_handle(URLContext *h);
|
|||||||
*/
|
*/
|
||||||
const char *avio_enum_protocols(void **opaque, int output);
|
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 */
|
#endif /* AVFORMAT_AVIO_H */
|
||||||
|
@@ -67,32 +67,6 @@ uint64_t ffio_read_varlen(AVIOContext *bc);
|
|||||||
/** @warning must be called before any I/O */
|
/** @warning must be called before any I/O */
|
||||||
int ffio_set_buf_size(AVIOContext *s, int buf_size);
|
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,
|
void ffio_init_checksum(AVIOContext *s,
|
||||||
unsigned long (*update_checksum)(unsigned long c, const uint8_t *p, unsigned int len),
|
unsigned long (*update_checksum)(unsigned long c, const uint8_t *p, unsigned int len),
|
||||||
unsigned long checksum);
|
unsigned long checksum);
|
||||||
|
@@ -412,12 +412,12 @@ void put_flush_packet(AVIOContext *s)
|
|||||||
}
|
}
|
||||||
int av_url_read_fpause(AVIOContext *s, int pause)
|
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 av_url_read_fseek(AVIOContext *s, int stream_index,
|
||||||
int64_t timestamp, int flags)
|
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,
|
void init_checksum(AVIOContext *s,
|
||||||
unsigned long (*update_checksum)(unsigned long c, const uint8_t *p, unsigned int len),
|
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
|
#endif
|
||||||
|
|
||||||
int ffio_read_pause(AVIOContext *s, int pause)
|
int avio_pause(AVIOContext *s, int pause)
|
||||||
{
|
{
|
||||||
if (!s->read_pause)
|
if (!s->read_pause)
|
||||||
return AVERROR(ENOSYS);
|
return AVERROR(ENOSYS);
|
||||||
return s->read_pause(s->opaque, pause);
|
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)
|
int64_t timestamp, int flags)
|
||||||
{
|
{
|
||||||
URLContext *h = s->opaque;
|
URLContext *h = s->opaque;
|
||||||
|
@@ -130,8 +130,8 @@ static int parse_keyframes_index(AVFormatContext *s, AVIOContext *ioc, AVStream
|
|||||||
char str_val[256];
|
char str_val[256];
|
||||||
int64_t *times = NULL;
|
int64_t *times = NULL;
|
||||||
int64_t *filepositions = NULL;
|
int64_t *filepositions = NULL;
|
||||||
int ret = 0;
|
int ret = AVERROR(ENOSYS);
|
||||||
int64_t initial_pos = url_ftell(ioc);
|
int64_t initial_pos = avio_tell(ioc);
|
||||||
|
|
||||||
while (avio_tell(ioc) < max_pos - 2 && amf_get_string(ioc, str_val, sizeof(str_val)) > 0) {
|
while (avio_tell(ioc) < max_pos - 2 && amf_get_string(ioc, str_val, sizeof(str_val)) > 0) {
|
||||||
int64_t** current_array;
|
int64_t** current_array;
|
||||||
@@ -164,6 +164,12 @@ static int parse_keyframes_index(AVFormatContext *s, AVIOContext *ioc, AVStream
|
|||||||
goto finish;
|
goto finish;
|
||||||
current_array[0][i] = av_int2dbl(avio_rb64(ioc));
|
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) {
|
if (timeslen == fileposlen) {
|
||||||
@@ -520,7 +526,7 @@ leave:
|
|||||||
static int flv_read_seek(AVFormatContext *s, int stream_index,
|
static int flv_read_seek(AVFormatContext *s, int stream_index,
|
||||||
int64_t ts, int flags)
|
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 */
|
#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,
|
ts = av_rescale_rnd(ts, 1000, AV_TIME_BASE,
|
||||||
flags & AVSEEK_FLAG_BACKWARD ? AV_ROUND_DOWN : AV_ROUND_UP);
|
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))
|
if (ret == AVERROR(ENOSYS))
|
||||||
|
@@ -2600,7 +2600,7 @@ int av_read_play(AVFormatContext *s)
|
|||||||
if (s->iformat->read_play)
|
if (s->iformat->read_play)
|
||||||
return s->iformat->read_play(s);
|
return s->iformat->read_play(s);
|
||||||
if (s->pb)
|
if (s->pb)
|
||||||
return ffio_read_pause(s->pb, 0);
|
return avio_pause(s->pb, 0);
|
||||||
return AVERROR(ENOSYS);
|
return AVERROR(ENOSYS);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2609,7 +2609,7 @@ int av_read_pause(AVFormatContext *s)
|
|||||||
if (s->iformat->read_pause)
|
if (s->iformat->read_pause)
|
||||||
return s->iformat->read_pause(s);
|
return s->iformat->read_pause(s);
|
||||||
if (s->pb)
|
if (s->pb)
|
||||||
return ffio_read_pause(s->pb, 1);
|
return avio_pause(s->pb, 1);
|
||||||
return AVERROR(ENOSYS);
|
return AVERROR(ENOSYS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user