}
}
-static int write_streamheader(NUTContext *nut, ByteIOContext *bc, AVStream *st, int i){
+static int write_streamheader(AVFormatContext *avctx, ByteIOContext *bc, AVStream *st, int i){
+ NUTContext *nut = avctx->priv_data;
AVCodecContext *codec = st->codec;
put_v(bc, i);
switch(codec->codec_type){
put_v(bc, 4);
if (codec->codec_tag){
put_le32(bc, codec->codec_tag);
- }else
- return -1;
+ } else {
+ av_log(avctx, AV_LOG_ERROR, "No codec tag defined for stream %d\n", i);
+ return AVERROR(EINVAL);
+ }
put_v(bc, nut->stream[i].time_base - nut->time_base);
put_v(bc, nut->stream[i].msb_pts_shift);
return count;
}
-static int write_headers(NUTContext *nut, ByteIOContext *bc){
+static int write_headers(AVFormatContext *avctx, ByteIOContext *bc){
+ NUTContext *nut = avctx->priv_data;
ByteIOContext *dyn_bc;
int i, ret;
ret = url_open_dyn_buf(&dyn_bc);
if(ret < 0)
return ret;
- write_streamheader(nut, dyn_bc, nut->avf->streams[i], i);
+ if ((ret = write_streamheader(avctx, dyn_bc, nut->avf->streams[i], i)) < 0)
+ return ret;
put_packet(nut, bc, dyn_bc, 1, STREAM_STARTCODE);
}
static int write_header(AVFormatContext *s){
NUTContext *nut = s->priv_data;
ByteIOContext *bc = s->pb;
- int i, j;
+ int i, j, ret;
nut->avf= s;
put_buffer(bc, ID_STRING, strlen(ID_STRING));
put_byte(bc, 0);
- write_headers(nut, bc);
+ if ((ret = write_headers(s, bc)) < 0)
+ return ret;
put_flush_packet(bc);
return -1;
if(1LL<<(20+3*nut->header_count) <= url_ftell(bc))
- write_headers(nut, bc);
+ write_headers(s, bc);
if(key_frame && !(nus->last_flags & FLAG_KEY))
store_sp= 1;
ByteIOContext *bc= s->pb;
while(nut->header_count<3)
- write_headers(nut, bc);
+ write_headers(s, bc);
put_flush_packet(bc);
ff_nut_free_sp(nut);
av_freep(&nut->stream);