mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2025-01-21 23:03:13 +00:00
mpeg audio timestamp fix
Originally committed as revision 3150 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
e06d3d553c
commit
a62aecce2c
@ -17,7 +17,7 @@ extern "C" {
|
|||||||
|
|
||||||
#define FFMPEG_VERSION_INT 0x000408
|
#define FFMPEG_VERSION_INT 0x000408
|
||||||
#define FFMPEG_VERSION "0.4.8"
|
#define FFMPEG_VERSION "0.4.8"
|
||||||
#define LIBAVCODEC_BUILD 4714
|
#define LIBAVCODEC_BUILD 4715
|
||||||
|
|
||||||
#define LIBAVCODEC_VERSION_INT FFMPEG_VERSION_INT
|
#define LIBAVCODEC_VERSION_INT FFMPEG_VERSION_INT
|
||||||
#define LIBAVCODEC_VERSION FFMPEG_VERSION
|
#define LIBAVCODEC_VERSION FFMPEG_VERSION
|
||||||
@ -2090,6 +2090,7 @@ typedef struct AVCodecParserContext {
|
|||||||
/* private data */
|
/* private data */
|
||||||
int64_t last_pts;
|
int64_t last_pts;
|
||||||
int64_t last_dts;
|
int64_t last_dts;
|
||||||
|
int fetch_timestamp;
|
||||||
|
|
||||||
#define AV_PARSER_PTS_NB 4
|
#define AV_PARSER_PTS_NB 4
|
||||||
int cur_frame_start_index;
|
int cur_frame_start_index;
|
||||||
|
@ -60,6 +60,7 @@ AVCodecParserContext *av_parser_init(int codec_id)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
s->fetch_timestamp=1;
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -87,7 +88,8 @@ int av_parser_parse(AVCodecParserContext *s,
|
|||||||
s->cur_frame_dts[k] = dts;
|
s->cur_frame_dts[k] = dts;
|
||||||
|
|
||||||
/* fill first PTS/DTS */
|
/* fill first PTS/DTS */
|
||||||
if (s->cur_offset == 0) {
|
if (s->fetch_timestamp){
|
||||||
|
s->fetch_timestamp=0;
|
||||||
s->last_pts = pts;
|
s->last_pts = pts;
|
||||||
s->last_dts = dts;
|
s->last_dts = dts;
|
||||||
}
|
}
|
||||||
@ -95,6 +97,7 @@ int av_parser_parse(AVCodecParserContext *s,
|
|||||||
|
|
||||||
/* WARNING: the returned index can be negative */
|
/* WARNING: the returned index can be negative */
|
||||||
index = s->parser->parser_parse(s, avctx, poutbuf, poutbuf_size, buf, buf_size);
|
index = s->parser->parser_parse(s, avctx, poutbuf, poutbuf_size, buf, buf_size);
|
||||||
|
//av_log(NULL, AV_LOG_DEBUG, "parser: in:%lld, %lld, out:%lld, %lld, in:%d out:%d %d\n", pts, dts, s->last_pts, s->last_dts, buf_size, *poutbuf_size, avctx->codec_id);
|
||||||
/* update the file pointer */
|
/* update the file pointer */
|
||||||
if (*poutbuf_size) {
|
if (*poutbuf_size) {
|
||||||
/* fill the data for the current frame */
|
/* fill the data for the current frame */
|
||||||
@ -116,8 +119,15 @@ int av_parser_parse(AVCodecParserContext *s,
|
|||||||
break;
|
break;
|
||||||
k = (k - 1) & (AV_PARSER_PTS_NB - 1);
|
k = (k - 1) & (AV_PARSER_PTS_NB - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
s->last_pts = s->cur_frame_pts[k];
|
s->last_pts = s->cur_frame_pts[k];
|
||||||
s->last_dts = s->cur_frame_dts[k];
|
s->last_dts = s->cur_frame_dts[k];
|
||||||
|
|
||||||
|
/* some parsers tell us the packet size even before seeing the first byte of the next packet,
|
||||||
|
so the next pts/dts is in the next chunk */
|
||||||
|
if(index == buf_size){
|
||||||
|
s->fetch_timestamp=1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (index < 0)
|
if (index < 0)
|
||||||
index = 0;
|
index = 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user