aizvorski / h264bitstream

A complete set of functions to read and write H.264 video bitstreams, in particular to examine or modify headers.
GNU Lesser General Public License v2.1
732 stars 238 forks source link

SVC enhancement #17

Closed leslie-wang closed 7 years ago

leslie-wang commented 7 years ago

several enhancement: 1) add SVC syntax parser 2) implement SEI syntax generator 3) add one SVC split utility program.

aizvorski commented 7 years ago

@leslie-wang I wanted to cut a bugfix/maintenance release before adding this major feature in. The bugfix release would be 0.2.0 (released just now), and I think with the svc support we can call it 0.3.0.

Quick question: is this expected to work normally for non-svc files?

leslie-wang commented 7 years ago

My pull request can also work with non-svc stream. SVC is another profile of h.264. so for non-svc stream, it will go to normal parsing flow.

aizvorski commented 7 years ago

Looks good!

I'll add a few tests and call it a release. Sample files: http://concert.itec.aau.at/SVCDataset/svcseqs/

leslie-wang commented 7 years ago

sure. I can also help you adding some tests too.

Best Regards Leslie Qi Wang

On Thu, May 25, 2017 at 10:55 PM, Alex Izvorski notifications@github.com wrote:

Looks good!

I'll add a few tests and call it a release. Sample files: http://concert.itec.aau.at/SVCDataset/svcseqs/

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/aizvorski/h264bitstream/pull/17#issuecomment-304198639, or mute the thread https://github.com/notifications/unsubscribe-auth/ACa6Z44izm3bbafmEV_62ErV6pKAfsTGks5r9mlngaJpZM4MpuW7 .

aizvorski commented 7 years ago

Hi Leslie! I'm trying to make it so that running perl process.pl > h264_stream.c < h264_stream.in.c produces the exact same h264_stream.c as is currently checked in, but I'm running into some trouble you may be able to help with.

E.g. in this block of code:

               memcpy(h->sps_subset_table[h->sps_subset->sps->seq_parameter_set_id], h->sps_subset, sizeof(sps_subset_t));
               //memcpy(h->sps_subset_table[h->sps_subset->sps->seq_parameter_set_id]->sps, h->sps_subset->sps, sizeof(sps_t));
               //memcpy(h->sps_subset_table[h->sps_subset->sps->seq_parameter_set_id]->sps_svc_ext, h->sps_subset->sps_svc_ext, sizeof(sps_svc_ext_t));
               //h->sps_subset_table[h->sps_subset->sps->seq_parameter_set_id]->additional_extension2_flag = h->sps_subset->additional_extension2_flag;

it looks like sometimes when expanding that the first line should be commented out, sometimes the other 3 lines. Could you tell me more about how this is supposed to work? (There is one other piece of code like that)

There is a macro if( is_reading ) which expands to if ( 1 ) for reading and if ( 0 ) for writing, could this be used to accomplish what is needed here?

leslie-wang commented 7 years ago

can you please explain more on the cases? Seems like they should not be commented out.

Best Regards Leslie Qi Wang

On Fri, May 26, 2017 at 12:35 AM, Alex Izvorski notifications@github.com wrote:

Hi Leslie! I'm trying to make it so that running perl process.pl > h264_stream.c < h264_stream.in.c produces the exact same h264_stream.c as is currently checked in, but I'm running into some trouble you may be able to help with.

E.g. in this block of code:

           memcpy(h->sps_subset_table[h->sps_subset->sps->seq_parameter_set_id], h->sps_subset, sizeof(sps_subset_t));
           //memcpy(h->sps_subset_table[h->sps_subset->sps->seq_parameter_set_id]->sps, h->sps_subset->sps, sizeof(sps_t));
           //memcpy(h->sps_subset_table[h->sps_subset->sps->seq_parameter_set_id]->sps_svc_ext, h->sps_subset->sps_svc_ext, sizeof(sps_svc_ext_t));
           //h->sps_subset_table[h->sps_subset->sps->seq_parameter_set_id]->additional_extension2_flag = h->sps_subset->additional_extension2_flag;

it looks like sometimes when expanding that the first line should be commented out, sometimes the other 3 lines. Could you tell me more about how this is supposed to work? (There is one other piece of code like that)

There is a macro if( is_reading ) which expands to if ( 1 ) for reading and if ( 0 ) for writing, could this be used to accomplish what is needed here?

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/aizvorski/h264bitstream/pull/17#issuecomment-304213945, or mute the thread https://github.com/notifications/unsubscribe-auth/ACa6ZxAGHOl083jX-lnQdi5lwnDYG7vvks5r9oDNgaJpZM4MpuW7 .