Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
F
ffmpeg
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
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
ffmpeg
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