diff options
Diffstat (limited to 'formats/format_h264.c')
-rw-r--r-- | formats/format_h264.c | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/formats/format_h264.c b/formats/format_h264.c index f8fe75c42..ea82454f3 100644 --- a/formats/format_h264.c +++ b/formats/format_h264.c @@ -56,7 +56,7 @@ static int h264_open(struct ast_filestream *s) static struct ast_frame *h264_read(struct ast_filestream *s, int *whennext) { int res; - int mark=0; + int mark = 0; unsigned short len; unsigned int ts; struct h264_desc *fs = (struct h264_desc *)s->_private; @@ -72,7 +72,7 @@ static struct ast_frame *h264_read(struct ast_filestream *s, int *whennext) len = BUF_SIZE; /* XXX truncate */ } s->fr.frametype = AST_FRAME_VIDEO; - s->fr.subclass.codec = AST_FORMAT_H264; + ast_format_set(&s->fr.subclass.format, AST_FORMAT_H264, 0); s->fr.mallocd = 0; AST_FRAME_SET_BUFFER(&s->fr, s->buf, AST_FRIENDLY_OFFSET, len); if ((res = fread(s->fr.data.ptr, 1, s->fr.datalen, s->f)) != s->fr.datalen) { @@ -82,7 +82,9 @@ static struct ast_frame *h264_read(struct ast_filestream *s, int *whennext) } s->fr.samples = fs->lastts; s->fr.datalen = len; - s->fr.subclass.codec |= mark; + if (mark) { + ast_format_set_video_mark(&s->fr.subclass.format); + } s->fr.delivery.tv_sec = 0; s->fr.delivery.tv_usec = 0; if ((res = fread(&ts, 1, sizeof(ts), s->f)) == sizeof(ts)) { @@ -104,9 +106,9 @@ static int h264_write(struct ast_filestream *s, struct ast_frame *f) ast_log(LOG_WARNING, "Asked to write non-video frame!\n"); return -1; } - mark = (f->subclass.codec & 0x1) ? 0x8000 : 0; - if ((f->subclass.codec & ~0x1) != AST_FORMAT_H264) { - ast_log(LOG_WARNING, "Asked to write non-h264 frame (%s)!\n", ast_getformatname(f->subclass.codec)); + mark = ast_format_get_video_mark(&f->subclass.format) ? 0x8000 : 0; + if (f->subclass.format.id != AST_FORMAT_H264) { + ast_log(LOG_WARNING, "Asked to write non-h264 frame (%s)!\n", ast_getformatname(&f->subclass.format)); return -1; } ts = htonl(f->samples); @@ -146,10 +148,9 @@ static off_t h264_tell(struct ast_filestream *fs) return offset; /* XXX totally bogus, needs fixing */ } -static const struct ast_format h264_f = { +static struct ast_format_def h264_f = { .name = "h264", .exts = "h264", - .format = AST_FORMAT_H264, .open = h264_open, .write = h264_write, .seek = h264_seek, @@ -162,14 +163,15 @@ static const struct ast_format h264_f = { static int load_module(void) { - if (ast_format_register(&h264_f)) + ast_format_set(&h264_f.format, AST_FORMAT_H264, 0); + if (ast_format_def_register(&h264_f)) return AST_MODULE_LOAD_FAILURE; return AST_MODULE_LOAD_SUCCESS; } static int unload_module(void) { - return ast_format_unregister(h264_f.name); + return ast_format_def_unregister(h264_f.name); } AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Raw H.264 data", |