/*
* DVB subtitle parser for FFmpeg
- * Copyright (c) 2005 Ian Caulfield.
+ * Copyright (c) 2005 Ian Caulfield
*
* This file is part of FFmpeg.
*
*/
#include "avcodec.h"
#include "dsputil.h"
-#include "bitstream.h"
+#include "get_bits.h"
//#define DEBUG
//#define DEBUG_PACKET_CONTENTS
int in_packet;
} DVBSubParseContext;
-static int dvbsub_parse_init(AVCodecParserContext *s)
+static av_cold int dvbsub_parse_init(AVCodecParserContext *s)
{
DVBSubParseContext *pc = s->priv_data;
pc->packet_buf = av_malloc(PARSE_BUF_SIZE);
static int dvbsub_parse(AVCodecParserContext *s,
AVCodecContext *avctx,
- uint8_t **poutbuf, int *poutbuf_size,
+ const uint8_t **poutbuf, int *poutbuf_size,
const uint8_t *buf, int buf_size)
{
DVBSubParseContext *pc = s->priv_data;
uint8_t *p, *p_end;
int len, buf_pos = 0;
-#ifdef DEBUG
- av_log(avctx, AV_LOG_INFO, "DVB parse packet pts=%"PRIx64", lpts=%"PRIx64", cpts=%"PRIx64":\n",
+ dprintf(avctx, "DVB parse packet pts=%"PRIx64", lpts=%"PRIx64", cpts=%"PRIx64":\n",
s->pts, s->last_pts, s->cur_frame_pts[s->cur_frame_start_index]);
-#endif
#ifdef DEBUG_PACKET_CONTENTS
int i;
s->fetch_timestamp = 1;
- if (s->last_pts != s->pts && s->last_pts != AV_NOPTS_VALUE) /* Start of a new packet */
+ if (s->last_pts != s->pts && s->pts != AV_NOPTS_VALUE) /* Start of a new packet */
{
if (pc->packet_index != pc->packet_start)
{
-#ifdef DEBUG
- av_log(avctx, AV_LOG_INFO, "Discarding %d bytes\n",
- pc->packet_index - pc->packet_start);
-#endif
+ dprintf(avctx, "Discarding %d bytes\n",
+ pc->packet_index - pc->packet_start);
}
pc->packet_start = 0;
pc->packet_index = 0;
if (buf_size < 2 || buf[0] != 0x20 || buf[1] != 0x00) {
-#ifdef DEBUG
- av_log(avctx, AV_LOG_INFO, "Bad packet header\n");
-#endif
+ dprintf(avctx, "Bad packet header\n");
return -1;
}
} else if (*p == 0xff) {
if (p + 1 < p_end)
{
-#ifdef DEBUG
- av_log(avctx, AV_LOG_INFO, "Junk at end of packet\n");
-#endif
+ dprintf(avctx, "Junk at end of packet\n");
}
pc->packet_index = p - pc->packet_buf;
pc->in_packet = 0;
pc->packet_start = *poutbuf_size;
}
- if (s->last_pts == AV_NOPTS_VALUE)
- s->last_pts = s->pts;
+ if (s->pts == AV_NOPTS_VALUE)
+ s->pts = s->last_pts;
return buf_size;
}
-static void dvbsub_parse_close(AVCodecParserContext *s)
+static av_cold void dvbsub_parse_close(AVCodecParserContext *s)
{
DVBSubParseContext *pc = s->priv_data;
av_freep(&pc->packet_buf);