Commit 48ce8b8d authored by Kostya Shishkov's avatar Kostya Shishkov Committed by Anton Khirnov

Use parsers for RealVideo 3/4 to determine correct PTS

Signed-off-by: 's avatarAnton Khirnov <anton@khirnov.net>
parent 7c1f6df4
...@@ -616,6 +616,8 @@ OBJS-$(CONFIG_MPEGVIDEO_PARSER) += mpegvideo_parser.o \ ...@@ -616,6 +616,8 @@ OBJS-$(CONFIG_MPEGVIDEO_PARSER) += mpegvideo_parser.o \
mpeg12.o mpeg12data.o \ mpeg12.o mpeg12data.o \
mpegvideo.o error_resilience.o mpegvideo.o error_resilience.o
OBJS-$(CONFIG_PNM_PARSER) += pnm_parser.o pnm.o OBJS-$(CONFIG_PNM_PARSER) += pnm_parser.o pnm.o
OBJS-$(CONFIG_RV30_PARSER) += rv34_parser.o
OBJS-$(CONFIG_RV40_PARSER) += rv34_parser.o
OBJS-$(CONFIG_VC1_PARSER) += vc1_parser.o vc1.o vc1data.o \ OBJS-$(CONFIG_VC1_PARSER) += vc1_parser.o vc1.o vc1data.o \
msmpeg4.o msmpeg4data.o mpeg4video.o \ msmpeg4.o msmpeg4data.o mpeg4video.o \
h263.o mpegvideo.o error_resilience.o h263.o mpegvideo.o error_resilience.o
......
...@@ -396,6 +396,8 @@ void avcodec_register_all(void) ...@@ -396,6 +396,8 @@ void avcodec_register_all(void)
REGISTER_PARSER (MPEGAUDIO, mpegaudio); REGISTER_PARSER (MPEGAUDIO, mpegaudio);
REGISTER_PARSER (MPEGVIDEO, mpegvideo); REGISTER_PARSER (MPEGVIDEO, mpegvideo);
REGISTER_PARSER (PNM, pnm); REGISTER_PARSER (PNM, pnm);
REGISTER_PARSER (RV30, rv30);
REGISTER_PARSER (RV40, rv40);
REGISTER_PARSER (VC1, vc1); REGISTER_PARSER (VC1, vc1);
REGISTER_PARSER (VP3, vp3); REGISTER_PARSER (VP3, vp3);
REGISTER_PARSER (VP8, vp8); REGISTER_PARSER (VP8, vp8);
......
/*
* RV30/40 parser
* Copyright (c) 2011 Konstantin Shishkov
*
* This file is part of Libav.
*
* Libav is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* Libav is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with Libav; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
/**
* @file
* RV30/40 parser
*/
#include "parser.h"
#include "libavutil/intreadwrite.h"
typedef struct {
ParseContext pc;
int64_t key_dts;
int key_pts;
} RV34ParseContext;
static const int rv_to_av_frame_type[4] = {
AV_PICTURE_TYPE_I, AV_PICTURE_TYPE_I, AV_PICTURE_TYPE_P, AV_PICTURE_TYPE_B,
};
static int rv34_parse(AVCodecParserContext *s,
AVCodecContext *avctx,
const uint8_t **poutbuf, int *poutbuf_size,
const uint8_t *buf, int buf_size)
{
RV34ParseContext *pc = s->priv_data;
int off;
int type, pts, hdr;
if (buf_size < 13 + *buf * 8) {
*poutbuf = buf;
*poutbuf_size = buf_size;
return buf_size;
}
off = AV_RL32(buf + 5);
hdr = AV_RB32(buf + 9 + *buf * 8);
if (avctx->codec_id == CODEC_ID_RV30) {
type = (hdr >> 27) & 3;
pts = (hdr >> 7) & 0x1FFF;
} else {
type = (hdr >> 29) & 3;
pts = (hdr >> 6) & 0x1FFF;
}
if (type != 3 && s->pts != AV_NOPTS_VALUE) {
pc->key_dts = s->pts;
pc->key_pts = pts;
} else {
if (type != 3)
s->pts = pc->key_dts + ((pts - pc->key_pts) & 0x1FFF);
else
s->pts = pc->key_dts - ((pc->key_pts - pts) & 0x1FFF);
}
s->pict_type = rv_to_av_frame_type[type];
*poutbuf = buf;
*poutbuf_size = buf_size;
return buf_size;
}
#ifdef CONFIG_RV30_PARSER
AVCodecParser ff_rv30_parser = {
{ CODEC_ID_RV30 },
sizeof(RV34ParseContext),
NULL,
rv34_parse,
};
#endif
#ifdef CONFIG_RV40_PARSER
AVCodecParser ff_rv40_parser = {
{ CODEC_ID_RV40 },
sizeof(RV34ParseContext),
NULL,
rv34_parse,
};
#endif
...@@ -298,6 +298,7 @@ ff_rm_read_mdpr_codecdata (AVFormatContext *s, AVIOContext *pb, ...@@ -298,6 +298,7 @@ ff_rm_read_mdpr_codecdata (AVFormatContext *s, AVIOContext *pb,
st->codec->time_base.num= 1; st->codec->time_base.num= 1;
fps= avio_rb16(pb); fps= avio_rb16(pb);
st->codec->codec_type = AVMEDIA_TYPE_VIDEO; st->codec->codec_type = AVMEDIA_TYPE_VIDEO;
st->need_parsing = AVSTREAM_PARSE_TIMESTAMPS;
avio_rb32(pb); avio_rb32(pb);
avio_skip(pb, 2); avio_skip(pb, 2);
avio_rb16(pb); avio_rb16(pb);
......
...@@ -16,106 +16,105 @@ ...@@ -16,106 +16,105 @@
0, 112500, 276480, 0x5f7a0d4f 0, 112500, 276480, 0x5f7a0d4f
0, 120000, 276480, 0x5f7a0d4f 0, 120000, 276480, 0x5f7a0d4f
0, 127500, 276480, 0x5f7a0d4f 0, 127500, 276480, 0x5f7a0d4f
0, 135000, 276480, 0x75641594 0, 135000, 276480, 0x32ee3526
0, 142500, 276480, 0x32ee3526 0, 142500, 276480, 0x7ca9658e
0, 150000, 276480, 0x5ce39368 0, 150000, 276480, 0x4ec1e418
0, 157500, 276480, 0x4ec1e418 0, 157500, 276480, 0xa9f1506f
0, 165000, 276480, 0x85cbc3b5 0, 165000, 276480, 0x377c7b46
0, 172500, 276480, 0x377c7b46 0, 172500, 276480, 0xe1de7f0a
0, 180000, 276480, 0x756a4a2e 0, 180000, 276480, 0xcb379547
0, 187500, 276480, 0xcb379547 0, 187500, 276480, 0x8e12331c
0, 195000, 276480, 0x99c085be 0, 195000, 276480, 0xe479ffed
0, 202500, 276480, 0xe479ffed 0, 202500, 276480, 0xac7672dd
0, 210000, 276480, 0x1e4fae19 0, 210000, 276480, 0x776412ef
0, 217500, 276480, 0x776412ef 0, 217500, 276480, 0x1cd1ab29
0, 225000, 276480, 0x58ce0f38 0, 225000, 276480, 0x5ab69b27
0, 232500, 276480, 0x5ab69b27 0, 232500, 276480, 0x9eca3f11
0, 240000, 276480, 0xc3db9706 0, 240000, 276480, 0xc9c57884
0, 247500, 276480, 0xc9c57884 0, 247500, 276480, 0xdc07f3c9
0, 255000, 276480, 0x000b5269 0, 255000, 276480, 0x27ff7a5d
0, 262500, 276480, 0x27ff7a5d 0, 262500, 276480, 0x18d4b27d
0, 270000, 276480, 0x70647530 0, 270000, 276480, 0x97612c4b
0, 277500, 276480, 0x97612c4b 0, 277500, 276480, 0x4ec4d57f
0, 285000, 276480, 0xdf4e04d7 0, 285000, 276480, 0xbd98f57c
0, 292500, 276480, 0xbd98f57c 0, 292500, 276480, 0xa5d670ec
0, 300000, 276480, 0x5163b29b 0, 300000, 276480, 0x99170e64
0, 307500, 276480, 0x99170e64 0, 307500, 276480, 0x7a4f2561
0, 315000, 276480, 0x8a4e991f 0, 315000, 276480, 0x6a45425f
0, 322500, 276480, 0x6a45425f 0, 322500, 276480, 0xd75482c6
0, 330000, 276480, 0x7bf6b1ef 0, 330000, 276480, 0x6de1e34b
0, 337500, 276480, 0x6de1e34b 0, 337500, 276480, 0xf964e18e
0, 345000, 276480, 0xdcaaa99a 0, 345000, 276480, 0xd1e98808
0, 352500, 276480, 0xd1e98808 0, 352500, 276480, 0x0cf65540
0, 360000, 276480, 0x6e2d524e 0, 360000, 276480, 0x22c50a3d
0, 367500, 276480, 0x22c50a3d 0, 367500, 276480, 0xf4b1c461
0, 375000, 276480, 0x62b76407 0, 375000, 276480, 0x51e9b3eb
0, 382500, 276480, 0x51e9b3eb 0, 382500, 276480, 0x6dd14ca6
0, 390000, 276480, 0x441f7afd 0, 390000, 276480, 0xfb01efc6
0, 397500, 276480, 0xfb01efc6 0, 397500, 276480, 0x5ac8e06f
0, 405000, 276480, 0x294bb441 0, 405000, 276480, 0xe04ac45e
0, 412500, 276480, 0xe04ac45e 0, 412500, 276480, 0xf688a3ed
0, 420000, 276480, 0x58f275ea 0, 420000, 276480, 0xf0b3b71b
0, 427500, 276480, 0xf0b3b71b 0, 427500, 276480, 0x01840548
0, 435000, 276480, 0x674e34e4 0, 435000, 276480, 0x41dda2d9
0, 442500, 276480, 0x41dda2d9 0, 442500, 276480, 0x9b209f41
0, 450000, 276480, 0xf46ba7fb 0, 450000, 276480, 0x28b54815
0, 457500, 276480, 0x28b54815 0, 457500, 276480, 0x34484aff
0, 465000, 276480, 0xaf2b5d89 0, 465000, 276480, 0x8facba58
0, 472500, 276480, 0x8facba58 0, 472500, 276480, 0x02162c7c
0, 480000, 276480, 0x28a63236 0, 480000, 276480, 0x1ad43fd7
0, 487500, 276480, 0x1ad43fd7 0, 487500, 276480, 0x2b8a89c5
0, 495000, 276480, 0x71507bd2 0, 495000, 276480, 0x35626022
0, 502500, 276480, 0x35626022 0, 502500, 276480, 0xce5af1ec
0, 510000, 276480, 0x7c1139b3 0, 510000, 276480, 0x7fd73a99
0, 517500, 276480, 0x7fd73a99 0, 517500, 276480, 0xcb60725a
0, 525000, 276480, 0xb52e1aa2 0, 525000, 276480, 0xd6f82cae
0, 532500, 276480, 0xd6f82cae 0, 532500, 276480, 0xfa88a483
0, 540000, 276480, 0xf88f75d4 0, 540000, 276480, 0x04a8e3ee
0, 547500, 276480, 0x04a8e3ee 0, 547500, 276480, 0x0b41f0d7
0, 555000, 276480, 0xa29f5b01 0, 555000, 276480, 0x754ceaf5
0, 562500, 276480, 0x754ceaf5 0, 562500, 276480, 0xde084059
0, 570000, 276480, 0x5a38b4af 0, 570000, 276480, 0xfcebc261
0, 577500, 276480, 0xfcebc261 0, 577500, 276480, 0x046394ae
0, 585000, 276480, 0x3d3ca985 0, 585000, 276480, 0x94a03c75
0, 592500, 276480, 0x94a03c75 0, 592500, 276480, 0x6a841f41
0, 600000, 276480, 0x2f98911c 0, 600000, 276480, 0x923b9937
0, 607500, 276480, 0x923b9937 0, 607500, 276480, 0xee82d657
0, 615000, 276480, 0xefab7ffd 0, 615000, 276480, 0x6b9fbc80
0, 622500, 276480, 0x6b9fbc80 0, 622500, 276480, 0x6d4b49d7
0, 630000, 276480, 0xe4bdbd1e 0, 630000, 276480, 0x225a56c0
0, 637500, 276480, 0x225a56c0 0, 637500, 276480, 0xff4e1a8c
0, 645000, 276480, 0xf58b1b7c 0, 645000, 276480, 0xbaffcdcc
0, 652500, 276480, 0xbaffcdcc 0, 652500, 276480, 0x3d861ae6
0, 660000, 276480, 0xeb6eb88f 0, 660000, 276480, 0xdb753d35
0, 667500, 276480, 0xdb753d35 0, 667500, 276480, 0xb24c8016
0, 675000, 276480, 0xea80a82e 0, 675000, 276480, 0x2aae902a
0, 682500, 276480, 0x2aae902a 0, 682500, 276480, 0x5c6e97a9
0, 690000, 276480, 0x9b9ee961 0, 690000, 276480, 0xaa12b6fd
0, 697500, 276480, 0xaa12b6fd 0, 697500, 276480, 0xbf09053c
0, 705000, 276480, 0x50c31e73 0, 705000, 276480, 0xdd9fb89f
0, 712500, 276480, 0xdd9fb89f 0, 712500, 276480, 0x0b752d28
0, 720000, 276480, 0xaf82399a 0, 720000, 276480, 0x7ce5f23c
0, 727500, 276480, 0x7ce5f23c 0, 727500, 276480, 0x55dadd30
0, 735000, 276480, 0x5aaa7519 0, 735000, 276480, 0xe45a5599
0, 742500, 276480, 0xe45a5599 0, 742500, 276480, 0x2f447fd3
0, 750000, 276480, 0x704411fb 0, 750000, 276480, 0x9d7430a1
0, 757500, 276480, 0x9d7430a1 0, 757500, 276480, 0x51cb657c
0, 765000, 276480, 0x2c230702 0, 765000, 276480, 0x4a4f76cd
0, 772500, 276480, 0x4a4f76cd 0, 772500, 276480, 0x87160f99
0, 780000, 276480, 0x27f54854 0, 780000, 276480, 0x694d76e3
0, 787500, 276480, 0x694d76e3 0, 787500, 276480, 0x50742e1b
0, 795000, 276480, 0x525463e2 0, 795000, 276480, 0x819898f9
0, 802500, 276480, 0x819898f9 0, 802500, 276480, 0x35c46927
0, 810000, 276480, 0xeeed00fc 0, 810000, 276480, 0xb6f99ee3
0, 817500, 276480, 0xb6f99ee3 0, 817500, 276480, 0xde97d9fd
0, 825000, 276480, 0xefc83107 0, 825000, 276480, 0xbb22e024
0, 832500, 276480, 0xbb22e024 0, 832500, 276480, 0xbe1fbb19
0, 840000, 276480, 0x300f922a 0, 840000, 276480, 0x826fc3bd
0, 847500, 276480, 0x826fc3bd 0, 847500, 276480, 0x5497097b
0, 855000, 276480, 0x679a53f8 0, 855000, 276480, 0x976c9e93
0, 862500, 276480, 0x976c9e93 0, 862500, 276480, 0xdc2d7c6c
0, 870000, 276480, 0xb194656e 0, 870000, 276480, 0xf002c5ca
0, 877500, 276480, 0xf002c5ca 0, 877500, 276480, 0xf62d8581
0, 885000, 276480, 0xb243dda5 0, 885000, 276480, 0x1700efbb
0, 892500, 276480, 0x1700efbb 0, 892500, 276480, 0x8f316c66
0, 900000, 276480, 0x8f316c66
...@@ -2,45 +2,44 @@ ...@@ -2,45 +2,44 @@
0, 7500, 126720, 0xa416ece5 0, 7500, 126720, 0xa416ece5
0, 15000, 126720, 0xa416ece5 0, 15000, 126720, 0xa416ece5
0, 22500, 126720, 0x259af497 0, 22500, 126720, 0x259af497
0, 30000, 126720, 0x5e6ff4d7 0, 30000, 126720, 0x763ab817
0, 37500, 126720, 0xeb6fb8d7 0, 37500, 126720, 0xda71b917
0, 45000, 126720, 0xbb1abbb7 0, 45000, 126720, 0xbb1abbb7
0, 52500, 126720, 0x273fbc37 0, 52500, 126720, 0x16eebbd7
0, 60000, 126720, 0x7fa3ae27 0, 60000, 126720, 0x722e99f7
0, 67500, 126720, 0x722e99f7 0, 67500, 126720, 0x07beba77
0, 75000, 126720, 0x29d6a887 0, 75000, 126720, 0x9ca7aac7
0, 82500, 126720, 0xd115a757 0, 82500, 126720, 0xd115a757
0, 90000, 126720, 0x6ddaef32 0, 90000, 126720, 0xac6c071b
0, 97500, 126720, 0x04e7897c 0, 97500, 126720, 0x5eee050f
0, 105000, 126720, 0x68cfda2b 0, 105000, 126720, 0x68cfda2b
0, 112500, 126720, 0xe572dfc9 0, 112500, 126720, 0x582fb176
0, 120000, 126720, 0xbc3cc34f 0, 120000, 126720, 0xcf8cb0e2
0, 127500, 126720, 0xcf8cb0e2 0, 127500, 126720, 0xc6e10f9f
0, 135000, 126720, 0x75ae61b6 0, 135000, 126720, 0x85597543
0, 142500, 126720, 0x554fe3e4 0, 142500, 126720, 0x554fe3e4
0, 150000, 126720, 0x72ecea95 0, 150000, 126720, 0x9bf6a605
0, 157500, 126720, 0x5d00b5fe 0, 157500, 126720, 0x93f7b040
0, 165000, 126720, 0xe39bba0d 0, 165000, 126720, 0xe39bba0d
0, 172500, 126720, 0x9c21bad8 0, 172500, 126720, 0xa567f25b
0, 180000, 126720, 0x72f2a47d 0, 180000, 126720, 0x4f639ebe
0, 187500, 126720, 0x4f639ebe 0, 187500, 126720, 0x6cf87d39
0, 195000, 126720, 0x534a10cc 0, 195000, 126720, 0xfdca11d3
0, 202500, 126720, 0x5fd753d8 0, 202500, 126720, 0x5fd753d8
0, 210000, 126720, 0x0c735615 0, 210000, 126720, 0xeaf3dd0b
0, 217500, 126720, 0x0eaf0c1b 0, 217500, 126720, 0xce5e6794
0, 225000, 126720, 0x14cf7974 0, 225000, 126720, 0x14cf7974
0, 232500, 126720, 0x1c2a513d 0, 232500, 126720, 0xa3f515ab
0, 240000, 126720, 0xbc513f2a 0, 240000, 126720, 0xbc303fae
0, 247500, 126720, 0xbc303fae 0, 247500, 126720, 0x0a22cc69
0, 255000, 126720, 0xd9f67585 0, 255000, 126720, 0xf92b2a25
0, 262500, 126720, 0x3378251f 0, 262500, 126720, 0x3378251f
0, 270000, 126720, 0xb3ed5911 0, 270000, 126720, 0x8da30275
0, 277500, 126720, 0xc15a3577 0, 277500, 126720, 0xf2942f53
0, 285000, 126720, 0x0a24f256 0, 285000, 126720, 0x0a24f256
0, 292500, 126720, 0xfab9c45d 0, 292500, 126720, 0x10e939ce
0, 300000, 126720, 0x45464610 0, 300000, 126720, 0xfe2e057d
0, 307500, 126720, 0xfe2e057d 0, 307500, 126720, 0x5284da7b
0, 315000, 126720, 0x23efdc35 0, 315000, 126720, 0xc9e92bf1
0, 322500, 126720, 0x4d888b2e 0, 322500, 126720, 0x4d888b2e
0, 330000, 126720, 0xdd0d74df 0, 330000, 126720, 0x08382b8e
0, 337500, 126720, 0x08382b8e
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment