return 0;
}
-static uint16_t getbe16(const uint8_t *p)
-{
- return (p[0] << 8) | p[1];
-}
-
static int get_nibble(const uint8_t *buf, int nibble_offset)
{
return (buf[nibble_offset >> 1] >> ((1 - (nibble_offset & 1)) << 2)) & 0xf;
sub_header->start_display_time = 0;
sub_header->end_display_time = 0;
- cmd_pos = getbe16(buf + 2);
+ cmd_pos = AV_RB16(buf + 2);
while ((cmd_pos + 4) < buf_size) {
- date = getbe16(buf + cmd_pos);
- next_cmd_pos = getbe16(buf + cmd_pos + 2);
+ date = AV_RB16(buf + cmd_pos);
+ next_cmd_pos = AV_RB16(buf + cmd_pos + 2);
#ifdef DEBUG
av_log(NULL, AV_LOG_INFO, "cmd_pos=0x%04x next=0x%04x date=%d\n",
cmd_pos, next_cmd_pos, date);
case 0x06:
if ((buf_size - pos) < 4)
goto fail;
- offset1 = getbe16(buf + pos);
- offset2 = getbe16(buf + pos + 2);
+ offset1 = AV_RB16(buf + pos);
+ offset2 = AV_RB16(buf + pos + 2);
#ifdef DEBUG
av_log(NULL, AV_LOG_INFO, "offset1=0x%04x offset2=0x%04x\n", offset1, offset2);
#endif
dvdsub_close_decoder,
dvdsub_decode,
};
-
-/* parser definition */
-typedef struct DVDSubParseContext {
- uint8_t *packet;
- int packet_len;
- int packet_index;
-} DVDSubParseContext;
-
-static int dvdsub_parse_init(AVCodecParserContext *s)
-{
- return 0;
-}
-
-static int dvdsub_parse(AVCodecParserContext *s,
- AVCodecContext *avctx,
- uint8_t **poutbuf, int *poutbuf_size,
- const uint8_t *buf, int buf_size)
-{
- DVDSubParseContext *pc = s->priv_data;
-
- if (pc->packet_index == 0) {
- if (buf_size < 2)
- return 0;
- pc->packet_len = (buf[0] << 8) | buf[1];
- av_freep(&pc->packet);
- pc->packet = av_malloc(pc->packet_len);
- }
- if (pc->packet) {
- if (pc->packet_index + buf_size <= pc->packet_len) {
- memcpy(pc->packet + pc->packet_index, buf, buf_size);
- pc->packet_index += buf_size;
- if (pc->packet_index >= pc->packet_len) {
- *poutbuf = pc->packet;
- *poutbuf_size = pc->packet_len;
- pc->packet_index = 0;
- return buf_size;
- }
- } else {
- /* erroneous size */
- pc->packet_index = 0;
- }
- }
- *poutbuf = NULL;
- *poutbuf_size = 0;
- return buf_size;
-}
-
-static void dvdsub_parse_close(AVCodecParserContext *s)
-{
- DVDSubParseContext *pc = s->priv_data;
- av_freep(&pc->packet);
-}
-
-AVCodecParser dvdsub_parser = {
- { CODEC_ID_DVD_SUBTITLE },
- sizeof(DVDSubParseContext),
- dvdsub_parse_init,
- dvdsub_parse,
- dvdsub_parse_close,
-};