diff options
author | Luca Barbato <lu_zero@gentoo.org> | 2012-10-12 17:49:36 +0400 |
---|---|---|
committer | Luca Barbato <lu_zero@gentoo.org> | 2012-10-13 14:33:18 +0400 |
commit | 1bd442c276e6688b43777a198cad0d7e3a92123f (patch) | |
tree | 91d70ca799a3aecdddfa296f1f75454fc7c9d27f /libavformat | |
parent | 5d2be71b9ecf2a88752666a2c4039f4d98419d35 (diff) |
nut: prioritize native tags
Use native tags instead of avi ones, simplifies a lot raw video codecs
handling.
Diffstat (limited to 'libavformat')
-rw-r--r-- | libavformat/nut.c | 6 | ||||
-rw-r--r-- | libavformat/nut.h | 2 | ||||
-rw-r--r-- | libavformat/nutdec.c | 7 | ||||
-rw-r--r-- | libavformat/nutenc.c | 15 |
4 files changed, 19 insertions, 11 deletions
diff --git a/libavformat/nut.c b/libavformat/nut.c index 6a68e28173..b666bff716 100644 --- a/libavformat/nut.c +++ b/libavformat/nut.c @@ -22,6 +22,7 @@ #include "libavutil/mathematics.h" #include "libavutil/tree.h" #include "nut.h" +#include "riff.h" #include "internal.h" const AVCodecTag ff_nut_subtitle_tags[] = { @@ -89,6 +90,11 @@ const AVCodecTag ff_nut_video_tags[] = { { AV_CODEC_ID_NONE , 0 } }; +const AVCodecTag * const ff_nut_codec_tags[] = { + ff_nut_video_tags, ff_nut_subtitle_tags, + ff_codec_bmp_tags, ff_codec_wav_tags, 0 +}; + void ff_nut_reset_ts(NUTContext *nut, AVRational time_base, int64_t val){ int i; for(i=0; i<nut->avf->nb_streams; i++){ diff --git a/libavformat/nut.h b/libavformat/nut.h index 3f09689bd1..335eceb440 100644 --- a/libavformat/nut.h +++ b/libavformat/nut.h @@ -106,6 +106,8 @@ typedef struct NUTContext { extern const AVCodecTag ff_nut_subtitle_tags[]; extern const AVCodecTag ff_nut_video_tags[]; +extern const AVCodecTag * const ff_nut_codec_tags[]; + typedef struct Dispositions { char str[9]; int flag; diff --git a/libavformat/nutdec.c b/libavformat/nutdec.c index dd02aadf5f..8448e13702 100644 --- a/libavformat/nutdec.c +++ b/libavformat/nutdec.c @@ -350,8 +350,8 @@ static int decode_stream_header(NUTContext *nut) case 0: st->codec->codec_type = AVMEDIA_TYPE_VIDEO; st->codec->codec_id = av_codec_get_id((const AVCodecTag * const []) { - ff_codec_bmp_tags, ff_nut_video_tags, + ff_codec_bmp_tags, 0 }, tmp); @@ -991,8 +991,5 @@ AVInputFormat ff_nut_demuxer = { .read_close = nut_read_close, .read_seek = read_seek, .extensions = "nut", - .codec_tag = (const AVCodecTag * const []) { - ff_codec_bmp_tags, ff_nut_video_tags, ff_codec_wav_tags, - ff_nut_subtitle_tags, 0 - }, + .codec_tag = ff_nut_codec_tags, }; diff --git a/libavformat/nutenc.c b/libavformat/nutenc.c index 4b1e66379c..6338924f48 100644 --- a/libavformat/nutenc.c +++ b/libavformat/nutenc.c @@ -374,6 +374,8 @@ static void write_mainheader(NUTContext *nut, AVIOContext *bc){ static int write_streamheader(AVFormatContext *avctx, AVIOContext *bc, AVStream *st, int i){ NUTContext *nut = avctx->priv_data; AVCodecContext *codec = st->codec; + unsigned codec_tag = av_codec_get_tag(ff_nut_codec_tags, codec->codec_id); + ff_put_v(bc, i); switch(codec->codec_type){ case AVMEDIA_TYPE_VIDEO: ff_put_v(bc, 0); break; @@ -382,8 +384,12 @@ static int write_streamheader(AVFormatContext *avctx, AVIOContext *bc, AVStream default : ff_put_v(bc, 3); break; } ff_put_v(bc, 4); - if (codec->codec_tag){ - avio_wl32(bc, codec->codec_tag); + + if (!codec_tag) + codec_tag = codec->codec_tag; + + if (codec_tag) { + avio_wl32(bc, codec_tag); } else { av_log(avctx, AV_LOG_ERROR, "No codec tag defined for stream %d\n", i); return AVERROR(EINVAL); @@ -873,8 +879,5 @@ AVOutputFormat ff_nut_muxer = { .write_packet = nut_write_packet, .write_trailer = nut_write_trailer, .flags = AVFMT_GLOBALHEADER | AVFMT_VARIABLE_FPS, - .codec_tag = (const AVCodecTag * const []){ - ff_codec_bmp_tags, ff_nut_video_tags, ff_codec_wav_tags, - ff_nut_subtitle_tags, 0 - }, + .codec_tag = ff_nut_codec_tags, }; |