On Tue, Jan 24, 2012 at 01:40:48PM -0500, Justin Ruggles wrote:
> According to Multimedia Wiki documentation, the frame rate is not always 15,
> and the actual value can be found in the header.
> ---
> libavformat/westwood_vqa.c | 9 +++++++--
> 1 files changed, 7 insertions(+), 2 deletions(-)
>
> diff --git a/libavformat/westwood_vqa.c b/libavformat/westwood_vqa.c
> index 9a48263..a99a816 100644
> --- a/libavformat/westwood_vqa.c
> +++ b/libavformat/westwood_vqa.c
> @@ -51,7 +51,6 @@
> #define CMDS_TAG MKBETAG('C', 'M', 'D', 'S')
>
> #define VQA_HEADER_SIZE 0x2A
> -#define VQA_FRAMERATE 15
> #define VQA_PREAMBLE_SIZE 8
>
> typedef struct WsVqaDemuxContext {
> @@ -87,13 +86,13 @@ static int wsvqa_read_header(AVFormatContext *s,
> unsigned char scratch[VQA_PREAMBLE_SIZE];
> unsigned int chunk_tag;
> unsigned int chunk_size;
> + int fps;
>
> /* initialize the video decoder stream */
> st = avformat_new_stream(s, NULL);
> if (!st)
> return AVERROR(ENOMEM);
> st->start_time = 0;
> - avpriv_set_pts_info(st, 33, 1, VQA_FRAMERATE);
> wsvqa->video_stream_index = st->index;
> st->codec->codec_type = AVMEDIA_TYPE_VIDEO;
> st->codec->codec_id = CODEC_ID_WS_VQA;
> @@ -113,6 +112,12 @@ static int wsvqa_read_header(AVFormatContext *s,
> }
> st->codec->width = AV_RL16(&header[6]);
> st->codec->height = AV_RL16(&header[8]);
> + fps = header[12];
> + if (fps < 1 || fps > 30) {
> + av_log(s, AV_LOG_ERROR, "invalid fps: %d\n", fps);
> + return AVERROR_INVALIDDATA;
> + }
> + avpriv_set_pts_info(st, 64, 1, fps);
>
> /* initialize the audio decoder stream for VQA v1 or nonzero samplerate
> */
> if (AV_RL16(&header[24]) || (AV_RL16(&header[0]) == 1 &&
> AV_RL16(&header[2]) == 1)) {
> --
lgtm
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel