@@ -13,13 +13,14 @@ void free_frames(AVFrame **frames, int size) {
1313}
1414
1515ERL_NIF_TERM new (ErlNifEnv * env , int argc , const ERL_NIF_TERM argv []) {
16- if (argc != 6 ) {
16+ if (argc != 7 ) {
1717 return xav_nif_raise (env , "invalid_arg_count" );
1818 }
1919
2020 ERL_NIF_TERM ret ;
2121 char * codec_name = NULL ;
2222 char * out_format = NULL ;
23+ int channels ;
2324
2425 // resolve codec
2526 if (!xav_nif_get_atom (env , argv [0 ], & codec_name )) {
@@ -37,8 +38,13 @@ ERL_NIF_TERM new (ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]) {
3738 goto clean ;
3839 }
3940
41+ if (!enif_get_int (env , argv [1 ], & channels )) {
42+ ret = xav_nif_raise (env , "failed_to_get_int" );
43+ goto clean ;
44+ }
45+
4046 // resolve output format
41- if (!xav_nif_get_atom (env , argv [1 ], & out_format )) {
47+ if (!xav_nif_get_atom (env , argv [2 ], & out_format )) {
4248 ret = xav_nif_raise (env , "failed_to_get_atom" );
4349 goto clean ;
4450 }
@@ -61,25 +67,25 @@ ERL_NIF_TERM new (ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]) {
6167
6268 // resolve other params
6369 int out_sample_rate ;
64- if (!enif_get_int (env , argv [2 ], & out_sample_rate )) {
70+ if (!enif_get_int (env , argv [3 ], & out_sample_rate )) {
6571 ret = xav_nif_raise (env , "invalid_out_sample_rate" );
6672 goto clean ;
6773 }
6874
6975 int out_channels ;
70- if (!enif_get_int (env , argv [3 ], & out_channels )) {
76+ if (!enif_get_int (env , argv [4 ], & out_channels )) {
7177 ret = xav_nif_raise (env , "invalid_out_channels" );
7278 goto clean ;
7379 }
7480
7581 int out_width ;
76- if (!enif_get_int (env , argv [4 ], & out_width )) {
82+ if (!enif_get_int (env , argv [5 ], & out_width )) {
7783 ret = xav_nif_raise (env , "failed_to_get_int" );
7884 goto clean ;
7985 }
8086
8187 int out_height ;
82- if (!enif_get_int (env , argv [5 ], & out_height )) {
88+ if (!enif_get_int (env , argv [6 ], & out_height )) {
8389 ret = xav_nif_raise (env , "failed_to_get_int" );
8490 goto clean ;
8591 }
@@ -102,7 +108,7 @@ ERL_NIF_TERM new (ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]) {
102108 goto clean ;
103109 }
104110
105- if (decoder_init (xav_decoder -> decoder , codec ) != 0 ) {
111+ if (decoder_init (xav_decoder -> decoder , codec , channels ) ) {
106112 ret = xav_nif_raise (env , "failed_to_init_decoder" );
107113 goto clean ;
108114 }
@@ -393,7 +399,7 @@ void free_xav_decoder(ErlNifEnv *env, void *obj) {
393399 }
394400}
395401
396- static ErlNifFunc xav_funcs [] = {{"new" , 6 , new },
402+ static ErlNifFunc xav_funcs [] = {{"new" , 7 , new },
397403 {"decode" , 4 , decode , ERL_NIF_DIRTY_JOB_CPU_BOUND },
398404 {"flush" , 1 , flush , ERL_NIF_DIRTY_JOB_CPU_BOUND },
399405 {"pixel_formats" , 0 , pixel_formats },
0 commit comments