Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
F
ffmpeg.wasm-core
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Linshizhi
ffmpeg.wasm-core
Commits
699d02b8
Commit
699d02b8
authored
Feb 24, 2013
by
Justin Ruggles
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
libschroedinger: cosmetics: rename variable avccontext to avctx
This is consistent with the rest of libavcodec.
parent
09031b46
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
92 additions
and
96 deletions
+92
-96
libschroedinger.c
libavcodec/libschroedinger.c
+11
-11
libschroedinger.h
libavcodec/libschroedinger.h
+2
-2
libschroedingerdec.c
libavcodec/libschroedingerdec.c
+30
-30
libschroedingerenc.c
libavcodec/libschroedingerenc.c
+49
-53
No files found.
libavcodec/libschroedinger.c
View file @
699d02b8
...
...
@@ -46,7 +46,7 @@ static const SchroVideoFormatInfo ff_schro_video_format_info[] = {
{
4096
,
2160
,
24
,
1
},
};
static
unsigned
int
get_video_format_idx
(
AVCodecContext
*
avc
context
)
static
unsigned
int
get_video_format_idx
(
AVCodecContext
*
avc
tx
)
{
unsigned
int
ret_idx
=
0
;
unsigned
int
idx
;
...
...
@@ -55,11 +55,11 @@ static unsigned int get_video_format_idx(AVCodecContext *avccontext)
for
(
idx
=
1
;
idx
<
num_formats
;
++
idx
)
{
const
SchroVideoFormatInfo
*
vf
=
&
ff_schro_video_format_info
[
idx
];
if
(
avc
context
->
width
==
vf
->
width
&&
avc
context
->
height
==
vf
->
height
)
{
if
(
avc
tx
->
width
==
vf
->
width
&&
avc
tx
->
height
==
vf
->
height
)
{
ret_idx
=
idx
;
if
(
avc
context
->
time_base
.
den
==
vf
->
frame_rate_num
&&
avc
context
->
time_base
.
num
==
vf
->
frame_rate_denom
)
if
(
avc
tx
->
time_base
.
den
==
vf
->
frame_rate_num
&&
avc
tx
->
time_base
.
num
==
vf
->
frame_rate_denom
)
return
idx
;
}
}
...
...
@@ -136,12 +136,12 @@ static const SchroVideoFormatEnum ff_schro_video_formats[]={
SCHRO_VIDEO_FORMAT_DC4K_24
,
};
SchroVideoFormatEnum
ff_get_schro_video_format_preset
(
AVCodecContext
*
avc
context
)
SchroVideoFormatEnum
ff_get_schro_video_format_preset
(
AVCodecContext
*
avc
tx
)
{
unsigned
int
num_formats
=
sizeof
(
ff_schro_video_formats
)
/
sizeof
(
ff_schro_video_formats
[
0
]);
unsigned
int
idx
=
get_video_format_idx
(
avc
context
);
unsigned
int
idx
=
get_video_format_idx
(
avc
tx
);
return
(
idx
<
num_formats
)
?
ff_schro_video_formats
[
idx
]
:
SCHRO_VIDEO_FORMAT_CUSTOM
;
...
...
@@ -175,7 +175,7 @@ static void free_schro_frame(SchroFrame *frame, void *priv)
av_freep
(
&
p_pic
);
}
SchroFrame
*
ff_create_schro_frame
(
AVCodecContext
*
avc
context
,
SchroFrame
*
ff_create_schro_frame
(
AVCodecContext
*
avc
tx
,
SchroFrameFormat
schro_frame_fmt
)
{
AVPicture
*
p_pic
;
...
...
@@ -184,13 +184,13 @@ SchroFrame *ff_create_schro_frame(AVCodecContext *avccontext,
int
y_height
,
uv_height
;
int
i
;
y_width
=
avc
context
->
width
;
y_height
=
avc
context
->
height
;
y_width
=
avc
tx
->
width
;
y_height
=
avc
tx
->
height
;
uv_width
=
y_width
>>
(
SCHRO_FRAME_FORMAT_H_SHIFT
(
schro_frame_fmt
));
uv_height
=
y_height
>>
(
SCHRO_FRAME_FORMAT_V_SHIFT
(
schro_frame_fmt
));
p_pic
=
av_mallocz
(
sizeof
(
AVPicture
));
avpicture_alloc
(
p_pic
,
avc
context
->
pix_fmt
,
y_width
,
y_height
);
avpicture_alloc
(
p_pic
,
avc
tx
->
pix_fmt
,
y_width
,
y_height
);
p_frame
=
schro_frame_new
();
p_frame
->
format
=
schro_frame_fmt
;
...
...
libavcodec/libschroedinger.h
View file @
699d02b8
...
...
@@ -114,7 +114,7 @@ static const struct {
* Returns the video format preset matching the input video dimensions and
* time base.
*/
SchroVideoFormatEnum
ff_get_schro_video_format_preset
(
AVCodecContext
*
avc
context
);
SchroVideoFormatEnum
ff_get_schro_video_format_preset
(
AVCodecContext
*
avc
tx
);
/**
* Sets the Schroedinger frame format corresponding to the Schro chroma format
...
...
@@ -127,7 +127,7 @@ int ff_get_schro_frame_format(SchroChromaFormat schro_chroma_fmt,
* Create a Schro frame based on the dimensions and frame format
* passed. Returns a pointer to a frame on success, NULL on failure.
*/
SchroFrame
*
ff_create_schro_frame
(
AVCodecContext
*
avc
context
,
SchroFrame
*
ff_create_schro_frame
(
AVCodecContext
*
avc
tx
,
SchroFrameFormat
schro_frame_fmt
);
#endif
/* AVCODEC_LIBSCHROEDINGER_H */
libavcodec/libschroedingerdec.c
View file @
699d02b8
...
...
@@ -151,14 +151,14 @@ static enum AVPixelFormat get_chroma_format(SchroChromaFormat schro_pix_fmt)
return
AV_PIX_FMT_NONE
;
}
static
av_cold
int
libschroedinger_decode_init
(
AVCodecContext
*
avc
context
)
static
av_cold
int
libschroedinger_decode_init
(
AVCodecContext
*
avc
tx
)
{
SchroDecoderParams
*
p_schro_params
=
avc
context
->
priv_data
;
SchroDecoderParams
*
p_schro_params
=
avc
tx
->
priv_data
;
/* First of all, initialize our supporting libraries. */
schro_init
();
schro_debug_set_level
(
avc
context
->
debug
);
schro_debug_set_level
(
avc
tx
->
debug
);
p_schro_params
->
decoder
=
schro_decoder_new
();
schro_decoder_set_skip_ratio
(
p_schro_params
->
decoder
,
1
);
...
...
@@ -175,38 +175,38 @@ static void libschroedinger_decode_frame_free(void *frame)
schro_frame_unref
(
frame
);
}
static
void
libschroedinger_handle_first_access_unit
(
AVCodecContext
*
avc
context
)
static
void
libschroedinger_handle_first_access_unit
(
AVCodecContext
*
avc
tx
)
{
SchroDecoderParams
*
p_schro_params
=
avc
context
->
priv_data
;
SchroDecoderParams
*
p_schro_params
=
avc
tx
->
priv_data
;
SchroDecoder
*
decoder
=
p_schro_params
->
decoder
;
p_schro_params
->
format
=
schro_decoder_get_video_format
(
decoder
);
/* Tell Libav about sequence details. */
if
(
av_image_check_size
(
p_schro_params
->
format
->
width
,
p_schro_params
->
format
->
height
,
0
,
avc
context
)
<
0
)
{
av_log
(
avc
context
,
AV_LOG_ERROR
,
"invalid dimensions (%dx%d)
\n
"
,
p_schro_params
->
format
->
height
,
0
,
avc
tx
)
<
0
)
{
av_log
(
avc
tx
,
AV_LOG_ERROR
,
"invalid dimensions (%dx%d)
\n
"
,
p_schro_params
->
format
->
width
,
p_schro_params
->
format
->
height
);
avc
context
->
height
=
avccontext
->
width
=
0
;
avc
tx
->
height
=
avctx
->
width
=
0
;
return
;
}
avc
context
->
height
=
p_schro_params
->
format
->
height
;
avc
context
->
width
=
p_schro_params
->
format
->
width
;
avc
context
->
pix_fmt
=
get_chroma_format
(
p_schro_params
->
format
->
chroma_format
);
avc
tx
->
height
=
p_schro_params
->
format
->
height
;
avc
tx
->
width
=
p_schro_params
->
format
->
width
;
avc
tx
->
pix_fmt
=
get_chroma_format
(
p_schro_params
->
format
->
chroma_format
);
if
(
ff_get_schro_frame_format
(
p_schro_params
->
format
->
chroma_format
,
&
p_schro_params
->
frame_format
)
==
-
1
)
{
av_log
(
avc
context
,
AV_LOG_ERROR
,
av_log
(
avc
tx
,
AV_LOG_ERROR
,
"This codec currently only supports planar YUV 4:2:0, 4:2:2 "
"and 4:4:4 formats.
\n
"
);
return
;
}
avc
context
->
time_base
.
den
=
p_schro_params
->
format
->
frame_rate_numerator
;
avc
context
->
time_base
.
num
=
p_schro_params
->
format
->
frame_rate_denominator
;
avc
tx
->
time_base
.
den
=
p_schro_params
->
format
->
frame_rate_numerator
;
avc
tx
->
time_base
.
num
=
p_schro_params
->
format
->
frame_rate_denominator
;
}
static
int
libschroedinger_decode_frame
(
AVCodecContext
*
avc
context
,
static
int
libschroedinger_decode_frame
(
AVCodecContext
*
avc
tx
,
void
*
data
,
int
*
got_frame
,
AVPacket
*
avpkt
)
{
...
...
@@ -215,7 +215,7 @@ static int libschroedinger_decode_frame(AVCodecContext *avccontext,
int64_t
pts
=
avpkt
->
pts
;
SchroTag
*
tag
;
SchroDecoderParams
*
p_schro_params
=
avc
context
->
priv_data
;
SchroDecoderParams
*
p_schro_params
=
avc
tx
->
priv_data
;
SchroDecoder
*
decoder
=
p_schro_params
->
decoder
;
SchroBuffer
*
enc_buf
;
SchroFrame
*
frame
;
...
...
@@ -241,17 +241,17 @@ static int libschroedinger_decode_frame(AVCodecContext *avccontext,
/* Set Schrotag with the pts to be recovered after decoding*/
enc_buf
->
tag
=
schro_tag_new
(
av_malloc
(
sizeof
(
int64_t
)),
av_free
);
if
(
!
enc_buf
->
tag
->
value
)
{
av_log
(
avc
context
,
AV_LOG_ERROR
,
"Unable to allocate SchroTag
\n
"
);
av_log
(
avc
tx
,
AV_LOG_ERROR
,
"Unable to allocate SchroTag
\n
"
);
return
AVERROR
(
ENOMEM
);
}
AV_WN
(
64
,
enc_buf
->
tag
->
value
,
pts
);
/* Push buffer into decoder. */
if
(
SCHRO_PARSE_CODE_IS_PICTURE
(
enc_buf
->
data
[
4
])
&&
SCHRO_PARSE_CODE_NUM_REFS
(
enc_buf
->
data
[
4
])
>
0
)
avc
context
->
has_b_frames
=
1
;
avc
tx
->
has_b_frames
=
1
;
state
=
schro_decoder_push
(
decoder
,
enc_buf
);
if
(
state
==
SCHRO_DECODER_FIRST_ACCESS_UNIT
)
libschroedinger_handle_first_access_unit
(
avc
context
);
libschroedinger_handle_first_access_unit
(
avc
tx
);
go
=
1
;
}
else
outer
=
0
;
...
...
@@ -261,7 +261,7 @@ static int libschroedinger_decode_frame(AVCodecContext *avccontext,
state
=
schro_decoder_wait
(
decoder
);
switch
(
state
)
{
case
SCHRO_DECODER_FIRST_ACCESS_UNIT
:
libschroedinger_handle_first_access_unit
(
avc
context
);
libschroedinger_handle_first_access_unit
(
avc
tx
);
break
;
case
SCHRO_DECODER_NEED_BITS
:
...
...
@@ -271,7 +271,7 @@ static int libschroedinger_decode_frame(AVCodecContext *avccontext,
case
SCHRO_DECODER_NEED_FRAME
:
/* Decoder needs a frame - create one and push it in. */
frame
=
ff_create_schro_frame
(
avc
context
,
frame
=
ff_create_schro_frame
(
avc
tx
,
p_schro_params
->
frame_format
);
schro_decoder_add_output_picture
(
decoder
,
frame
);
break
;
...
...
@@ -285,7 +285,7 @@ static int libschroedinger_decode_frame(AVCodecContext *avccontext,
/* Add relation between schroframe and pts. */
framewithpts
=
av_malloc
(
sizeof
(
LibSchroFrameContext
));
if
(
!
framewithpts
)
{
av_log
(
avc
context
,
AV_LOG_ERROR
,
"Unable to allocate FrameWithPts
\n
"
);
av_log
(
avc
tx
,
AV_LOG_ERROR
,
"Unable to allocate FrameWithPts
\n
"
);
return
AVERROR
(
ENOMEM
);
}
framewithpts
->
frame
=
frame
;
...
...
@@ -313,9 +313,9 @@ static int libschroedinger_decode_frame(AVCodecContext *avccontext,
if
(
framewithpts
&&
framewithpts
->
frame
)
{
if
(
p_schro_params
->
dec_frame
.
data
[
0
])
avc
context
->
release_buffer
(
avccontext
,
&
p_schro_params
->
dec_frame
);
if
(
ff_get_buffer
(
avc
context
,
&
p_schro_params
->
dec_frame
)
<
0
)
{
av_log
(
avc
context
,
AV_LOG_ERROR
,
"Unable to allocate buffer
\n
"
);
avc
tx
->
release_buffer
(
avctx
,
&
p_schro_params
->
dec_frame
);
if
(
ff_get_buffer
(
avc
tx
,
&
p_schro_params
->
dec_frame
)
<
0
)
{
av_log
(
avc
tx
,
AV_LOG_ERROR
,
"Unable to allocate buffer
\n
"
);
return
AVERROR
(
ENOMEM
);
}
...
...
@@ -354,15 +354,15 @@ static int libschroedinger_decode_frame(AVCodecContext *avccontext,
}
static
av_cold
int
libschroedinger_decode_close
(
AVCodecContext
*
avc
context
)
static
av_cold
int
libschroedinger_decode_close
(
AVCodecContext
*
avc
tx
)
{
SchroDecoderParams
*
p_schro_params
=
avc
context
->
priv_data
;
SchroDecoderParams
*
p_schro_params
=
avc
tx
->
priv_data
;
/* Free the decoder. */
schro_decoder_free
(
p_schro_params
->
decoder
);
av_freep
(
&
p_schro_params
->
format
);
if
(
p_schro_params
->
dec_frame
.
data
[
0
])
avc
context
->
release_buffer
(
avccontext
,
&
p_schro_params
->
dec_frame
);
avc
tx
->
release_buffer
(
avctx
,
&
p_schro_params
->
dec_frame
);
/* Free data in the output frame queue. */
ff_schro_queue_free
(
&
p_schro_params
->
dec_frame_queue
,
...
...
@@ -371,11 +371,11 @@ static av_cold int libschroedinger_decode_close(AVCodecContext *avccontext)
return
0
;
}
static
void
libschroedinger_flush
(
AVCodecContext
*
avc
context
)
static
void
libschroedinger_flush
(
AVCodecContext
*
avc
tx
)
{
/* Got a seek request. Free the decoded frames queue and then reset
* the decoder */
SchroDecoderParams
*
p_schro_params
=
avc
context
->
priv_data
;
SchroDecoderParams
*
p_schro_params
=
avc
tx
->
priv_data
;
/* Free data in the output frame queue. */
ff_schro_queue_free
(
&
p_schro_params
->
dec_frame_queue
,
...
...
libavcodec/libschroedingerenc.c
View file @
699d02b8
...
...
@@ -79,33 +79,32 @@ typedef struct SchroEncoderParams {
/**
* Works out Schro-compatible chroma format.
*/
static
int
set_chroma_format
(
AVCodecContext
*
avc
context
)
static
int
set_chroma_format
(
AVCodecContext
*
avc
tx
)
{
int
num_formats
=
sizeof
(
schro_pixel_format_map
)
/
sizeof
(
schro_pixel_format_map
[
0
]);
int
idx
;
SchroEncoderParams
*
p_schro_params
=
avc
context
->
priv_data
;
SchroEncoderParams
*
p_schro_params
=
avc
tx
->
priv_data
;
for
(
idx
=
0
;
idx
<
num_formats
;
++
idx
)
{
if
(
schro_pixel_format_map
[
idx
].
ff_pix_fmt
==
avccontext
->
pix_fmt
)
{
if
(
schro_pixel_format_map
[
idx
].
ff_pix_fmt
==
avctx
->
pix_fmt
)
{
p_schro_params
->
format
->
chroma_format
=
schro_pixel_format_map
[
idx
].
schro_pix_fmt
;
return
0
;
}
}
av_log
(
avc
context
,
AV_LOG_ERROR
,
av_log
(
avc
tx
,
AV_LOG_ERROR
,
"This codec currently only supports planar YUV 4:2:0, 4:2:2"
" and 4:4:4 formats.
\n
"
);
return
-
1
;
}
static
int
libschroedinger_encode_init
(
AVCodecContext
*
avc
context
)
static
int
libschroedinger_encode_init
(
AVCodecContext
*
avc
tx
)
{
SchroEncoderParams
*
p_schro_params
=
avc
context
->
priv_data
;
SchroEncoderParams
*
p_schro_params
=
avc
tx
->
priv_data
;
SchroVideoFormatEnum
preset
;
/* Initialize the libraries that libschroedinger depends on. */
...
...
@@ -115,75 +114,75 @@ static int libschroedinger_encode_init(AVCodecContext *avccontext)
p_schro_params
->
encoder
=
schro_encoder_new
();
if
(
!
p_schro_params
->
encoder
)
{
av_log
(
avc
context
,
AV_LOG_ERROR
,
av_log
(
avc
tx
,
AV_LOG_ERROR
,
"Unrecoverable Error: schro_encoder_new failed. "
);
return
-
1
;
}
/* Initialize the format. */
preset
=
ff_get_schro_video_format_preset
(
avc
context
);
preset
=
ff_get_schro_video_format_preset
(
avc
tx
);
p_schro_params
->
format
=
schro_encoder_get_video_format
(
p_schro_params
->
encoder
);
schro_video_format_set_std_video_format
(
p_schro_params
->
format
,
preset
);
p_schro_params
->
format
->
width
=
avc
context
->
width
;
p_schro_params
->
format
->
height
=
avc
context
->
height
;
p_schro_params
->
format
->
width
=
avc
tx
->
width
;
p_schro_params
->
format
->
height
=
avc
tx
->
height
;
if
(
set_chroma_format
(
avc
context
)
==
-
1
)
if
(
set_chroma_format
(
avc
tx
)
==
-
1
)
return
-
1
;
if
(
avc
context
->
color_primaries
==
AVCOL_PRI_BT709
)
{
if
(
avc
tx
->
color_primaries
==
AVCOL_PRI_BT709
)
{
p_schro_params
->
format
->
colour_primaries
=
SCHRO_COLOUR_PRIMARY_HDTV
;
}
else
if
(
avc
context
->
color_primaries
==
AVCOL_PRI_BT470BG
)
{
}
else
if
(
avc
tx
->
color_primaries
==
AVCOL_PRI_BT470BG
)
{
p_schro_params
->
format
->
colour_primaries
=
SCHRO_COLOUR_PRIMARY_SDTV_625
;
}
else
if
(
avc
context
->
color_primaries
==
AVCOL_PRI_SMPTE170M
)
{
}
else
if
(
avc
tx
->
color_primaries
==
AVCOL_PRI_SMPTE170M
)
{
p_schro_params
->
format
->
colour_primaries
=
SCHRO_COLOUR_PRIMARY_SDTV_525
;
}
if
(
avc
context
->
colorspace
==
AVCOL_SPC_BT709
)
{
if
(
avc
tx
->
colorspace
==
AVCOL_SPC_BT709
)
{
p_schro_params
->
format
->
colour_matrix
=
SCHRO_COLOUR_MATRIX_HDTV
;
}
else
if
(
avc
context
->
colorspace
==
AVCOL_SPC_BT470BG
)
{
}
else
if
(
avc
tx
->
colorspace
==
AVCOL_SPC_BT470BG
)
{
p_schro_params
->
format
->
colour_matrix
=
SCHRO_COLOUR_MATRIX_SDTV
;
}
if
(
avc
context
->
color_trc
==
AVCOL_TRC_BT709
)
{
if
(
avc
tx
->
color_trc
==
AVCOL_TRC_BT709
)
{
p_schro_params
->
format
->
transfer_function
=
SCHRO_TRANSFER_CHAR_TV_GAMMA
;
}
if
(
ff_get_schro_frame_format
(
p_schro_params
->
format
->
chroma_format
,
&
p_schro_params
->
frame_format
)
==
-
1
)
{
av_log
(
avc
context
,
AV_LOG_ERROR
,
av_log
(
avc
tx
,
AV_LOG_ERROR
,
"This codec currently supports only planar YUV 4:2:0, 4:2:2"
" and 4:4:4 formats.
\n
"
);
return
-
1
;
}
p_schro_params
->
format
->
frame_rate_numerator
=
avc
context
->
time_base
.
den
;
p_schro_params
->
format
->
frame_rate_denominator
=
avc
context
->
time_base
.
num
;
p_schro_params
->
format
->
frame_rate_numerator
=
avc
tx
->
time_base
.
den
;
p_schro_params
->
format
->
frame_rate_denominator
=
avc
tx
->
time_base
.
num
;
p_schro_params
->
frame_size
=
avpicture_get_size
(
avc
context
->
pix_fmt
,
avc
context
->
width
,
avc
context
->
height
);
p_schro_params
->
frame_size
=
avpicture_get_size
(
avc
tx
->
pix_fmt
,
avc
tx
->
width
,
avc
tx
->
height
);
avc
context
->
coded_frame
=
&
p_schro_params
->
picture
;
avc
tx
->
coded_frame
=
&
p_schro_params
->
picture
;
if
(
!
avc
context
->
gop_size
)
{
if
(
!
avc
tx
->
gop_size
)
{
schro_encoder_setting_set_double
(
p_schro_params
->
encoder
,
"gop_structure"
,
SCHRO_ENCODER_GOP_INTRA_ONLY
);
if
(
avc
context
->
coder_type
==
FF_CODER_TYPE_VLC
)
if
(
avc
tx
->
coder_type
==
FF_CODER_TYPE_VLC
)
schro_encoder_setting_set_double
(
p_schro_params
->
encoder
,
"enable_noarith"
,
1
);
}
else
{
schro_encoder_setting_set_double
(
p_schro_params
->
encoder
,
"au_distance"
,
avc
context
->
gop_size
);
avc
context
->
has_b_frames
=
1
;
"au_distance"
,
avc
tx
->
gop_size
);
avc
tx
->
has_b_frames
=
1
;
p_schro_params
->
dts
=
-
1
;
}
/* FIXME - Need to handle SCHRO_ENCODER_RATE_CONTROL_LOW_DELAY. */
if
(
avc
context
->
flags
&
CODEC_FLAG_QSCALE
)
{
if
(
!
avc
context
->
global_quality
)
{
if
(
avc
tx
->
flags
&
CODEC_FLAG_QSCALE
)
{
if
(
!
avc
tx
->
global_quality
)
{
/* lossless coding */
schro_encoder_setting_set_double
(
p_schro_params
->
encoder
,
"rate_control"
,
...
...
@@ -194,7 +193,7 @@ static int libschroedinger_encode_init(AVCodecContext *avccontext)
"rate_control"
,
SCHRO_ENCODER_RATE_CONTROL_CONSTANT_QUALITY
);
quality
=
avc
context
->
global_quality
/
FF_QP2LAMBDA
;
quality
=
avc
tx
->
global_quality
/
FF_QP2LAMBDA
;
if
(
quality
>
10
)
quality
=
10
;
schro_encoder_setting_set_double
(
p_schro_params
->
encoder
,
...
...
@@ -206,19 +205,17 @@ static int libschroedinger_encode_init(AVCodecContext *avccontext)
SCHRO_ENCODER_RATE_CONTROL_CONSTANT_BITRATE
);
schro_encoder_setting_set_double
(
p_schro_params
->
encoder
,
"bitrate"
,
avccontext
->
bit_rate
);
"bitrate"
,
avctx
->
bit_rate
);
}
if
(
avc
context
->
flags
&
CODEC_FLAG_INTERLACED_ME
)
if
(
avc
tx
->
flags
&
CODEC_FLAG_INTERLACED_ME
)
/* All material can be coded as interlaced or progressive
irrespective of the type of source material. */
schro_encoder_setting_set_double
(
p_schro_params
->
encoder
,
"interlaced_coding"
,
1
);
schro_encoder_setting_set_double
(
p_schro_params
->
encoder
,
"open_gop"
,
!
(
avc
context
->
flags
&
CODEC_FLAG_CLOSED_GOP
));
!
(
avc
tx
->
flags
&
CODEC_FLAG_CLOSED_GOP
));
/* FIXME: Signal range hardcoded to 8-bit data until both libschroedinger
* and libdirac support other bit-depth data. */
...
...
@@ -230,7 +227,7 @@ static int libschroedinger_encode_init(AVCodecContext *avccontext)
p_schro_params
->
format
);
/* Set the debug level. */
schro_debug_set_level
(
avc
context
->
debug
);
schro_debug_set_level
(
avc
tx
->
debug
);
schro_encoder_start
(
p_schro_params
->
encoder
);
...
...
@@ -239,19 +236,19 @@ static int libschroedinger_encode_init(AVCodecContext *avccontext)
return
0
;
}
static
SchroFrame
*
libschroedinger_frame_from_data
(
AVCodecContext
*
avc
context
,
static
SchroFrame
*
libschroedinger_frame_from_data
(
AVCodecContext
*
avc
tx
,
const
AVFrame
*
frame
)
{
SchroEncoderParams
*
p_schro_params
=
avc
context
->
priv_data
;
SchroEncoderParams
*
p_schro_params
=
avc
tx
->
priv_data
;
SchroFrame
*
in_frame
;
/* Input line size may differ from what the codec supports. Especially
* when transcoding from one format to another. So use avpicture_layout
* to copy the frame. */
in_frame
=
ff_create_schro_frame
(
avc
context
,
p_schro_params
->
frame_format
);
in_frame
=
ff_create_schro_frame
(
avc
tx
,
p_schro_params
->
frame_format
);
if
(
in_frame
)
avpicture_layout
((
const
AVPicture
*
)
frame
,
avc
context
->
pix_fmt
,
avc
context
->
width
,
avccontext
->
height
,
avpicture_layout
((
const
AVPicture
*
)
frame
,
avc
tx
->
pix_fmt
,
avc
tx
->
width
,
avctx
->
height
,
in_frame
->
components
[
0
].
data
,
p_schro_params
->
frame_size
);
...
...
@@ -266,11 +263,11 @@ static void libschroedinger_free_frame(void *data)
av_free
(
enc_frame
);
}
static
int
libschroedinger_encode_frame
(
AVCodecContext
*
avc
context
,
AVPacket
*
pkt
,
static
int
libschroedinger_encode_frame
(
AVCodecContext
*
avc
tx
,
AVPacket
*
pkt
,
const
AVFrame
*
frame
,
int
*
got_packet
)
{
int
enc_size
=
0
;
SchroEncoderParams
*
p_schro_params
=
avc
context
->
priv_data
;
SchroEncoderParams
*
p_schro_params
=
avc
tx
->
priv_data
;
SchroEncoder
*
encoder
=
p_schro_params
->
encoder
;
struct
FFSchroEncodedFrame
*
p_frame_output
=
NULL
;
int
go
=
1
;
...
...
@@ -288,8 +285,7 @@ static int libschroedinger_encode_frame(AVCodecContext *avccontext, AVPacket *pk
}
}
else
{
/* Allocate frame data to schro input buffer. */
SchroFrame
*
in_frame
=
libschroedinger_frame_from_data
(
avccontext
,
frame
);
SchroFrame
*
in_frame
=
libschroedinger_frame_from_data
(
avctx
,
frame
);
/* Load next frame. */
schro_encoder_push_frame
(
encoder
,
in_frame
);
}
...
...
@@ -361,7 +357,7 @@ static int libschroedinger_encode_frame(AVCodecContext *avccontext, AVPacket *pk
break
;
default:
av_log
(
avc
context
,
AV_LOG_ERROR
,
"Unknown Schro Encoder state
\n
"
);
av_log
(
avc
tx
,
AV_LOG_ERROR
,
"Unknown Schro Encoder state
\n
"
);
return
-
1
;
}
}
...
...
@@ -381,17 +377,17 @@ static int libschroedinger_encode_frame(AVCodecContext *avccontext, AVPacket *pk
if
(
last_frame_in_sequence
&&
p_schro_params
->
enc_buf_size
>
0
)
pkt_size
+=
p_schro_params
->
enc_buf_size
;
if
((
ret
=
ff_alloc_packet
(
pkt
,
pkt_size
))
<
0
)
{
av_log
(
avc
context
,
AV_LOG_ERROR
,
"Error getting output packet of size %d.
\n
"
,
pkt_size
);
av_log
(
avc
tx
,
AV_LOG_ERROR
,
"Error getting output packet of size %d.
\n
"
,
pkt_size
);
goto
error
;
}
memcpy
(
pkt
->
data
,
p_frame_output
->
p_encbuf
,
p_frame_output
->
size
);
avc
context
->
coded_frame
->
key_frame
=
p_frame_output
->
key_frame
;
avc
tx
->
coded_frame
->
key_frame
=
p_frame_output
->
key_frame
;
/* Use the frame number of the encoded frame as the pts. It is OK to
* do so since Dirac is a constant frame rate codec. It expects input
* to be of constant frame rate. */
pkt
->
pts
=
avc
context
->
coded_frame
->
pts
=
p_frame_output
->
frame_num
;
avc
tx
->
coded_frame
->
pts
=
p_frame_output
->
frame_num
;
pkt
->
dts
=
p_schro_params
->
dts
++
;
enc_size
=
p_frame_output
->
size
;
...
...
@@ -416,9 +412,9 @@ error:
}
static
int
libschroedinger_encode_close
(
AVCodecContext
*
avc
context
)
static
int
libschroedinger_encode_close
(
AVCodecContext
*
avc
tx
)
{
SchroEncoderParams
*
p_schro_params
=
avc
context
->
priv_data
;
SchroEncoderParams
*
p_schro_params
=
avc
tx
->
priv_data
;
/* Close the encoder. */
schro_encoder_free
(
p_schro_params
->
encoder
);
...
...
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