Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
BC
public
external
ffmpeg
Commits
cc7d5cfe
Commit
cc7d5cfe
authored
Nov 29, 2012
by
Diego Biurrun
Browse files
img2: K&R formatting cosmetics
Also introduce local img_ namespace to simplify debugging.
parent
c1fcf563
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
131 additions
and
120 deletions
+131
-120
libavformat/img2.c
libavformat/img2.c
+41
-40
libavformat/img2dec.c
libavformat/img2dec.c
+69
-60
libavformat/img2enc.c
libavformat/img2enc.c
+21
-20
No files found.
libavformat/img2.c
View file @
cc7d5cfe
...
...
@@ -29,50 +29,51 @@ typedef struct {
}
IdStrMap
;
static
const
IdStrMap
img_tags
[]
=
{
{
AV_CODEC_ID_MJPEG
,
"jpeg"
},
{
AV_CODEC_ID_MJPEG
,
"jpg"
},
{
AV_CODEC_ID_LJPEG
,
"ljpg"
},
{
AV_CODEC_ID_PNG
,
"png"
},
{
AV_CODEC_ID_PNG
,
"mng"
},
{
AV_CODEC_ID_PPM
,
"ppm"
},
{
AV_CODEC_ID_PPM
,
"pnm"
},
{
AV_CODEC_ID_PGM
,
"pgm"
},
{
AV_CODEC_ID_PGMYUV
,
"pgmyuv"
},
{
AV_CODEC_ID_PBM
,
"pbm"
},
{
AV_CODEC_ID_PAM
,
"pam"
},
{
AV_CODEC_ID_MPEG1VIDEO
,
"mpg1-img"
},
{
AV_CODEC_ID_MPEG2VIDEO
,
"mpg2-img"
},
{
AV_CODEC_ID_MPEG4
,
"mpg4-img"
},
{
AV_CODEC_ID_FFV1
,
"ffv1-img"
},
{
AV_CODEC_ID_RAWVIDEO
,
"y"
},
{
AV_CODEC_ID_BMP
,
"bmp"
},
{
AV_CODEC_ID_GIF
,
"gif"
},
{
AV_CODEC_ID_TARGA
,
"tga"
},
{
AV_CODEC_ID_TIFF
,
"tiff"
},
{
AV_CODEC_ID_TIFF
,
"tif"
},
{
AV_CODEC_ID_SGI
,
"sgi"
},
{
AV_CODEC_ID_PTX
,
"ptx"
},
{
AV_CODEC_ID_PCX
,
"pcx"
},
{
AV_CODEC_ID_SUNRAST
,
"sun"
},
{
AV_CODEC_ID_SUNRAST
,
"ras"
},
{
AV_CODEC_ID_SUNRAST
,
"rs"
},
{
AV_CODEC_ID_SUNRAST
,
"im1"
},
{
AV_CODEC_ID_SUNRAST
,
"im8"
},
{
AV_CODEC_ID_SUNRAST
,
"im24"
},
{
AV_CODEC_ID_SUNRAST
,
"sunras"
},
{
AV_CODEC_ID_JPEG2000
,
"jp2"
},
{
AV_CODEC_ID_JPEG2000
,
"jpc"
},
{
AV_CODEC_ID_DPX
,
"dpx"
},
{
AV_CODEC_ID_PICTOR
,
"pic"
},
{
AV_CODEC_ID_XBM
,
"xbm"
},
{
AV_CODEC_ID_XWD
,
"xwd"
},
{
AV_CODEC_ID_NONE
,
NULL
}
{
AV_CODEC_ID_MJPEG
,
"jpeg"
},
{
AV_CODEC_ID_MJPEG
,
"jpg"
},
{
AV_CODEC_ID_LJPEG
,
"ljpg"
},
{
AV_CODEC_ID_PNG
,
"png"
},
{
AV_CODEC_ID_PNG
,
"mng"
},
{
AV_CODEC_ID_PPM
,
"ppm"
},
{
AV_CODEC_ID_PPM
,
"pnm"
},
{
AV_CODEC_ID_PGM
,
"pgm"
},
{
AV_CODEC_ID_PGMYUV
,
"pgmyuv"
},
{
AV_CODEC_ID_PBM
,
"pbm"
},
{
AV_CODEC_ID_PAM
,
"pam"
},
{
AV_CODEC_ID_MPEG1VIDEO
,
"mpg1-img"
},
{
AV_CODEC_ID_MPEG2VIDEO
,
"mpg2-img"
},
{
AV_CODEC_ID_MPEG4
,
"mpg4-img"
},
{
AV_CODEC_ID_FFV1
,
"ffv1-img"
},
{
AV_CODEC_ID_RAWVIDEO
,
"y"
},
{
AV_CODEC_ID_BMP
,
"bmp"
},
{
AV_CODEC_ID_GIF
,
"gif"
},
{
AV_CODEC_ID_TARGA
,
"tga"
},
{
AV_CODEC_ID_TIFF
,
"tiff"
},
{
AV_CODEC_ID_TIFF
,
"tif"
},
{
AV_CODEC_ID_SGI
,
"sgi"
},
{
AV_CODEC_ID_PTX
,
"ptx"
},
{
AV_CODEC_ID_PCX
,
"pcx"
},
{
AV_CODEC_ID_SUNRAST
,
"sun"
},
{
AV_CODEC_ID_SUNRAST
,
"ras"
},
{
AV_CODEC_ID_SUNRAST
,
"rs"
},
{
AV_CODEC_ID_SUNRAST
,
"im1"
},
{
AV_CODEC_ID_SUNRAST
,
"im8"
},
{
AV_CODEC_ID_SUNRAST
,
"im24"
},
{
AV_CODEC_ID_SUNRAST
,
"sunras"
},
{
AV_CODEC_ID_JPEG2000
,
"jp2"
},
{
AV_CODEC_ID_JPEG2000
,
"jpc"
},
{
AV_CODEC_ID_DPX
,
"dpx"
},
{
AV_CODEC_ID_PICTOR
,
"pic"
},
{
AV_CODEC_ID_XBM
,
"xbm"
},
{
AV_CODEC_ID_XWD
,
"xwd"
},
{
AV_CODEC_ID_NONE
,
NULL
}
};
static
enum
AVCodecID
av_str2id
(
const
IdStrMap
*
tags
,
const
char
*
str
)
{
str
=
strrchr
(
str
,
'.'
);
if
(
!
str
)
return
AV_CODEC_ID_NONE
;
str
=
strrchr
(
str
,
'.'
);
if
(
!
str
)
return
AV_CODEC_ID_NONE
;
str
++
;
while
(
tags
->
id
)
{
...
...
libavformat/img2dec.c
View file @
cc7d5cfe
...
...
@@ -59,13 +59,14 @@ static int infer_size(int *width_ptr, int *height_ptr, int size)
{
int
i
;
for
(
i
=
0
;
i
<
FF_ARRAY_ELEMS
(
sizes
);
i
++
)
{
for
(
i
=
0
;
i
<
FF_ARRAY_ELEMS
(
sizes
);
i
++
)
{
if
((
sizes
[
i
][
0
]
*
sizes
[
i
][
1
])
==
size
)
{
*
width_ptr
=
sizes
[
i
][
0
];
*
width_ptr
=
sizes
[
i
][
0
];
*
height_ptr
=
sizes
[
i
][
1
];
return
0
;
}
}
return
-
1
;
}
...
...
@@ -78,9 +79,9 @@ static int find_image_range(int *pfirst_index, int *plast_index,
/* find the first image */
for
(
first_index
=
0
;
first_index
<
max_start
;
first_index
++
)
{
if
(
av_get_frame_filename
(
buf
,
sizeof
(
buf
),
path
,
first_index
)
<
0
){
if
(
av_get_frame_filename
(
buf
,
sizeof
(
buf
),
path
,
first_index
)
<
0
)
{
*
pfirst_index
=
*
plast_index
=
1
;
*
plast_index
=
1
;
if
(
avio_check
(
buf
,
AVIO_FLAG_READ
)
>
0
)
return
0
;
return
-
1
;
...
...
@@ -93,9 +94,9 @@ static int find_image_range(int *pfirst_index, int *plast_index,
/* find the last image */
last_index
=
first_index
;
for
(;;)
{
for
(;;)
{
range
=
0
;
for
(;;)
{
for
(;;)
{
if
(
!
range
)
range1
=
1
;
else
...
...
@@ -116,25 +117,25 @@ static int find_image_range(int *pfirst_index, int *plast_index,
last_index
+=
range
;
}
*
pfirst_index
=
first_index
;
*
plast_index
=
last_index
;
*
plast_index
=
last_index
;
return
0
;
fail:
fail:
return
-
1
;
}
static
int
read_probe
(
AVProbeData
*
p
)
static
int
img_read_probe
(
AVProbeData
*
p
)
{
if
(
p
->
filename
&&
ff_guess_image2_codec
(
p
->
filename
))
{
if
(
av_filename_number_test
(
p
->
filename
))
return
AVPROBE_SCORE_MAX
;
else
return
AVPROBE_SCORE_MAX
/
2
;
return
AVPROBE_SCORE_MAX
/
2
;
}
return
0
;
}
static
int
read_header
(
AVFormatContext
*
s1
)
static
int
img_
read_header
(
AVFormatContext
*
s1
)
{
VideoDemuxData
*
s
=
s1
->
priv_data
;
int
first_index
,
last_index
,
ret
=
0
;
...
...
@@ -150,28 +151,33 @@ static int read_header(AVFormatContext *s1)
return
AVERROR
(
ENOMEM
);
}
if
(
s
->
pixel_format
&&
(
pix_fmt
=
av_get_pix_fmt
(
s
->
pixel_format
))
==
AV_PIX_FMT_NONE
)
{
av_log
(
s1
,
AV_LOG_ERROR
,
"No such pixel format: %s.
\n
"
,
s
->
pixel_format
);
if
(
s
->
pixel_format
&&
(
pix_fmt
=
av_get_pix_fmt
(
s
->
pixel_format
))
==
AV_PIX_FMT_NONE
)
{
av_log
(
s1
,
AV_LOG_ERROR
,
"No such pixel format: %s.
\n
"
,
s
->
pixel_format
);
return
AVERROR
(
EINVAL
);
}
if
(
s
->
video_size
&&
(
ret
=
av_parse_video_size
(
&
width
,
&
height
,
s
->
video_size
))
<
0
)
{
av_log
(
s
,
AV_LOG_ERROR
,
"Could not parse video size: %s.
\n
"
,
s
->
video_size
);
if
(
s
->
video_size
&&
(
ret
=
av_parse_video_size
(
&
width
,
&
height
,
s
->
video_size
))
<
0
)
{
av_log
(
s
,
AV_LOG_ERROR
,
"Could not parse video size: %s.
\n
"
,
s
->
video_size
);
return
ret
;
}
if
((
ret
=
av_parse_video_rate
(
&
framerate
,
s
->
framerate
))
<
0
)
{
av_log
(
s
,
AV_LOG_ERROR
,
"Could not parse framerate: %s.
\n
"
,
s
->
framerate
);
av_log
(
s
,
AV_LOG_ERROR
,
"Could not parse framerate: %s.
\n
"
,
s
->
framerate
);
return
ret
;
}
av_strlcpy
(
s
->
path
,
s1
->
filename
,
sizeof
(
s
->
path
));
s
->
img_number
=
0
;
s
->
img_count
=
0
;
s
->
img_count
=
0
;
/* find format */
if
(
s1
->
iformat
->
flags
&
AVFMT_NOFILE
)
s
->
is_pipe
=
0
;
else
{
s
->
is_pipe
=
1
;
else
{
s
->
is_pipe
=
1
;
st
->
need_parsing
=
AVSTREAM_PARSE_FULL
;
}
...
...
@@ -186,38 +192,39 @@ static int read_header(AVFormatContext *s1)
if
(
find_image_range
(
&
first_index
,
&
last_index
,
s
->
path
,
FFMAX
(
s
->
start_number
,
5
))
<
0
)
return
AVERROR
(
ENOENT
);
s
->
img_first
=
first_index
;
s
->
img_last
=
last_index
;
s
->
img_first
=
first_index
;
s
->
img_last
=
last_index
;
s
->
img_number
=
first_index
;
/* compute duration */
st
->
start_time
=
0
;
st
->
duration
=
last_index
-
first_index
+
1
;
st
->
duration
=
last_index
-
first_index
+
1
;
}
if
(
s1
->
video_codec_id
){
if
(
s1
->
video_codec_id
)
{
st
->
codec
->
codec_type
=
AVMEDIA_TYPE_VIDEO
;
st
->
codec
->
codec_id
=
s1
->
video_codec_id
;
}
else
if
(
s1
->
audio_codec_id
){
st
->
codec
->
codec_id
=
s1
->
video_codec_id
;
}
else
if
(
s1
->
audio_codec_id
)
{
st
->
codec
->
codec_type
=
AVMEDIA_TYPE_AUDIO
;
st
->
codec
->
codec_id
=
s1
->
audio_codec_id
;
}
else
{
st
->
codec
->
codec_id
=
s1
->
audio_codec_id
;
}
else
{
st
->
codec
->
codec_type
=
AVMEDIA_TYPE_VIDEO
;
st
->
codec
->
codec_id
=
ff_guess_image2_codec
(
s
->
path
);
st
->
codec
->
codec_id
=
ff_guess_image2_codec
(
s
->
path
);
}
if
(
st
->
codec
->
codec_type
==
AVMEDIA_TYPE_VIDEO
&&
pix_fmt
!=
AV_PIX_FMT_NONE
)
if
(
st
->
codec
->
codec_type
==
AVMEDIA_TYPE_VIDEO
&&
pix_fmt
!=
AV_PIX_FMT_NONE
)
st
->
codec
->
pix_fmt
=
pix_fmt
;
return
0
;
}
static
int
read_packet
(
AVFormatContext
*
s1
,
AVPacket
*
pkt
)
static
int
img_
read_packet
(
AVFormatContext
*
s1
,
AVPacket
*
pkt
)
{
VideoDemuxData
*
s
=
s1
->
priv_data
;
char
filename
[
1024
];
int
i
;
int
size
[
3
]
=
{
0
},
ret
[
3
]
=
{
0
};
AVIOContext
*
f
[
3
]
=
{
NULL
};
AVCodecContext
*
codec
=
s1
->
streams
[
0
]
->
codec
;
int
size
[
3
]
=
{
0
},
ret
[
3
]
=
{
0
};
AVIOContext
*
f
[
3
]
=
{
NULL
};
AVCodecContext
*
codec
=
s1
->
streams
[
0
]
->
codec
;
if
(
!
s
->
is_pipe
)
{
/* loop over input */
...
...
@@ -227,48 +234,50 @@ static int read_packet(AVFormatContext *s1, AVPacket *pkt)
if
(
s
->
img_number
>
s
->
img_last
)
return
AVERROR_EOF
;
if
(
av_get_frame_filename
(
filename
,
sizeof
(
filename
),
s
->
path
,
s
->
img_number
)
<
0
&&
s
->
img_number
>
1
)
s
->
path
,
s
->
img_number
)
<
0
&&
s
->
img_number
>
1
)
return
AVERROR
(
EIO
);
for
(
i
=
0
;
i
<
3
;
i
++
){
for
(
i
=
0
;
i
<
3
;
i
++
)
{
if
(
avio_open2
(
&
f
[
i
],
filename
,
AVIO_FLAG_READ
,
&
s1
->
interrupt_callback
,
NULL
)
<
0
)
{
if
(
i
>=
1
)
if
(
i
>=
1
)
break
;
av_log
(
s1
,
AV_LOG_ERROR
,
"Could not open file : %s
\n
"
,
filename
);
av_log
(
s1
,
AV_LOG_ERROR
,
"Could not open file : %s
\n
"
,
filename
);
return
AVERROR
(
EIO
);
}
size
[
i
]
=
avio_size
(
f
[
i
]);
size
[
i
]
=
avio_size
(
f
[
i
]);
if
(
codec
->
codec_id
!=
AV_CODEC_ID_RAWVIDEO
)
if
(
codec
->
codec_id
!=
AV_CODEC_ID_RAWVIDEO
)
break
;
filename
[
strlen
(
filename
)
-
1
]
=
'U'
+
i
;
filename
[
strlen
(
filename
)
-
1
]
=
'U'
+
i
;
}
if
(
codec
->
codec_id
==
AV_CODEC_ID_RAWVIDEO
&&
!
codec
->
width
)
if
(
codec
->
codec_id
==
AV_CODEC_ID_RAWVIDEO
&&
!
codec
->
width
)
infer_size
(
&
codec
->
width
,
&
codec
->
height
,
size
[
0
]);
}
else
{
f
[
0
]
=
s1
->
pb
;
if
(
f
[
0
]
->
eof_reached
)
return
AVERROR
(
EIO
);
size
[
0
]
=
4096
;
size
[
0
]
=
4096
;
}
av_new_packet
(
pkt
,
size
[
0
]
+
size
[
1
]
+
size
[
2
]);
pkt
->
stream_index
=
0
;
pkt
->
flags
|=
AV_PKT_FLAG_KEY
;
pkt
->
flags
|=
AV_PKT_FLAG_KEY
;
pkt
->
size
=
0
;
for
(
i
=
0
;
i
<
3
;
i
++
){
if
(
f
[
i
]){
ret
[
i
]
=
avio_read
(
f
[
i
],
pkt
->
data
+
pkt
->
size
,
size
[
i
]);
pkt
->
size
=
0
;
for
(
i
=
0
;
i
<
3
;
i
++
)
{
if
(
f
[
i
])
{
ret
[
i
]
=
avio_read
(
f
[
i
],
pkt
->
data
+
pkt
->
size
,
size
[
i
]);
if
(
!
s
->
is_pipe
)
avio_close
(
f
[
i
]);
if
(
ret
[
i
]
>
0
)
if
(
ret
[
i
]
>
0
)
pkt
->
size
+=
ret
[
i
];
}
}
if
(
ret
[
0
]
<=
0
||
ret
[
1
]
<
0
||
ret
[
2
]
<
0
)
{
if
(
ret
[
0
]
<=
0
||
ret
[
1
]
<
0
||
ret
[
2
]
<
0
)
{
av_free_packet
(
pkt
);
return
AVERROR
(
EIO
);
/* signal EOF */
}
else
{
...
...
@@ -281,11 +290,11 @@ static int read_packet(AVFormatContext *s1, AVPacket *pkt)
#define OFFSET(x) offsetof(VideoDemuxData, x)
#define DEC AV_OPT_FLAG_DECODING_PARAM
static
const
AVOption
options
[]
=
{
{
"pixel_format"
,
""
,
OFFSET
(
pixel_format
),
AV_OPT_TYPE_STRING
,
{.
str
=
NULL
},
0
,
0
,
DEC
},
{
"video_size"
,
""
,
OFFSET
(
video_size
),
AV_OPT_TYPE_STRING
,
{.
str
=
NULL
},
0
,
0
,
DEC
},
{
"framerate"
,
""
,
OFFSET
(
framerate
),
AV_OPT_TYPE_STRING
,
{.
str
=
"25"
},
0
,
0
,
DEC
},
{
"loop"
,
""
,
OFFSET
(
loop
),
AV_OPT_TYPE_INT
,
{.
i64
=
0
},
0
,
1
,
DEC
},
{
"start_number"
,
"first number in the sequence"
,
OFFSET
(
start_number
),
AV_OPT_TYPE_INT
,
{
.
i64
=
1
},
1
,
INT_MAX
,
DEC
},
{
"pixel_format"
,
""
,
OFFSET
(
pixel_format
),
AV_OPT_TYPE_STRING
,
{
.
str
=
NULL
},
0
,
0
,
DEC
},
{
"video_size"
,
""
,
OFFSET
(
video_size
),
AV_OPT_TYPE_STRING
,
{
.
str
=
NULL
},
0
,
0
,
DEC
},
{
"framerate"
,
""
,
OFFSET
(
framerate
),
AV_OPT_TYPE_STRING
,
{
.
str
=
"25"
},
0
,
0
,
DEC
},
{
"loop"
,
""
,
OFFSET
(
loop
),
AV_OPT_TYPE_INT
,
{
.
i64
=
0
},
0
,
1
,
DEC
},
{
"start_number"
,
"first number in the sequence"
,
OFFSET
(
start_number
),
AV_OPT_TYPE_INT
,
{
.
i64
=
1
},
1
,
INT_MAX
,
DEC
},
{
NULL
},
};
...
...
@@ -300,9 +309,9 @@ AVInputFormat ff_image2_demuxer = {
.
name
=
"image2"
,
.
long_name
=
NULL_IF_CONFIG_SMALL
(
"image2 sequence"
),
.
priv_data_size
=
sizeof
(
VideoDemuxData
),
.
read_probe
=
read_probe
,
.
read_header
=
read_header
,
.
read_packet
=
read_packet
,
.
read_probe
=
img_
read_probe
,
.
read_header
=
img_
read_header
,
.
read_packet
=
img_
read_packet
,
.
flags
=
AVFMT_NOFILE
,
.
priv_class
=
&
img2_class
,
};
...
...
@@ -318,8 +327,8 @@ AVInputFormat ff_image2pipe_demuxer = {
.
name
=
"image2pipe"
,
.
long_name
=
NULL_IF_CONFIG_SMALL
(
"piped image2 sequence"
),
.
priv_data_size
=
sizeof
(
VideoDemuxData
),
.
read_header
=
read_header
,
.
read_packet
=
read_packet
,
.
read_header
=
img_
read_header
,
.
read_packet
=
img_
read_packet
,
.
priv_class
=
&
img2pipe_class
,
};
#endif
libavformat/img2enc.c
View file @
cc7d5cfe
...
...
@@ -55,45 +55,46 @@ static int write_packet(AVFormatContext *s, AVPacket *pkt)
VideoMuxData
*
img
=
s
->
priv_data
;
AVIOContext
*
pb
[
3
];
char
filename
[
1024
];
AVCodecContext
*
codec
=
s
->
streams
[
pkt
->
stream_index
]
->
codec
;
AVCodecContext
*
codec
=
s
->
streams
[
pkt
->
stream_index
]
->
codec
;
int
i
;
if
(
!
img
->
is_pipe
)
{
if
(
av_get_frame_filename
(
filename
,
sizeof
(
filename
),
img
->
path
,
img
->
img_number
)
<
0
&&
img
->
img_number
>
1
)
{
img
->
path
,
img
->
img_number
)
<
0
&&
img
->
img_number
>
1
)
{
av_log
(
s
,
AV_LOG_ERROR
,
"Could not get frame filename number %d from pattern '%s'
\n
"
,
img
->
img_number
,
img
->
path
);
return
AVERROR
(
EIO
);
}
for
(
i
=
0
;
i
<
3
;
i
++
){
for
(
i
=
0
;
i
<
3
;
i
++
)
{
if
(
avio_open2
(
&
pb
[
i
],
filename
,
AVIO_FLAG_WRITE
,
&
s
->
interrupt_callback
,
NULL
)
<
0
)
{
av_log
(
s
,
AV_LOG_ERROR
,
"Could not open file : %s
\n
"
,
filename
);
av_log
(
s
,
AV_LOG_ERROR
,
"Could not open file : %s
\n
"
,
filename
);
return
AVERROR
(
EIO
);
}
if
(
codec
->
codec_id
!=
AV_CODEC_ID_RAWVIDEO
)
if
(
codec
->
codec_id
!=
AV_CODEC_ID_RAWVIDEO
)
break
;
filename
[
strlen
(
filename
)
-
1
]
=
'U'
+
i
;
filename
[
strlen
(
filename
)
-
1
]
=
'U'
+
i
;
}
}
else
{
pb
[
0
]
=
s
->
pb
;
}
if
(
codec
->
codec_id
==
AV_CODEC_ID_RAWVIDEO
){
if
(
codec
->
codec_id
==
AV_CODEC_ID_RAWVIDEO
)
{
int
ysize
=
codec
->
width
*
codec
->
height
;
avio_write
(
pb
[
0
],
pkt
->
data
,
ysize
);
avio_write
(
pb
[
1
],
pkt
->
data
+
ysize
,
(
pkt
->
size
-
ysize
)
/
2
);
avio_write
(
pb
[
2
],
pkt
->
data
+
ysize
+
(
pkt
->
size
-
ysize
)
/
2
,
(
pkt
->
size
-
ysize
)
/
2
);
avio_write
(
pb
[
0
],
pkt
->
data
,
ysize
);
avio_write
(
pb
[
1
],
pkt
->
data
+
ysize
,
(
pkt
->
size
-
ysize
)
/
2
);
avio_write
(
pb
[
2
],
pkt
->
data
+
ysize
+
(
pkt
->
size
-
ysize
)
/
2
,
(
pkt
->
size
-
ysize
)
/
2
);
avio_close
(
pb
[
1
]);
avio_close
(
pb
[
2
]);
}
else
{
if
(
ff_guess_image2_codec
(
s
->
filename
)
==
AV_CODEC_ID_JPEG2000
){
}
else
{
if
(
ff_guess_image2_codec
(
s
->
filename
)
==
AV_CODEC_ID_JPEG2000
)
{
AVStream
*
st
=
s
->
streams
[
0
];
if
(
st
->
codec
->
extradata_size
>
8
&&
AV_RL32
(
st
->
codec
->
extradata
+
4
)
==
MKTAG
(
'j'
,
'p'
,
'2'
,
'h'
)){
if
(
pkt
->
size
<
8
||
AV_RL32
(
pkt
->
data
+
4
)
!=
MKTAG
(
'j'
,
'p'
,
'2'
,
'c'
))
if
(
st
->
codec
->
extradata_size
>
8
&&
AV_RL32
(
st
->
codec
->
extradata
+
4
)
==
MKTAG
(
'j'
,
'p'
,
'2'
,
'h'
))
{
if
(
pkt
->
size
<
8
||
AV_RL32
(
pkt
->
data
+
4
)
!=
MKTAG
(
'j'
,
'p'
,
'2'
,
'c'
))
goto
error
;
avio_wb32
(
pb
[
0
],
12
);
ffio_wfourcc
(
pb
[
0
],
"jP "
);
...
...
@@ -104,10 +105,10 @@ static int write_packet(AVFormatContext *s, AVPacket *pkt)
avio_wb32
(
pb
[
0
],
0
);
ffio_wfourcc
(
pb
[
0
],
"jp2 "
);
avio_write
(
pb
[
0
],
st
->
codec
->
extradata
,
st
->
codec
->
extradata_size
);
}
else
if
(
pkt
->
size
<
8
||
(
!
st
->
codec
->
extradata_size
&&
AV_RL32
(
pkt
->
data
+
4
)
!=
MKTAG
(
'j'
,
'P'
,
' '
,
' '
))){
// signature
error:
}
else
if
(
pkt
->
size
<
8
||
(
!
st
->
codec
->
extradata_size
&&
AV_RL32
(
pkt
->
data
+
4
)
!=
MKTAG
(
'j'
,
'P'
,
' '
,
' '
)))
{
// signature
error:
av_log
(
s
,
AV_LOG_ERROR
,
"malformed JPEG 2000 codestream
\n
"
);
return
-
1
;
}
...
...
@@ -126,7 +127,7 @@ static int write_packet(AVFormatContext *s, AVPacket *pkt)
#define OFFSET(x) offsetof(VideoMuxData, x)
#define ENC AV_OPT_FLAG_ENCODING_PARAM
static
const
AVOption
muxoptions
[]
=
{
{
"start_number"
,
"first number in the sequence"
,
OFFSET
(
img_number
),
AV_OPT_TYPE_INT
,
{.
i64
=
1
},
1
,
INT_MAX
,
ENC
},
{
"start_number"
,
"first number in the sequence"
,
OFFSET
(
img_number
),
AV_OPT_TYPE_INT
,
{
.
i64
=
1
},
1
,
INT_MAX
,
ENC
},
{
NULL
},
};
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment