summaryrefslogtreecommitdiff
path: root/libavformat
diff options
context:
space:
mode:
authorLuca Barbato <lu_zero@gentoo.org>2012-10-12 15:49:36 +0200
committerLuca Barbato <lu_zero@gentoo.org>2012-10-13 12:33:18 +0200
commit1bd442c276e6688b43777a198cad0d7e3a92123f (patch)
tree91d70ca799a3aecdddfa296f1f75454fc7c9d27f /libavformat
parent5d2be71b9ecf2a88752666a2c4039f4d98419d35 (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.c6
-rw-r--r--libavformat/nut.h2
-rw-r--r--libavformat/nutdec.c7
-rw-r--r--libavformat/nutenc.c15
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,
};