Hi, On Thu, Feb 5, 2015 at 10:43 AM, wm4 <nfx...@googlemail.com> wrote:
> All the webm/vp9 files I have seen so far can have packets that contain > 1 invisible and 1 visible frame. The vp9 parser separates them. Since > the invisible frame is always (?) the first sub-packet, the new packet > is assigned the PTS of the original packet, while the packet containing > the visible frame has no PTS. > > This patch essentially reassigns the PTS from the invisible to the > visible frame. > --- > Not sure if DTS needs adjustment. > --- > libavcodec/vp9_parser.c | 12 ++++++++++++ > 1 file changed, 12 insertions(+) > > diff --git a/libavcodec/vp9_parser.c b/libavcodec/vp9_parser.c > index b188785..220290f 100644 > --- a/libavcodec/vp9_parser.c > +++ b/libavcodec/vp9_parser.c > @@ -24,10 +24,13 @@ > typedef struct VP9ParseContext { > int n_frames; // 1-8 > int size[8]; > + int64_t pts; > } VP9ParseContext; > > static void parse_frame(AVCodecParserContext *ctx, const uint8_t *buf, > int size) > { > + VP9ParseContext *s = ctx->priv_data; > + > if (buf[0] & 0x4) { > ctx->pict_type = AV_PICTURE_TYPE_P; > ctx->key_frame = 0; > @@ -35,6 +38,15 @@ static void parse_frame(AVCodecParserContext *ctx, > const uint8_t *buf, int size) > ctx->pict_type = AV_PICTURE_TYPE_I; > ctx->key_frame = 1; > } > + > + if (buf[0] & 0x2) { > + if (ctx->pts == AV_NOPTS_VALUE) > + ctx->pts = s->pts; > + s->pts = AV_NOPTS_VALUE; > + } else { > + s->pts = ctx->pts; > + ctx->pts = AV_NOPTS_VALUE; > + } > } > > static int parse(AVCodecParserContext *ctx, > -- > 2.1.4 lgtm. Ronald _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel