fix FfmpegDecoderPlugin to use relative timestamps
This commit is contained in:
parent
a191db84f2
commit
6b3b8c6f2e
2
NEWS
2
NEWS
|
@ -3,6 +3,8 @@ ver 0.18.6 (not yet released)
|
||||||
- cdio_paranoia: support libcdio-paranoia 0.90
|
- cdio_paranoia: support libcdio-paranoia 0.90
|
||||||
* tags
|
* tags
|
||||||
- riff: recognize upper-case "ID3" chunk name
|
- riff: recognize upper-case "ID3" chunk name
|
||||||
|
* decoder
|
||||||
|
- ffmpeg: use relative timestamps
|
||||||
* output
|
* output
|
||||||
- openal: fix build failure on Mac OS X
|
- openal: fix build failure on Mac OS X
|
||||||
- osx: fix build failure
|
- osx: fix build failure
|
||||||
|
|
|
@ -251,13 +251,14 @@ static DecoderCommand
|
||||||
ffmpeg_send_packet(Decoder &decoder, InputStream &is,
|
ffmpeg_send_packet(Decoder &decoder, InputStream &is,
|
||||||
const AVPacket *packet,
|
const AVPacket *packet,
|
||||||
AVCodecContext *codec_context,
|
AVCodecContext *codec_context,
|
||||||
const AVRational *time_base,
|
const AVStream *stream,
|
||||||
AVFrame *frame,
|
AVFrame *frame,
|
||||||
uint8_t **buffer, int *buffer_size)
|
uint8_t **buffer, int *buffer_size)
|
||||||
{
|
{
|
||||||
if (packet->pts >= 0 && packet->pts != (int64_t)AV_NOPTS_VALUE)
|
if (packet->pts >= 0 && packet->pts != (int64_t)AV_NOPTS_VALUE)
|
||||||
decoder_timestamp(decoder,
|
decoder_timestamp(decoder,
|
||||||
time_from_ffmpeg(packet->pts, *time_base));
|
time_from_ffmpeg(packet->pts - stream->start_time,
|
||||||
|
stream->time_base));
|
||||||
|
|
||||||
AVPacket packet2 = *packet;
|
AVPacket packet2 = *packet;
|
||||||
|
|
||||||
|
@ -470,7 +471,7 @@ ffmpeg_decode(Decoder &decoder, InputStream &input)
|
||||||
if (packet.stream_index == audio_stream)
|
if (packet.stream_index == audio_stream)
|
||||||
cmd = ffmpeg_send_packet(decoder, input,
|
cmd = ffmpeg_send_packet(decoder, input,
|
||||||
&packet, codec_context,
|
&packet, codec_context,
|
||||||
&av_stream->time_base,
|
av_stream,
|
||||||
frame,
|
frame,
|
||||||
&interleaved_buffer, &interleaved_buffer_size);
|
&interleaved_buffer, &interleaved_buffer_size);
|
||||||
else
|
else
|
||||||
|
@ -481,7 +482,8 @@ ffmpeg_decode(Decoder &decoder, InputStream &input)
|
||||||
if (cmd == DecoderCommand::SEEK) {
|
if (cmd == DecoderCommand::SEEK) {
|
||||||
int64_t where =
|
int64_t where =
|
||||||
time_to_ffmpeg(decoder_seek_where(decoder),
|
time_to_ffmpeg(decoder_seek_where(decoder),
|
||||||
av_stream->time_base);
|
av_stream->time_base) +
|
||||||
|
av_stream->start_time;
|
||||||
|
|
||||||
if (av_seek_frame(format_context, audio_stream, where,
|
if (av_seek_frame(format_context, audio_stream, where,
|
||||||
AV_TIME_BASE) < 0)
|
AV_TIME_BASE) < 0)
|
||||||
|
|
Loading…
Reference in New Issue